add custom intros path

pull/702/head
Luke Pulverenti 10 years ago
parent 1afb28b487
commit 99dba814f4

@ -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;

@ -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

@ -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>

@ -570,5 +570,6 @@
"MediaInfoStreamTypeSubtitle": "Subtitle",
"MediaInfoStreamTypeEmbeddedImage": "Embedded Image",
"MediaInfoRefFrames": "Ref frames",
"TabPlayback": "Playback"
"TabPlayback": "Playback",
"HeaderSelectCustomIntrosPath": "Select Custom Intros Path"
}

@ -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."
}

Loading…
Cancel
Save