aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs40
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs14
-rw-r--r--MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json3
-rw-r--r--MediaBrowser.Server.Implementations/Localization/Server/server.json13
5 files changed, 54 insertions, 18 deletions
diff --git a/MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs b/MediaBrowser.Model/Configuration/CinemaModeConfiguration.cs
index 35053e3de..5cff9f65b 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 b5e449eae..97129368e 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<IntroInfo>();
}
- if (!IsSupporter)
- {
- return new List<IntroInfo>();
- }
-
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<IntroInfo> GetCustomIntros(BaseItem item)
{
- return new List<IntroInfo>();
+ try
+ {
+ return GetCustomIntroFiles()
+ .OrderBy(i => Guid.NewGuid())
+ .Select(i => new IntroInfo
+ {
+ Path = i
+
+ }).ToList();
+ }
+ catch (IOException)
+ {
+ return new List<IntroInfo>();
+ }
+ }
+
+ private IEnumerable<string> GetCustomIntroFiles(CinemaModeConfiguration options = null)
+ {
+ options = options ?? GetOptions();
+
+ if (string.IsNullOrWhiteSpace(options.CustomIntroPath))
+ {
+ return new List<string>();
+ }
+
+ 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<string> GetAllIntroFiles()
{
- return new List<string>();
+ return GetCustomIntroFiles();
}
private bool IsSupporter
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 6283ceb2a..222dbbf78 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -1235,7 +1235,19 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>IEnumerable{System.String}.</returns>
public IEnumerable<string> 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<string>();
+ }
+ });
}
/// <summary>
diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json
index c8b4cbb46..552aa0a14 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 e1b3b5ea1..52a3b8df0 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."
}