From 9430b09ae9fee8ce2a802019479558cc423eff11 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 20 May 2013 13:04:39 -0400 Subject: [PATCH] support xbmc -trailer suffix --- MediaBrowser.Controller/Entities/BaseItem.cs | 40 +++++++++++++------ .../Library/Resolvers/LocalTrailerResolver.cs | 6 +++ .../Library/Resolvers/Movies/MovieResolver.cs | 2 +- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 1bc6b523e7..10b3aa7228 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -48,6 +48,7 @@ namespace MediaBrowser.Controller.Entities public const string TrailerFolderName = "trailers"; public const string ThemeSongsFolderName = "theme-music"; public const string ThemeVideosFolderName = "backdrops"; + public const string XbmcTrailerFileSuffix = "-trailer"; private string _name; /// @@ -707,27 +708,38 @@ namespace MediaBrowser.Controller.Entities return new List(); } + var files = new List(); + var folder = resolveArgs.GetFileSystemEntryByName(TrailerFolderName); // Path doesn't exist. No biggie - if (folder == null) + if (folder != null) { - return new List(); + try + { + files.AddRange(new DirectoryInfo(folder.FullName).EnumerateFiles()); + } + catch (IOException ex) + { + Logger.ErrorException("Error loading trailers for {0}", ex, Name); + } } - IEnumerable files; - - try + // Support xbmc trailers (-trailer suffix on video file names) + files.AddRange(resolveArgs.FileSystemChildren.Where(i => { - files = new DirectoryInfo(folder.FullName).EnumerateFiles(); - } - catch (IOException ex) - { - Logger.ErrorException("Error loading trailers for {0}", ex, Name); - return new List(); - } + if (!i.Attributes.HasFlag(FileAttributes.Directory)) + { + if (System.IO.Path.GetFileNameWithoutExtension(i.Name).EndsWith(XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) && !string.Equals(Path, i.FullName, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } - return LibraryManager.ResolvePaths(files, null).Select(video => + return false; + })); + + var trailers= LibraryManager.ResolvePaths(files, null).Select(video => { // Try to retrieve it from the db. If we don't find it, use the resolved version var dbItem = LibraryManager.RetrieveItem(video.Id) as Trailer; @@ -740,6 +752,8 @@ namespace MediaBrowser.Controller.Entities return video; }).ToList(); + + return trailers; } /// diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/LocalTrailerResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/LocalTrailerResolver.cs index f8e9f32b5a..ba7590e7fc 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/LocalTrailerResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/LocalTrailerResolver.cs @@ -31,6 +31,12 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers { return base.Resolve(args); } + + // Support xbmc local trailer convention, but only when looking for local trailers (hence the parent == null check) + if (args.Parent == null && Path.GetFileNameWithoutExtension(args.Path).EndsWith(BaseItem.XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase)) + { + return base.Resolve(args); + } } return null; diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index a8b8359d87..33071080da 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -158,7 +158,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies } // Don't misidentify xbmc trailers as a movie - if (child.Name.IndexOf("-trailer", StringComparison.OrdinalIgnoreCase) != -1) + if (child.Name.IndexOf(BaseItem.XbmcTrailerFileSuffix, StringComparison.OrdinalIgnoreCase) != -1) { continue; }