From d2949d6e0375f4bc65566b96f3f832249ae5cedd Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 15 May 2015 11:46:20 -0400 Subject: [PATCH] support video_ts.nfo --- .../ImageMagick/ImageMagickEncoder.cs | 9 ++++- MediaBrowser.Controller/Providers/ItemInfo.cs | 23 +++++++++++- MediaBrowser.LocalMetadata/BaseXmlProvider.cs | 2 +- .../Encoder/BaseEncoder.cs | 28 ++------------ .../Encoder/EncodingJob.cs | 3 +- .../Encoder/EncodingJobFactory.cs | 37 +++++++++++++++++-- .../Manager/MetadataService.cs | 2 +- .../Api/PackageCreator.cs | 16 -------- .../MediaBrowser.WebDashboard.csproj | 3 ++ .../Parsers/BaseNfoParser.cs | 5 +++ .../Providers/BaseNfoProvider.cs | 2 +- .../Providers/BaseVideoNfoProvider.cs | 20 +++------- .../Savers/MovieNfoSaver.cs | 25 ++++++++++--- 13 files changed, 103 insertions(+), 72 deletions(-) diff --git a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs index ff4a8f55bc..5d1579cbe7 100644 --- a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs +++ b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs @@ -115,9 +115,16 @@ namespace Emby.Drawing.ImageMagick } } + private bool HasTransparency(string path) + { + var ext = Path.GetExtension(path); + + return string.Equals(ext, ".png", StringComparison.OrdinalIgnoreCase); + } + public void EncodeImage(string inputPath, string outputPath, int width, int height, int quality, ImageProcessingOptions options) { - if (string.IsNullOrWhiteSpace(options.BackgroundColor)) + if (string.IsNullOrWhiteSpace(options.BackgroundColor) && !HasTransparency(inputPath)) { using (var originalImage = new MagickWand(inputPath)) { diff --git a/MediaBrowser.Controller/Providers/ItemInfo.cs b/MediaBrowser.Controller/Providers/ItemInfo.cs index 113a7bb8ec..78f352057b 100644 --- a/MediaBrowser.Controller/Providers/ItemInfo.cs +++ b/MediaBrowser.Controller/Providers/ItemInfo.cs @@ -1,9 +1,30 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Model.Entities; + namespace MediaBrowser.Controller.Providers { public class ItemInfo { - public string Path { get; set; } + public ItemInfo() + { + } + public ItemInfo(IHasMetadata item) + { + Path = item.Path; + ContainingFolderPath = item.ContainingFolderPath; + IsInMixedFolder = item.IsInMixedFolder; + + var video = item as Video; + if (video != null) + { + VideoType = video.VideoType; + } + } + + public string Path { get; set; } + public string ContainingFolderPath { get; set; } + public VideoType VideoType { get; set; } public bool IsInMixedFolder { get; set; } } } \ No newline at end of file diff --git a/MediaBrowser.LocalMetadata/BaseXmlProvider.cs b/MediaBrowser.LocalMetadata/BaseXmlProvider.cs index 154d026008..57358fe62b 100644 --- a/MediaBrowser.LocalMetadata/BaseXmlProvider.cs +++ b/MediaBrowser.LocalMetadata/BaseXmlProvider.cs @@ -58,7 +58,7 @@ namespace MediaBrowser.LocalMetadata public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { - var file = GetXmlFile(new ItemInfo { IsInMixedFolder = item.IsInMixedFolder, Path = item.Path }, directoryService); + var file = GetXmlFile(new ItemInfo(item), directoryService); if (file == null) { diff --git a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs index e255373627..9337824a22 100644 --- a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs @@ -2,13 +2,10 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Controller.Session; using MediaBrowser.MediaEncoding.Subtitles; using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Dlna; -using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; @@ -39,7 +36,7 @@ namespace MediaBrowser.MediaEncoding.Encoder protected readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public BaseEncoder(MediaEncoder mediaEncoder, + protected BaseEncoder(MediaEncoder mediaEncoder, ILogger logger, IServerConfigurationManager configurationManager, IFileSystem fileSystem, @@ -64,7 +61,7 @@ namespace MediaBrowser.MediaEncoding.Encoder IProgress progress, CancellationToken cancellationToken) { - var encodingJob = await new EncodingJobFactory(Logger, LibraryManager, MediaSourceManager) + var encodingJob = await new EncodingJobFactory(Logger, LibraryManager, MediaSourceManager, ConfigurationManager) .CreateJob(options, IsVideoEncoder, progress, cancellationToken).ConfigureAwait(false); encodingJob.OutputFilePath = GetOutputFilePath(encodingJob); @@ -305,25 +302,6 @@ namespace MediaBrowser.MediaEncoding.Encoder return job.Options.CpuCoreLimit ?? 0; } - protected EncodingQuality GetQualitySetting() - { - var quality = GetEncodingOptions().EncodingQuality; - - if (quality == EncodingQuality.Auto) - { - var cpuCount = Environment.ProcessorCount; - - if (cpuCount >= 4) - { - //return EncodingQuality.HighQuality; - } - - return EncodingQuality.HighSpeed; - } - - return quality; - } - protected string GetInputModifier(EncodingJob job, bool genPts = true) { var inputModifier = string.Empty; @@ -543,7 +521,7 @@ namespace MediaBrowser.MediaEncoding.Encoder var isVc1 = state.VideoStream != null && string.Equals(state.VideoStream.Codec, "vc1", StringComparison.OrdinalIgnoreCase); - var qualitySetting = GetQualitySetting(); + var qualitySetting = state.Quality; if (string.Equals(videoCodec, "libx264", StringComparison.OrdinalIgnoreCase)) { diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs index 767f3f829b..efce5abb0e 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJob.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.MediaEncoding; +using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Dto; @@ -24,7 +25,7 @@ namespace MediaBrowser.MediaEncoding.Encoder public Stream LogFileStream { get; set; } public IProgress Progress { get; set; } public TaskCompletionSource TaskCompletionSource; - + public EncodingQuality Quality { get; set; } public EncodingJobOptions Options { get; set; } public string InputContainer { get; set; } public MediaSourceInfo MediaSource { get; set; } diff --git a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs index 44b85a77df..d56838c8b5 100644 --- a/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs +++ b/MediaBrowser.MediaEncoding/Encoder/EncodingJobFactory.cs @@ -1,8 +1,7 @@ -using System.IO; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Library; -using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.MediaEncoding; +using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; @@ -22,14 +21,16 @@ namespace MediaBrowser.MediaEncoding.Encoder private readonly ILogger _logger; private readonly ILibraryManager _libraryManager; private readonly IMediaSourceManager _mediaSourceManager; + private readonly IConfigurationManager _config; protected static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public EncodingJobFactory(ILogger logger, ILibraryManager libraryManager, IMediaSourceManager mediaSourceManager) + public EncodingJobFactory(ILogger logger, ILibraryManager libraryManager, IMediaSourceManager mediaSourceManager, IConfigurationManager config) { _logger = logger; _libraryManager = libraryManager; _mediaSourceManager = mediaSourceManager; + _config = config; } public async Task CreateJob(EncodingJobOptions options, bool isVideoRequest, IProgress progress, CancellationToken cancellationToken) @@ -95,6 +96,10 @@ namespace MediaBrowser.MediaEncoding.Encoder TryStreamCopy(state, request); + state.Quality = options.Context == EncodingContext.Static ? + EncodingQuality.MaxQuality : + GetQualitySetting(); + return state; } @@ -194,6 +199,30 @@ namespace MediaBrowser.MediaEncoding.Encoder state.MediaSource = mediaSource; } + protected EncodingQuality GetQualitySetting() + { + var quality = GetEncodingOptions().EncodingQuality; + + if (quality == EncodingQuality.Auto) + { + var cpuCount = Environment.ProcessorCount; + + if (cpuCount >= 4) + { + //return EncodingQuality.HighQuality; + } + + return EncodingQuality.HighSpeed; + } + + return quality; + } + + protected EncodingOptions GetEncodingOptions() + { + return _config.GetConfiguration("encoding"); + } + /// /// Infers the video codec. /// diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 71bc9c0651..bc0b1bcb2b 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -378,7 +378,7 @@ namespace MediaBrowser.Providers.Manager var providerName = provider.GetType().Name; Logger.Debug("Running {0} for {1}", providerName, logName); - var itemInfo = new ItemInfo { Path = item.Path, IsInMixedFolder = item.IsInMixedFolder }; + var itemInfo = new ItemInfo(item); try { diff --git a/MediaBrowser.WebDashboard/Api/PackageCreator.cs b/MediaBrowser.WebDashboard/Api/PackageCreator.cs index 13c3de621d..1f8810c769 100644 --- a/MediaBrowser.WebDashboard/Api/PackageCreator.cs +++ b/MediaBrowser.WebDashboard/Api/PackageCreator.cs @@ -437,8 +437,6 @@ namespace MediaBrowser.WebDashboard.Api "connectlogin.js", "dashboardgeneral.js", "dashboardpage.js", - "device.js", - "devices.js", "devicesupload.js", "directorybrowser.js", "dlnaprofile.js", @@ -458,16 +456,10 @@ namespace MediaBrowser.WebDashboard.Api "favorites.js", "forgotpassword.js", "forgotpasswordpin.js", - "gamesrecommendedpage.js", - "gamesystemspage.js", - "gamespage.js", - "gamegenrepage.js", - "gamestudiospage.js", "homelatest.js", "indexpage.js", "itembynamedetailpage.js", "itemdetailpage.js", - "itemlistpage.js", "kids.js", "librarypathmapping.js", "reports.js", @@ -506,9 +498,7 @@ namespace MediaBrowser.WebDashboard.Api "musicalbums.js", "musicalbumartists.js", "musicartists.js", - "musicgenres.js", "musicrecommended.js", - "musicvideos.js", "mypreferencesdisplay.js", "mypreferenceslanguages.js", @@ -529,22 +519,16 @@ namespace MediaBrowser.WebDashboard.Api "scheduledtaskspage.js", "search.js", "selectserver.js", - "serversecurity.js", "songs.js", "streamingsettings.js", "supporterkeypage.js", "supporterpage.js", "syncactivity.js", "syncsettings.js", - "episodes.js", "thememediaplayer.js", - "tvgenres.js", "tvlatest.js", - "tvpeople.js", "tvrecommended.js", "tvshows.js", - "tvstudios.js", - "tvupcoming.js", "useredit.js", "usernew.js", "myprofile.js", diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 0c1d43744e..b45b3dc3a2 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -219,6 +219,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs index 11cb25ab84..4d1db15f52 100644 --- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs +++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs @@ -952,6 +952,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers var userData = GetOrAdd(userDataList, userDataUserId); userData.PlayCount = parsedValue; + + if (parsedValue > 0) + { + userData.Played = true; + } } } } diff --git a/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs index 1ee1b42418..1e82dfce77 100644 --- a/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/BaseNfoProvider.cs @@ -59,7 +59,7 @@ namespace MediaBrowser.XbmcMetadata.Providers public bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date) { - var file = GetXmlFile(new ItemInfo { IsInMixedFolder = item.IsInMixedFolder, Path = item.Path }, directoryService); + var file = GetXmlFile(new ItemInfo(item), directoryService); if (file == null) { diff --git a/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs index 8119c162c0..4dff051c7d 100644 --- a/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs +++ b/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs @@ -5,8 +5,10 @@ using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.XbmcMetadata.Parsers; +using MediaBrowser.XbmcMetadata.Savers; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading; namespace MediaBrowser.XbmcMetadata.Providers @@ -35,21 +37,9 @@ namespace MediaBrowser.XbmcMetadata.Providers protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService) { - var path = GetMovieSavePath(info, FileSystem); - - return directoryService.GetFile(path); - } - - public static string GetMovieSavePath(ItemInfo item, IFileSystem fileSystem) - { - if (Directory.Exists(item.Path)) - { - var path = item.Path; - - return Path.Combine(path, Path.GetFileName(path) + ".nfo"); - } - - return Path.ChangeExtension(item.Path, ".nfo"); + return MovieNfoSaver.GetMovieSavePaths(info, FileSystem) + .Select(directoryService.GetFile) + .FirstOrDefault(i => i != null); } } } \ No newline at end of file diff --git a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs index e67aa42c75..b2d276b734 100644 --- a/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/MovieNfoSaver.cs @@ -4,10 +4,12 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Xml; namespace MediaBrowser.XbmcMetadata.Savers @@ -20,21 +22,32 @@ namespace MediaBrowser.XbmcMetadata.Savers protected override string GetLocalSavePath(IHasMetadata item) { - return GetMovieSavePath(item, FileSystem); + return GetMovieSavePaths(new ItemInfo(item), FileSystem).FirstOrDefault(); } - public static string GetMovieSavePath(IHasMetadata item, IFileSystem fileSystem) + public static List GetMovieSavePaths(ItemInfo item, IFileSystem fileSystem) { - var video = (Video)item; + var list = new List(); - if (video.VideoType == VideoType.Dvd || video.VideoType == VideoType.BluRay || video.VideoType == VideoType.HdDvd) + if (item.VideoType == VideoType.Dvd) { var path = item.ContainingFolderPath; - return Path.Combine(path, Path.GetFileName(path) + ".nfo"); + list.Add(Path.Combine(path, "VIDEO_TS.nfo")); } - return Path.ChangeExtension(item.Path, ".nfo"); + if (item.VideoType == VideoType.Dvd || item.VideoType == VideoType.BluRay || item.VideoType == VideoType.HdDvd) + { + var path = item.ContainingFolderPath; + + list.Add(Path.Combine(path, Path.GetFileName(path) + ".nfo")); + } + else + { + list.Add(Path.ChangeExtension(item.Path, ".nfo")); + } + + return list; } protected override string GetRootElementName(IHasMetadata item)