From 99dba814f405f08111b36ace4ba8a7fc7a273245 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 22 Sep 2014 20:04:50 -0400 Subject: [PATCH] add custom intros path --- .../Configuration/CinemaModeConfiguration.cs | 2 +- .../Intros/DefaultIntroProvider.cs | 40 ++++++++++++++----- .../Library/LibraryManager.cs | 14 ++++++- .../Localization/JavaScript/javascript.json | 3 +- .../Localization/Server/server.json | 13 +++--- 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs b/MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs index 35053e3de8..5cff9f65b7 100644 --- a/MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs +++ b/MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs @@ -10,10 +10,10 @@ namespace MediaBrowser.Model.Configuration public bool EnableIntrosFromMoviesInLibrary { get; set; } public bool EnableCustomIntro { get; set; } public bool EnableIntrosParentalControl { get; set; } + public string CustomIntroPath { get; set; } public CinemaModeConfiguration() { - EnableIntrosForMovies = true; EnableCustomIntro = true; EnableIntrosFromMoviesInLibrary = true; EnableIntrosFromUpcomingTrailers = true; diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs index b5e449eae0..97129368e1 100644 --- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs +++ b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs @@ -6,11 +6,13 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; +using MediaBrowser.Controller.Resolvers; using MediaBrowser.Model.Channels; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -55,11 +57,6 @@ namespace MediaBrowser.Server.Implementations.Intros return new List(); } - if (!IsSupporter) - { - return new List(); - } - var ratingLevel = string.IsNullOrWhiteSpace(item.OfficialRating) ? (int?)null : _localization.GetRatingLevel(item.OfficialRating); @@ -98,7 +95,7 @@ namespace MediaBrowser.Server.Implementations.Intros })); } - if (config.EnableIntrosFromUpcomingTrailers) + if (config.EnableIntrosFromUpcomingTrailers && IsSupporter) { var channelTrailers = await _channelManager.GetAllMediaInternal(new AllChannelMediaQuery { @@ -137,7 +134,6 @@ namespace MediaBrowser.Server.Implementations.Intros } // Avoid implicitly captured closure - var currentUser = user; return candidates.Where(i => { if (config.EnableIntrosParentalControl && !FilterByParentalRating(ratingLevel, i.Item)) @@ -166,7 +162,33 @@ namespace MediaBrowser.Server.Implementations.Intros private List GetCustomIntros(BaseItem item) { - return new List(); + try + { + return GetCustomIntroFiles() + .OrderBy(i => Guid.NewGuid()) + .Select(i => new IntroInfo + { + Path = i + + }).ToList(); + } + catch (IOException) + { + return new List(); + } + } + + private IEnumerable GetCustomIntroFiles(CinemaModeConfiguration options = null) + { + options = options ?? GetOptions(); + + if (string.IsNullOrWhiteSpace(options.CustomIntroPath)) + { + return new List(); + } + + return Directory.EnumerateFiles(options.CustomIntroPath, "*", SearchOption.AllDirectories) + .Where(EntityResolutionHelper.IsVideoFile); } private bool FilterByParentalRating(int? ratingLevel, BaseItem item) @@ -265,7 +287,7 @@ namespace MediaBrowser.Server.Implementations.Intros public IEnumerable GetAllIntroFiles() { - return new List(); + return GetCustomIntroFiles(); } private bool IsSupporter diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 6283ceb2af..222dbbf788 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -1235,7 +1235,19 @@ namespace MediaBrowser.Server.Implementations.Library /// IEnumerable{System.String}. public IEnumerable GetAllIntroFiles() { - return IntroProviders.SelectMany(i => i.GetAllIntroFiles()); + return IntroProviders.SelectMany(i => + { + try + { + return i.GetAllIntroFiles().ToList(); + } + catch (Exception ex) + { + _logger.ErrorException("Error getting intro files", ex); + + return new List(); + } + }); } /// diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index c8b4cbb462..552aa0a14d 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -570,5 +570,6 @@ "MediaInfoStreamTypeSubtitle": "Subtitle", "MediaInfoStreamTypeEmbeddedImage": "Embedded Image", "MediaInfoRefFrames": "Ref frames", - "TabPlayback": "Playback" + "TabPlayback": "Playback", + "HeaderSelectCustomIntrosPath": "Select Custom Intros Path" } diff --git a/MediaBrowser.Server.Implementations/Localization/Server/server.json b/MediaBrowser.Server.Implementations/Localization/Server/server.json index e1b3b5ea1b..52a3b8df04 100644 --- a/MediaBrowser.Server.Implementations/Localization/Server/server.json +++ b/MediaBrowser.Server.Implementations/Localization/Server/server.json @@ -1188,12 +1188,13 @@ "TitlePlayback": "Playback", "LabelEnableCinemaModeFor": "Enable cinema mode for:", "CinemaModeConfigurationHelp": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", - "LabelEnableTheFollowingIntros": "Enable the following types of intros:", - "OptionTrailersFromMyMovies": "Trailers from movies in my library", - "OptionUpcomingMoviesInTheaters": "Trailers from upcoming movies", + "OptionTrailersFromMyMovies": "Include trailers from movies in my library", + "OptionUpcomingMoviesInTheaters": "Include trailers from new and upcoming movies", "LabelLimitIntrosToUnwatchedContent": "Only use trailers from unwatched content", "LabelEnableIntroParentalControl": "Enable smart parental control", - "LabelEnableIntroParentalControlHelp": "Intros will only used from content with a parental rating equal to or less than the content being watched.", - "LabelEnableTheFollowingIntrosHelp": "Trailers from existing movies requires setup of local trailers. Theater trailers require installation of the Trailer channel plugin.", - "ButtonThisFeatureRequiresSupporter": "This feature requires an active supporter membership" + "LabelEnableIntroParentalControlHelp": "Trailers will only be selected with a parental rating equal to or less than the content being watched.", + "LabelThisFeatureRequiresSupporterHelp": "This feature requires an active supporter membership.", + "OptionTrailersFromMyMoviesHelp": "Requires setup of local trailers.", + "LabelCustomIntrosPath": "Custom intros path:", + "LabelCustomIntrosPathHelp": "A folder containing video files. A video will be randomly selected and played after trailers." }