diff options
Diffstat (limited to 'MediaBrowser.Controller/Providers')
28 files changed, 384 insertions, 266 deletions
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index f6c6ed303..a5823c60e 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using System; @@ -19,6 +21,12 @@ namespace MediaBrowser.Controller.Providers protected ILogger Logger { get; set; } protected ILogManager LogManager { get; set; } + /// <summary> + /// Gets the configuration manager. + /// </summary> + /// <value>The configuration manager.</value> + protected IServerConfigurationManager ConfigurationManager { get; private set; } + // Cache these since they will be used a lot /// <summary> /// The false task result @@ -103,10 +111,11 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Initializes a new instance of the <see cref="BaseMetadataProvider" /> class. /// </summary> - protected BaseMetadataProvider(ILogManager logManager) + protected BaseMetadataProvider(ILogManager logManager, IServerConfigurationManager configurationManager) { Logger = logManager.GetLogger(GetType().Name); LogManager = logManager; + ConfigurationManager = configurationManager; Initialize(); } diff --git a/MediaBrowser.Controller/Providers/FanartBaseProvider.cs b/MediaBrowser.Controller/Providers/FanartBaseProvider.cs index 7a38fbb7a..548fbd5a6 100644 --- a/MediaBrowser.Controller/Providers/FanartBaseProvider.cs +++ b/MediaBrowser.Controller/Providers/FanartBaseProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using System; using MediaBrowser.Model.Logging; @@ -35,7 +36,7 @@ namespace MediaBrowser.Controller.Providers /// </summary> protected const string APIKey = "5c6b04c68e904cfed1e6cbc9a9e683d4"; - protected FanartBaseProvider(ILogManager logManager) : base(logManager) + protected FanartBaseProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } @@ -49,7 +50,7 @@ namespace MediaBrowser.Controller.Providers { if (item.DontFetchMeta) return false; - return DateTime.UtcNow > (providerInfo.LastRefreshed.AddDays(Kernel.Instance.Configuration.MetadataRefreshDays)) + return DateTime.UtcNow > (providerInfo.LastRefreshed.AddDays(ConfigurationManager.Configuration.MetadataRefreshDays)) && ShouldFetch(item, providerInfo); } diff --git a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs index 1baa1ed55..45a47a58d 100644 --- a/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/FolderProviderFromXml.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; using System.IO; @@ -13,7 +14,7 @@ namespace MediaBrowser.Controller.Providers /// </summary> public class FolderProviderFromXml : BaseMetadataProvider { - public FolderProviderFromXml(ILogManager logManager) : base(logManager) + public FolderProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs index ddf9e3334..4b337aadc 100644 --- a/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using MediaBrowser.Model.Entities; using System; @@ -16,7 +17,7 @@ namespace MediaBrowser.Controller.Providers /// </summary> public class ImageFromMediaLocationProvider : BaseMetadataProvider { - public ImageFromMediaLocationProvider(ILogManager logManager) : base(logManager) + public ImageFromMediaLocationProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs index 1521b514c..53ff94720 100644 --- a/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs +++ b/MediaBrowser.Controller/Providers/ImagesByNameProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; using System; using System.Globalization; @@ -13,7 +14,7 @@ namespace MediaBrowser.Controller.Providers /// </summary> public class ImagesByNameProvider : ImageFromMediaLocationProvider { - public ImagesByNameProvider(ILogManager logManager) : base(logManager) + public ImagesByNameProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } @@ -82,7 +83,7 @@ namespace MediaBrowser.Controller.Providers var name = item.Name ?? string.Empty; name = invalid.Aggregate(name, (current, c) => current.Replace(c.ToString(UsCulture), string.Empty)); - return Path.Combine(Kernel.Instance.ApplicationPaths.GeneralPath, name); + return Path.Combine(ConfigurationManager.ApplicationPaths.GeneralPath, name); } /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegImageProvider.cs index 8ca080e9b..902fdca27 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegImageProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Providers.MediaInfo @@ -6,7 +7,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo public abstract class BaseFFMpegImageProvider<T> : BaseFFMpegProvider<T> where T : BaseItem { - protected BaseFFMpegImageProvider(ILogManager logManager) : base(logManager) + protected BaseFFMpegImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegProvider.cs index e3f0d16a7..20f59b22d 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; @@ -14,7 +15,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo public abstract class BaseFFMpegProvider<T> : BaseMetadataProvider where T : BaseItem { - protected BaseFFMpegProvider(ILogManager logManager) : base(logManager) + protected BaseFFMpegProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs index e0633d97d..9fe2a6c01 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.MediaInfo; using MediaBrowser.Controller.Persistence; @@ -19,7 +20,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo public abstract class BaseFFProbeProvider<T> : BaseFFMpegProvider<T> where T : BaseItem { - protected BaseFFProbeProvider(ILogManager logManager) : base(logManager) + protected BaseFFProbeProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } @@ -35,7 +36,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo protected override void Initialize() { base.Initialize(); - FFProbeCache = new FileSystemRepository(Path.Combine(Kernel.Instance.ApplicationPaths.CachePath, CacheDirectoryName)); + FFProbeCache = new FileSystemRepository(Path.Combine(ConfigurationManager.ApplicationPaths.CachePath, CacheDirectoryName)); } /// <summary> diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs index 581cd4e09..aedd03537 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Entities; using System; @@ -14,7 +15,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// </summary> public class FFMpegAudioImageProvider : BaseFFMpegImageProvider<Audio> { - public FFMpegAudioImageProvider(ILogManager logManager) : base(logManager) + public FFMpegAudioImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs index a9138b326..a44acb8f6 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs @@ -1,10 +1,11 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; using System; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Providers.MediaInfo { @@ -22,8 +23,10 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// Initializes a new instance of the <see cref="FfMpegVideoImageProvider" /> class. /// </summary> /// <param name="isoManager">The iso manager.</param> - public FfMpegVideoImageProvider(IIsoManager isoManager, ILogManager logManager) - : base(logManager) + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> + public FfMpegVideoImageProvider(IIsoManager isoManager, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { _isoManager = isoManager; } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs index 378676386..603b7dcaa 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.MediaInfo; @@ -17,7 +18,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// </summary> public class FFProbeAudioInfoProvider : BaseFFProbeProvider<Audio> { - public FFProbeAudioInfoProvider(ILogManager logManager) : base(logManager) + public FFProbeAudioInfoProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs index 4fbfa2877..72d210043 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.MediaInfo; @@ -20,6 +21,29 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// </summary> public class FFProbeVideoInfoProvider : BaseFFProbeProvider<Video> { + public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer, IProtobufSerializer protobufSerializer, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) + { + if (isoManager == null) + { + throw new ArgumentNullException("isoManager"); + } + if (blurayExaminer == null) + { + throw new ArgumentNullException("blurayExaminer"); + } + if (protobufSerializer == null) + { + throw new ArgumentNullException("protobufSerializer"); + } + + _blurayExaminer = blurayExaminer; + _isoManager = isoManager; + _protobufSerializer = protobufSerializer; + + BdInfoCache = new FileSystemRepository(Path.Combine(ConfigurationManager.ApplicationPaths.CachePath, "bdinfo")); + } + /// <summary> /// Gets or sets the bd info cache. /// </summary> @@ -43,36 +67,6 @@ namespace MediaBrowser.Controller.Providers.MediaInfo private readonly IProtobufSerializer _protobufSerializer; /// <summary> - /// Initializes a new instance of the <see cref="FFProbeVideoInfoProvider" /> class. - /// </summary> - /// <param name="isoManager">The iso manager.</param> - /// <param name="blurayExaminer">The bluray examiner.</param> - /// <param name="protobufSerializer">The protobuf serializer.</param> - /// <exception cref="System.ArgumentNullException">blurayExaminer</exception> - public FFProbeVideoInfoProvider(IIsoManager isoManager, IBlurayExaminer blurayExaminer, IProtobufSerializer protobufSerializer, ILogManager logManager) - : base(logManager) - { - if (isoManager == null) - { - throw new ArgumentNullException("isoManager"); - } - if (blurayExaminer == null) - { - throw new ArgumentNullException("blurayExaminer"); - } - if (protobufSerializer == null) - { - throw new ArgumentNullException("protobufSerializer"); - } - - _blurayExaminer = blurayExaminer; - _isoManager = isoManager; - _protobufSerializer = protobufSerializer; - - BdInfoCache = new FileSystemRepository(Path.Combine(Kernel.Instance.ApplicationPaths.CachePath, "bdinfo")); - } - - /// <summary> /// Returns true or false indicating if the provider should refresh when the contents of it's directory changes /// </summary> /// <value><c>true</c> if [refresh on file system stamp change]; otherwise, <c>false</c>.</value> diff --git a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs index 434552be3..d307fe099 100644 --- a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.Entities; @@ -19,13 +20,27 @@ namespace MediaBrowser.Controller.Providers.Movies class FanArtMovieProvider : FanartBaseProvider { /// <summary> + /// The fan art + /// </summary> + internal readonly SemaphoreSlim FanArtResourcePool = new SemaphoreSlim(5, 5); + + internal static FanArtMovieProvider Current { get; private set; } + + /// <summary> /// Gets the HTTP client. /// </summary> /// <value>The HTTP client.</value> protected IHttpClient HttpClient { get; private set; } - public FanArtMovieProvider(IHttpClient httpClient, ILogManager logManager) - : base(logManager) + /// <summary> + /// Initializes a new instance of the <see cref="FanArtMovieProvider" /> class. + /// </summary> + /// <param name="httpClient">The HTTP client.</param> + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> + /// <exception cref="System.ArgumentNullException">httpClient</exception> + public FanArtMovieProvider(IHttpClient httpClient, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { if (httpClient == null) { @@ -35,6 +50,19 @@ namespace MediaBrowser.Controller.Providers.Movies } /// <summary> + /// Releases unmanaged and - optionally - managed resources. + /// </summary> + /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + protected override void Dispose(bool dispose) + { + if (dispose) + { + FanArtResourcePool.Dispose(); + } + base.Dispose(dispose); + } + + /// <summary> /// The fan art base URL /// </summary> protected string FanArtBaseUrl = "http://api.fanart.tv/webservice/movie/{0}/{1}/xml/all/1/1"; @@ -63,9 +91,9 @@ namespace MediaBrowser.Controller.Providers.Movies var logoExists = item.ResolveArgs.ContainsMetaFileByName(LOGO_FILE); var discExists = item.ResolveArgs.ContainsMetaFileByName(DISC_FILE); - return (!artExists && Kernel.Instance.Configuration.DownloadMovieArt) - || (!logoExists && Kernel.Instance.Configuration.DownloadMovieLogo) - || (!discExists && Kernel.Instance.Configuration.DownloadMovieDisc); + return (!artExists && ConfigurationManager.Configuration.DownloadMovieArt) + || (!logoExists && ConfigurationManager.Configuration.DownloadMovieLogo) + || (!discExists && ConfigurationManager.Configuration.DownloadMovieDisc); } /// <summary> @@ -82,13 +110,13 @@ namespace MediaBrowser.Controller.Providers.Movies var movie = item; if (ShouldFetch(movie, movie.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id }))) { - var language = Kernel.Instance.Configuration.PreferredMetadataLanguage.ToLower(); + var language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower(); var url = string.Format(FanArtBaseUrl, APIKey, movie.GetProviderId(MetadataProviders.Tmdb)); var doc = new XmlDocument(); try { - using (var xml = await HttpClient.Get(url, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)) + using (var xml = await HttpClient.Get(url, FanArtResourcePool, cancellationToken).ConfigureAwait(false)) { doc.Load(xml); } @@ -102,8 +130,8 @@ namespace MediaBrowser.Controller.Providers.Movies if (doc.HasChildNodes) { string path; - var hd = Kernel.Instance.Configuration.DownloadHDFanArt ? "hd" : ""; - if (Kernel.Instance.Configuration.DownloadMovieLogo && !item.ResolveArgs.ContainsMetaFileByName(LOGO_FILE)) + var hd = ConfigurationManager.Configuration.DownloadHDFanArt ? "hd" : ""; + if (ConfigurationManager.Configuration.DownloadMovieLogo && !item.ResolveArgs.ContainsMetaFileByName(LOGO_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/movielogos/" + hd + "movielogo[@lang = \"" + language + "\"]/@url") ?? @@ -119,7 +147,7 @@ namespace MediaBrowser.Controller.Providers.Movies Logger.Debug("FanArtProvider getting ClearLogo for " + movie.Name); try { - movie.SetImage(ImageType.Logo, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, LOGO_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + movie.SetImage(ImageType.Logo, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, LOGO_FILE, FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -132,7 +160,7 @@ namespace MediaBrowser.Controller.Providers.Movies } cancellationToken.ThrowIfCancellationRequested(); - if (Kernel.Instance.Configuration.DownloadMovieArt && !item.ResolveArgs.ContainsMetaFileByName(ART_FILE)) + if (ConfigurationManager.Configuration.DownloadMovieArt && !item.ResolveArgs.ContainsMetaFileByName(ART_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviearts/" + hd + "movieart[@lang = \"" + language + "\"]/@url") ?? @@ -145,7 +173,7 @@ namespace MediaBrowser.Controller.Providers.Movies Logger.Debug("FanArtProvider getting ClearArt for " + movie.Name); try { - movie.SetImage(ImageType.Art, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, ART_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + movie.SetImage(ImageType.Art, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, ART_FILE, FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -158,7 +186,7 @@ namespace MediaBrowser.Controller.Providers.Movies } cancellationToken.ThrowIfCancellationRequested(); - if (Kernel.Instance.Configuration.DownloadMovieDisc && !item.ResolveArgs.ContainsMetaFileByName(DISC_FILE)) + if (ConfigurationManager.Configuration.DownloadMovieDisc && !item.ResolveArgs.ContainsMetaFileByName(DISC_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviediscs/moviedisc[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/movie/moviediscs/moviedisc/@url"); @@ -168,7 +196,7 @@ namespace MediaBrowser.Controller.Providers.Movies Logger.Debug("FanArtProvider getting DiscArt for " + movie.Name); try { - movie.SetImage(ImageType.Disc, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, DISC_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + movie.SetImage(ImageType.Disc, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, DISC_FILE, FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -182,7 +210,7 @@ namespace MediaBrowser.Controller.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); - if (Kernel.Instance.Configuration.DownloadMovieBanner && !item.ResolveArgs.ContainsMetaFileByName(BANNER_FILE)) + if (ConfigurationManager.Configuration.DownloadMovieBanner && !item.ResolveArgs.ContainsMetaFileByName(BANNER_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviebanners/moviebanner[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/movie/moviebanners/moviebanner/@url"); @@ -192,7 +220,7 @@ namespace MediaBrowser.Controller.Providers.Movies Logger.Debug("FanArtProvider getting Banner for " + movie.Name); try { - movie.SetImage(ImageType.Banner, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, BANNER_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + movie.SetImage(ImageType.Banner, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, BANNER_FILE, FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -206,7 +234,7 @@ namespace MediaBrowser.Controller.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); - if (Kernel.Instance.Configuration.DownloadMovieThumb && !item.ResolveArgs.ContainsMetaFileByName(THUMB_FILE)) + if (ConfigurationManager.Configuration.DownloadMovieThumb && !item.ResolveArgs.ContainsMetaFileByName(THUMB_FILE)) { var node = doc.SelectSingleNode("//fanart/movie/moviethumbs/moviethumb[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/movie/moviethumbs/moviethumb/@url"); @@ -216,7 +244,7 @@ namespace MediaBrowser.Controller.Providers.Movies Logger.Debug("FanArtProvider getting Banner for " + movie.Name); try { - movie.SetImage(ImageType.Thumb, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, THUMB_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + movie.SetImage(ImageType.Thumb, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(movie, path, THUMB_FILE, FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs index 34435402f..8d004a574 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs @@ -1,21 +1,22 @@ -using System.Net; -using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; +using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; +using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Serialization; namespace MediaBrowser.Controller.Providers.Movies { @@ -32,6 +33,13 @@ namespace MediaBrowser.Controller.Providers.Movies public class MovieDbProvider : BaseMetadataProvider { /// <summary> + /// The movie db + /// </summary> + internal readonly SemaphoreSlim MovieDbResourcePool = new SemaphoreSlim(5, 5); + + internal static MovieDbProvider Current { get; private set; } + + /// <summary> /// Gets the json serializer. /// </summary> /// <value>The json serializer.</value> @@ -46,23 +54,29 @@ namespace MediaBrowser.Controller.Providers.Movies /// <summary> /// Initializes a new instance of the <see cref="MovieDbProvider" /> class. /// </summary> + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="httpClient">The HTTP client.</param> - /// <param name="logManager">The Log manager</param> - /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public MovieDbProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager) - : base(logManager) + public MovieDbProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient) + : base(logManager, configurationManager) { - if (jsonSerializer == null) - { - throw new ArgumentNullException("jsonSerializer"); - } - if (httpClient == null) - { - throw new ArgumentNullException("httpClient"); - } JsonSerializer = jsonSerializer; HttpClient = httpClient; + Current = this; + } + + /// <summary> + /// Releases unmanaged and - optionally - managed resources. + /// </summary> + /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + protected override void Dispose(bool dispose) + { + if (dispose) + { + MovieDbResourcePool.Dispose(); + } + base.Dispose(dispose); } /// <summary> @@ -103,7 +117,7 @@ namespace MediaBrowser.Controller.Providers.Movies { get { - return Kernel.Instance.Configuration.SaveLocalMeta; + return ConfigurationManager.Configuration.SaveLocalMeta; } } @@ -141,7 +155,7 @@ namespace MediaBrowser.Controller.Providers.Movies { try { - using (var json = await httpClient.Get(String.Format(TmdbConfigUrl, ApiKey), Kernel.Instance.ResourcePools.MovieDb, CancellationToken.None).ConfigureAwait(false)) + using (var json = await httpClient.Get(String.Format(TmdbConfigUrl, ApiKey), MovieDbProvider.Current.MovieDbResourcePool, CancellationToken.None).ConfigureAwait(false)) { return jsonSerializer.DeserializeFromStream<TmdbSettingsResult>(json); } @@ -200,11 +214,11 @@ namespace MediaBrowser.Controller.Providers.Movies { base.SetLastRefreshed(item, value, status); - if (Kernel.Instance.Configuration.SaveLocalMeta) + if (ConfigurationManager.Configuration.SaveLocalMeta) { //in addition to ours, we need to set the last refreshed time for the local data provider //so it won't see the new files we download and process them all over again - if (JsonProvider == null) JsonProvider = new MovieProviderFromJson(HttpClient, JsonSerializer, LogManager); + if (JsonProvider == null) JsonProvider = new MovieProviderFromJson(LogManager, ConfigurationManager, JsonSerializer, HttpClient); var data = item.ProviderData.GetValueOrDefault(JsonProvider.Id, new BaseProviderInfo { ProviderId = JsonProvider.Id }); data.LastRefreshed = value; item.ProviderData[JsonProvider.Id] = data; @@ -233,7 +247,7 @@ namespace MediaBrowser.Controller.Providers.Movies { if (item.DontFetchMeta) return false; - if (Kernel.Instance.Configuration.SaveLocalMeta && HasFileSystemStampChanged(item, providerInfo)) + if (ConfigurationManager.Configuration.SaveLocalMeta && HasFileSystemStampChanged(item, providerInfo)) { //If they deleted something from file system, chances are, this item was mis-identified the first time item.SetProviderId(MetadataProviders.Tmdb, null); @@ -250,7 +264,7 @@ namespace MediaBrowser.Controller.Providers.Movies var downloadDate = providerInfo.LastRefreshed; - if (Kernel.Instance.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) + if (ConfigurationManager.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) { return false; } @@ -258,7 +272,7 @@ namespace MediaBrowser.Controller.Providers.Movies if (DateTime.Today.Subtract(item.DateCreated).TotalDays > 180 && downloadDate != DateTime.MinValue) return false; // don't trigger a refresh data for item that are more than 6 months old and have been refreshed before - if (DateTime.Today.Subtract(downloadDate).TotalDays < Kernel.Instance.Configuration.MetadataRefreshDays) // only refresh every n days + if (DateTime.Today.Subtract(downloadDate).TotalDays < ConfigurationManager.Configuration.MetadataRefreshDays) // only refresh every n days return false; if (HasAltMeta(item)) @@ -266,7 +280,7 @@ namespace MediaBrowser.Controller.Providers.Movies - Logger.Debug("MovieDbProvider - " + item.Name + " needs refresh. Download date: " + downloadDate + " item created date: " + item.DateCreated + " Check for Update age: " + Kernel.Instance.Configuration.MetadataRefreshDays); + Logger.Debug("MovieDbProvider - " + item.Name + " needs refresh. Download date: " + downloadDate + " item created date: " + item.DateCreated + " Check for Update age: " + ConfigurationManager.Configuration.MetadataRefreshDays); return true; } @@ -293,7 +307,7 @@ namespace MediaBrowser.Controller.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); - if (!Kernel.Instance.Configuration.SaveLocalMeta || !HasLocalMeta(item) || (force && !HasLocalMeta(item))) + if (!ConfigurationManager.Configuration.SaveLocalMeta || !HasLocalMeta(item) || (force && !HasLocalMeta(item))) { try { @@ -407,7 +421,7 @@ namespace MediaBrowser.Controller.Providers.Movies } Logger.Info("MovieDbProvider: Finding id for movie: " + name); - string language = Kernel.Instance.Configuration.PreferredMetadataLanguage.ToLower(); + string language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower(); //if we are a boxset - look at our first child var boxset = item as BoxSet; @@ -478,7 +492,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url3, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { searchResult = JsonSerializer.DeserializeFromStream<TmdbMovieSearchResults>(json); } @@ -510,7 +524,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (var json = await HttpClient.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (var json = await HttpClient.Get(url3, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { searchResult = JsonSerializer.DeserializeFromStream<TmdbMovieSearchResults>(json); } @@ -545,11 +559,11 @@ namespace MediaBrowser.Controller.Providers.Movies if (matchedName == null) { //that title didn't match - look for alternatives - url3 = string.Format(AltTitleSearch, id, ApiKey, Kernel.Instance.Configuration.MetadataCountryCode); + url3 = string.Format(AltTitleSearch, id, ApiKey, ConfigurationManager.Configuration.MetadataCountryCode); try { - using (var json = await HttpClient.Get(url3, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (var json = await HttpClient.Get(url3, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { var response = JsonSerializer.DeserializeFromStream<TmdbAltTitleResults>(json); @@ -630,7 +644,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { var movieResult = JsonSerializer.DeserializeFromStream<CompleteMovieData>(json); @@ -703,7 +717,7 @@ namespace MediaBrowser.Controller.Providers.Movies } //and save locally - if (Kernel.Instance.Configuration.SaveLocalMeta) + if (ConfigurationManager.Configuration.SaveLocalMeta) { var ms = new MemoryStream(); JsonSerializer.SerializeToStream(mainResult, ms); @@ -724,14 +738,14 @@ namespace MediaBrowser.Controller.Providers.Movies protected async Task<CompleteMovieData> FetchMainResult(BaseItem item, string id, CancellationToken cancellationToken) { ItemType = item is BoxSet ? "collection" : "movie"; - string url = string.Format(GetInfo3, id, ApiKey, Kernel.Instance.Configuration.PreferredMetadataLanguage, ItemType); + string url = string.Format(GetInfo3, id, ApiKey, ConfigurationManager.Configuration.PreferredMetadataLanguage, ItemType); CompleteMovieData mainResult; cancellationToken.ThrowIfCancellationRequested(); try { - using (var json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (var json = await HttpClient.Get(url, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { mainResult = JsonSerializer.DeserializeFromStream<CompleteMovieData>(json); } @@ -756,14 +770,14 @@ namespace MediaBrowser.Controller.Providers.Movies if (mainResult != null && string.IsNullOrEmpty(mainResult.overview)) { - if (Kernel.Instance.Configuration.PreferredMetadataLanguage.ToLower() != "en") + if (ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower() != "en") { - Logger.Info("MovieDbProvider couldn't find meta for language " + Kernel.Instance.Configuration.PreferredMetadataLanguage + ". Trying English..."); + Logger.Info("MovieDbProvider couldn't find meta for language " + ConfigurationManager.Configuration.PreferredMetadataLanguage + ". Trying English..."); url = string.Format(GetInfo3, id, ApiKey, "en", ItemType); try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { mainResult = JsonSerializer.DeserializeFromStream<CompleteMovieData>(json); } @@ -799,7 +813,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { cast = JsonSerializer.DeserializeFromStream<TmdbCastResult>(json); } @@ -826,7 +840,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { releases = JsonSerializer.DeserializeFromStream<TmdbReleasesResult>(json); } @@ -855,7 +869,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { images = JsonSerializer.DeserializeFromStream<TmdbImages>(json); } @@ -883,7 +897,7 @@ namespace MediaBrowser.Controller.Providers.Movies movie.SetProviderId(MetadataProviders.Imdb, movieData.imdb_id); float rating; string voteAvg = movieData.vote_average.ToString(); - string cultureStr = Kernel.Instance.Configuration.PreferredMetadataLanguage + "-" + Kernel.Instance.Configuration.MetadataCountryCode; + string cultureStr = ConfigurationManager.Configuration.PreferredMetadataLanguage + "-" + ConfigurationManager.Configuration.MetadataCountryCode; CultureInfo culture; try { @@ -900,7 +914,7 @@ namespace MediaBrowser.Controller.Providers.Movies //release date and certification are retrieved based on configured country and we fall back on US if not there if (movieData.countries != null) { - var ourRelease = movieData.countries.FirstOrDefault(c => c.iso_3166_1.Equals(Kernel.Instance.Configuration.MetadataCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new Country(); + var ourRelease = movieData.countries.FirstOrDefault(c => c.iso_3166_1.Equals(ConfigurationManager.Configuration.MetadataCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new Country(); var usRelease = movieData.countries.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)) ?? new Country(); movie.OfficialRating = ourRelease.certification ?? usRelease.certification; @@ -975,17 +989,17 @@ namespace MediaBrowser.Controller.Providers.Movies cancellationToken.ThrowIfCancellationRequested(); // poster - if (images.posters != null && images.posters.Count > 0 && (Kernel.Instance.Configuration.RefreshItemImages || !item.HasLocalImage("folder"))) + if (images.posters != null && images.posters.Count > 0 && (ConfigurationManager.Configuration.RefreshItemImages || !item.HasLocalImage("folder"))) { var tmdbSettings = await TmdbSettings.ConfigureAwait(false); - var tmdbImageUrl = tmdbSettings.images.base_url + Kernel.Instance.Configuration.TmdbFetchedPosterSize; + var tmdbImageUrl = tmdbSettings.images.base_url + ConfigurationManager.Configuration.TmdbFetchedPosterSize; // get highest rated poster for our language var postersSortedByVote = images.posters.OrderByDescending(i => i.vote_average); - var poster = postersSortedByVote.FirstOrDefault(p => p.iso_639_1 != null && p.iso_639_1.Equals(Kernel.Instance.Configuration.PreferredMetadataLanguage, StringComparison.OrdinalIgnoreCase)); - if (poster == null && !Kernel.Instance.Configuration.PreferredMetadataLanguage.Equals("en")) + var poster = postersSortedByVote.FirstOrDefault(p => p.iso_639_1 != null && p.iso_639_1.Equals(ConfigurationManager.Configuration.PreferredMetadataLanguage, StringComparison.OrdinalIgnoreCase)); + if (poster == null && !ConfigurationManager.Configuration.PreferredMetadataLanguage.Equals("en")) { // couldn't find our specific language, find english (if that wasn't our language) poster = postersSortedByVote.FirstOrDefault(p => p.iso_639_1 != null && p.iso_639_1.Equals("en", StringComparison.OrdinalIgnoreCase)); @@ -1004,7 +1018,7 @@ namespace MediaBrowser.Controller.Providers.Movies { try { - item.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(item, tmdbImageUrl + poster.file_path, "folder" + Path.GetExtension(poster.file_path), Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false); + item.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(item, tmdbImageUrl + poster.file_path, "folder" + Path.GetExtension(poster.file_path), MovieDbResourcePool, cancellationToken).ConfigureAwait(false); } catch (HttpException) { @@ -1025,18 +1039,18 @@ namespace MediaBrowser.Controller.Providers.Movies var tmdbSettings = await TmdbSettings.ConfigureAwait(false); - var tmdbImageUrl = tmdbSettings.images.base_url + Kernel.Instance.Configuration.TmdbFetchedBackdropSize; + var tmdbImageUrl = tmdbSettings.images.base_url + ConfigurationManager.Configuration.TmdbFetchedBackdropSize; //backdrops should be in order of rating. get first n ones - var numToFetch = Math.Min(Kernel.Instance.Configuration.MaxBackdrops, images.backdrops.Count); + var numToFetch = Math.Min(ConfigurationManager.Configuration.MaxBackdrops, images.backdrops.Count); for (var i = 0; i < numToFetch; i++) { var bdName = "backdrop" + (i == 0 ? "" : i.ToString()); - if (Kernel.Instance.Configuration.RefreshItemImages || !item.HasLocalImage(bdName)) + if (ConfigurationManager.Configuration.RefreshItemImages || !item.HasLocalImage(bdName)) { try { - item.BackdropImagePaths.Add(await Kernel.Instance.ProviderManager.DownloadAndSaveImage(item, tmdbImageUrl + images.backdrops[i].file_path, bdName + Path.GetExtension(images.backdrops[i].file_path), Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)); + item.BackdropImagePaths.Add(await Kernel.Instance.ProviderManager.DownloadAndSaveImage(item, tmdbImageUrl + images.backdrops[i].file_path, bdName + Path.GetExtension(images.backdrops[i].file_path), MovieDbResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs index aa507d02e..2a7a09625 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -14,8 +15,8 @@ namespace MediaBrowser.Controller.Providers.Movies /// </summary> public class MovieProviderFromJson : MovieDbProvider { - public MovieProviderFromJson(IHttpClient httpClient, IJsonSerializer jsonSerializer, ILogManager logManager) - : base(jsonSerializer, httpClient, logManager) + public MovieProviderFromJson(ILogManager logManager, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient) : + base(logManager, configurationManager, jsonSerializer, httpClient) { } diff --git a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs index 555017e28..3e5a6fe8d 100644 --- a/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using System; using System.IO; @@ -13,7 +14,7 @@ namespace MediaBrowser.Controller.Providers.Movies /// </summary> public class MovieProviderFromXml : BaseMetadataProvider { - public MovieProviderFromXml(ILogManager logManager) : base(logManager) + public MovieProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs index 1004eaeae..278d67261 100644 --- a/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs +++ b/MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -14,8 +15,8 @@ namespace MediaBrowser.Controller.Providers.Movies /// </summary> class PersonProviderFromJson : TmdbPersonProvider { - public PersonProviderFromJson(IHttpClient httpClient, IJsonSerializer jsonSerializer, ILogManager logManager) - : base(httpClient, jsonSerializer, logManager) + public PersonProviderFromJson(IHttpClient httpClient, IJsonSerializer jsonSerializer, ILogManager logManager, IServerConfigurationManager configurationManager) : + base(httpClient, jsonSerializer, logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs index 3c4ac6076..5c977a928 100644 --- a/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs +++ b/MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -25,26 +26,8 @@ namespace MediaBrowser.Controller.Providers.Movies /// </summary> protected const string MetaFileName = "MBPerson.json"; - /// <summary> - /// Gets the json serializer. - /// </summary> - /// <value>The json serializer.</value> - protected IJsonSerializer JsonSerializer { get; private set; } - - /// <summary> - /// Gets the HTTP client. - /// </summary> - /// <value>The HTTP client.</value> - protected IHttpClient HttpClient { get; private set; } - - /// <summary> - /// Initializes a new instance of the <see cref="MovieDbProvider" /> class. - /// </summary> - /// <param name="httpClient">The HTTP client.</param> - /// <param name="jsonSerializer">The json serializer.</param> - /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public TmdbPersonProvider(IHttpClient httpClient, IJsonSerializer jsonSerializer, ILogManager logManager) - : base(logManager) + public TmdbPersonProvider(IHttpClient httpClient, IJsonSerializer jsonSerializer, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { if (jsonSerializer == null) { @@ -59,6 +42,18 @@ namespace MediaBrowser.Controller.Providers.Movies } /// <summary> + /// Gets the json serializer. + /// </summary> + /// <value>The json serializer.</value> + protected IJsonSerializer JsonSerializer { get; private set; } + + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + /// <summary> /// Supportses the specified item. /// </summary> /// <param name="item">The item.</param> @@ -78,7 +73,7 @@ namespace MediaBrowser.Controller.Providers.Movies { //we fetch if either info or image needed and haven't already tried recently return (string.IsNullOrEmpty(item.PrimaryImagePath) || !item.ResolveArgs.ContainsMetaFileByName(MetaFileName)) - && DateTime.Today.Subtract(providerInfo.LastRefreshed).TotalDays > Kernel.Instance.Configuration.MetadataRefreshDays; + && DateTime.Today.Subtract(providerInfo.LastRefreshed).TotalDays > ConfigurationManager.Configuration.MetadataRefreshDays; } /// <summary> @@ -165,7 +160,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbProvider.Current.MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { searchResult = JsonSerializer.DeserializeFromStream<PersonSearchResults>(json); } @@ -191,7 +186,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbProvider.Current.MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { if (json != null) { @@ -254,7 +249,7 @@ namespace MediaBrowser.Controller.Providers.Movies try { - using (Stream json = await HttpClient.Get(url, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (Stream json = await HttpClient.Get(url, MovieDbProvider.Current.MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { if (json != null) { @@ -273,7 +268,7 @@ namespace MediaBrowser.Controller.Providers.Movies searchResult.Profiles.FirstOrDefault( p => !string.IsNullOrEmpty(p.Iso_639_1) && - p.Iso_639_1.Equals(Kernel.Instance.Configuration.PreferredMetadataLanguage, + p.Iso_639_1.Equals(ConfigurationManager.Configuration.PreferredMetadataLanguage, StringComparison.OrdinalIgnoreCase)); if (profile == null) { @@ -282,7 +277,7 @@ namespace MediaBrowser.Controller.Providers.Movies searchResult.Profiles.FirstOrDefault( p => !string.IsNullOrEmpty(p.Iso_639_1) && - p.Iso_639_1.Equals(Kernel.Instance.Configuration.PreferredMetadataLanguage, + p.Iso_639_1.Equals(ConfigurationManager.Configuration.PreferredMetadataLanguage, StringComparison.OrdinalIgnoreCase)); } @@ -295,7 +290,7 @@ namespace MediaBrowser.Controller.Providers.Movies { var tmdbSettings = await Kernel.Instance.MetadataProviders.OfType<MovieDbProvider>().First().TmdbSettings.ConfigureAwait(false); - var img = await DownloadAndSaveImage(person, tmdbSettings.images.base_url + Kernel.Instance.Configuration.TmdbFetchedProfileSize + profile.File_Path, + var img = await DownloadAndSaveImage(person, tmdbSettings.images.base_url + ConfigurationManager.Configuration.TmdbFetchedProfileSize + profile.File_Path, "folder" + Path.GetExtension(profile.File_Path), cancellationToken).ConfigureAwait(false); if (!string.IsNullOrEmpty(img)) @@ -322,7 +317,7 @@ namespace MediaBrowser.Controller.Providers.Movies var localPath = Path.Combine(item.MetaLocation, targetName); if (!item.ResolveArgs.ContainsMetaFileByName(targetName)) { - using (var sourceStream = await HttpClient.GetMemoryStream(source, Kernel.Instance.ResourcePools.MovieDb, cancellationToken).ConfigureAwait(false)) + using (var sourceStream = await HttpClient.GetMemoryStream(source, MovieDbProvider.Current.MovieDbResourcePool, cancellationToken).ConfigureAwait(false)) { await Kernel.Instance.FileSystemManager.SaveToLibraryFilesystem(item, localPath, sourceStream, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs b/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs index 54792932e..a77cc4846 100644 --- a/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs +++ b/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs @@ -1,5 +1,6 @@ using System.Net; using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; @@ -24,31 +25,15 @@ namespace MediaBrowser.Controller.Providers.Music public abstract class LastfmBaseProvider : BaseMetadataProvider { /// <summary> - /// Gets the json serializer. - /// </summary> - /// <value>The json serializer.</value> - protected IJsonSerializer JsonSerializer { get; private set; } - - /// <summary> - /// Gets the HTTP client. - /// </summary> - /// <value>The HTTP client.</value> - protected IHttpClient HttpClient { get; private set; } - - /// <summary> - /// The name of the local json meta file for this item type - /// </summary> - protected string LocalMetaFileName { get; set; } - - /// <summary> /// Initializes a new instance of the <see cref="LastfmBaseProvider" /> class. /// </summary> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="httpClient">The HTTP client.</param> - /// <param name="logManager">The Log manager</param> + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public LastfmBaseProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager) - : base(logManager) + protected LastfmBaseProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { if (jsonSerializer == null) { @@ -63,6 +48,23 @@ namespace MediaBrowser.Controller.Providers.Music } /// <summary> + /// Gets the json serializer. + /// </summary> + /// <value>The json serializer.</value> + protected IJsonSerializer JsonSerializer { get; private set; } + + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + /// <summary> + /// The name of the local json meta file for this item type + /// </summary> + protected string LocalMetaFileName { get; set; } + + /// <summary> /// Gets the priority. /// </summary> /// <value>The priority.</value> @@ -90,7 +92,7 @@ namespace MediaBrowser.Controller.Providers.Music { get { - return Kernel.Instance.Configuration.SaveLocalMeta; + return ConfigurationManager.Configuration.SaveLocalMeta; } } @@ -101,7 +103,7 @@ namespace MediaBrowser.Controller.Providers.Music { if (item.DontFetchMeta) return false; - if (Kernel.Instance.Configuration.SaveLocalMeta && HasFileSystemStampChanged(item, providerInfo)) + if (ConfigurationManager.Configuration.SaveLocalMeta && HasFileSystemStampChanged(item, providerInfo)) { //If they deleted something from file system, chances are, this item was mis-identified the first time item.SetProviderId(MetadataProviders.Musicbrainz, null); @@ -118,7 +120,7 @@ namespace MediaBrowser.Controller.Providers.Music var downloadDate = providerInfo.LastRefreshed; - if (Kernel.Instance.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) + if (ConfigurationManager.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) { return false; } @@ -126,11 +128,11 @@ namespace MediaBrowser.Controller.Providers.Music if (DateTime.Today.Subtract(item.DateCreated).TotalDays > 180 && downloadDate != DateTime.MinValue) return false; // don't trigger a refresh data for item that are more than 6 months old and have been refreshed before - if (DateTime.Today.Subtract(downloadDate).TotalDays < Kernel.Instance.Configuration.MetadataRefreshDays) // only refresh every n days + if (DateTime.Today.Subtract(downloadDate).TotalDays < ConfigurationManager.Configuration.MetadataRefreshDays) // only refresh every n days return false; - Logger.Debug("LastfmProvider - " + item.Name + " needs refresh. Download date: " + downloadDate + " item created date: " + item.DateCreated + " Check for Update age: " + Kernel.Instance.Configuration.MetadataRefreshDays); + Logger.Debug("LastfmProvider - " + item.Name + " needs refresh. Download date: " + downloadDate + " item created date: " + item.DateCreated + " Check for Update age: " + ConfigurationManager.Configuration.MetadataRefreshDays); return true; } @@ -151,7 +153,7 @@ namespace MediaBrowser.Controller.Providers.Music cancellationToken.ThrowIfCancellationRequested(); - if (!Kernel.Instance.Configuration.SaveLocalMeta || !HasLocalMeta(item) || (force && !HasLocalMeta(item))) + if (!ConfigurationManager.Configuration.SaveLocalMeta || !HasLocalMeta(item) || (force && !HasLocalMeta(item))) { try { diff --git a/MediaBrowser.Controller/Providers/ProviderManager.cs b/MediaBrowser.Controller/Providers/ProviderManager.cs index 0f7198756..16e862fb9 100644 --- a/MediaBrowser.Controller/Providers/ProviderManager.cs +++ b/MediaBrowser.Controller/Providers/ProviderManager.cs @@ -1,6 +1,8 @@ -using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using System; @@ -39,18 +41,37 @@ namespace MediaBrowser.Controller.Providers /// </summary> private readonly IHttpClient _httpClient; + private IServerConfigurationManager ConfigurationManager { get; set; } + /// <summary> /// Initializes a new instance of the <see cref="ProviderManager" /> class. /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="httpClient">The HTTP client.</param> /// <param name="logger">The logger.</param> - public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger) + public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger, IServerConfigurationManager configurationManager) : base(kernel) { _logger = logger; _httpClient = httpClient; + ConfigurationManager = configurationManager; _remoteImageCache = new FileSystemRepository(ImagesDataPath); + + configurationManager.ConfigurationUpdated += configurationManager_ConfigurationUpdated; + } + + /// <summary> + /// Handles the ConfigurationUpdated event of the configurationManager control. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> + void configurationManager_ConfigurationUpdated(object sender, EventArgs e) + { + // Validate currently executing providers, in the background + Task.Run(() => + { + ValidateCurrentlyRunningProviders(); + }); } /// <summary> @@ -67,7 +88,7 @@ namespace MediaBrowser.Controller.Providers { if (_imagesDataPath == null) { - _imagesDataPath = Path.Combine(Kernel.ApplicationPaths.DataPath, "remote-images"); + _imagesDataPath = Path.Combine(ConfigurationManager.ApplicationPaths.DataPath, "remote-images"); if (!Directory.Exists(_imagesDataPath)) { @@ -145,7 +166,7 @@ namespace MediaBrowser.Controller.Providers cancellationToken.ThrowIfCancellationRequested(); // Skip if internet providers are currently disabled - if (provider.RequiresInternet && !Kernel.Configuration.EnableInternetProviders) + if (provider.RequiresInternet && !ConfigurationManager.Configuration.EnableInternetProviders) { continue; } @@ -157,7 +178,7 @@ namespace MediaBrowser.Controller.Providers } // Skip if internet provider and this type is not allowed - if (provider.RequiresInternet && Kernel.Configuration.EnableInternetProviders && Kernel.Configuration.InternetProviderExcludeTypes.Contains(item.GetType().Name, StringComparer.OrdinalIgnoreCase)) + if (provider.RequiresInternet && ConfigurationManager.Configuration.EnableInternetProviders && ConfigurationManager.Configuration.InternetProviderExcludeTypes.Contains(item.GetType().Name, StringComparer.OrdinalIgnoreCase)) { continue; } @@ -249,8 +270,8 @@ namespace MediaBrowser.Controller.Providers { _logger.Info("Validing currently running providers"); - var enableInternetProviders = Kernel.Configuration.EnableInternetProviders; - var internetProviderExcludeTypes = Kernel.Configuration.InternetProviderExcludeTypes; + var enableInternetProviders = ConfigurationManager.Configuration.EnableInternetProviders; + var internetProviderExcludeTypes = ConfigurationManager.Configuration.InternetProviderExcludeTypes; foreach (var tuple in _currentlyRunningProviders.Values .Where(p => p.Item1.RequiresInternet && (!enableInternetProviders || internetProviderExcludeTypes.Contains(p.Item2.GetType().Name, StringComparer.OrdinalIgnoreCase))) @@ -290,13 +311,13 @@ namespace MediaBrowser.Controller.Providers } //download and save locally - var localPath = Kernel.Configuration.SaveLocalMeta ? + var localPath = ConfigurationManager.Configuration.SaveLocalMeta ? Path.Combine(item.MetaLocation, targetName) : _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Path.ToLower(), targetName); var img = await _httpClient.GetMemoryStream(source, resourcePool, cancellationToken).ConfigureAwait(false); - if (Kernel.Configuration.SaveLocalMeta) // queue to media directories + if (ConfigurationManager.Configuration.SaveLocalMeta) // queue to media directories { await Kernel.FileSystemManager.SaveToLibraryFilesystem(item, localPath, img, cancellationToken).ConfigureAwait(false); } diff --git a/MediaBrowser.Controller/Providers/SortNameProvider.cs b/MediaBrowser.Controller/Providers/SortNameProvider.cs index 407db4c8e..2214d8a08 100644 --- a/MediaBrowser.Controller/Providers/SortNameProvider.cs +++ b/MediaBrowser.Controller/Providers/SortNameProvider.cs @@ -1,10 +1,11 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Model.Logging; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Providers { @@ -13,7 +14,8 @@ namespace MediaBrowser.Controller.Providers /// </summary> public class SortNameProvider : BaseMetadataProvider { - public SortNameProvider(ILogManager logManager) : base(logManager) + public SortNameProvider(ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { } @@ -99,14 +101,14 @@ namespace MediaBrowser.Controller.Providers if (item.Name == null) return false; //some items may not have name filled in properly var sortable = item.Name.Trim().ToLower(); - sortable = Kernel.Instance.Configuration.SortRemoveCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), string.Empty)); + sortable = ConfigurationManager.Configuration.SortRemoveCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), string.Empty)); - sortable = Kernel.Instance.Configuration.SortReplaceCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), " ")); + sortable = ConfigurationManager.Configuration.SortReplaceCharacters.Aggregate(sortable, (current, search) => current.Replace(search.ToLower(), " ")); - foreach (var search in Kernel.Instance.Configuration.SortRemoveWords) + foreach (var search in ConfigurationManager.Configuration.SortRemoveWords) { cancellationToken.ThrowIfCancellationRequested(); - + var searchLower = search.ToLower(); // Remove from beginning if a space follows if (sortable.StartsWith(searchLower + " ")) diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs index 9c50091f1..e4ef73892 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; @@ -14,7 +15,7 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> public class EpisodeImageFromMediaLocationProvider : BaseMetadataProvider { - public EpisodeImageFromMediaLocationProvider(ILogManager logManager) : base(logManager) + public EpisodeImageFromMediaLocationProvider(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs index 89f681089..1913397d4 100644 --- a/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; @@ -14,7 +15,7 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> public class EpisodeProviderFromXml : BaseMetadataProvider { - public EpisodeProviderFromXml(ILogManager logManager) : base(logManager) + public EpisodeProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } diff --git a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs index 9769d7a3b..d89545a8d 100644 --- a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs @@ -1,7 +1,9 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Providers.Movies; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; @@ -23,8 +25,8 @@ namespace MediaBrowser.Controller.Providers.TV /// <value>The HTTP client.</value> protected IHttpClient HttpClient { get; private set; } - public FanArtTvProvider(IHttpClient httpClient, ILogManager logManager) - : base(logManager) + public FanArtTvProvider(IHttpClient httpClient, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { if (httpClient == null) { @@ -46,9 +48,9 @@ namespace MediaBrowser.Controller.Providers.TV var thumbExists = item.ResolveArgs.ContainsMetaFileByName(THUMB_FILE); - return (!artExists && Kernel.Instance.Configuration.DownloadTVArt) - || (!logoExists && Kernel.Instance.Configuration.DownloadTVLogo) - || (!thumbExists && Kernel.Instance.Configuration.DownloadTVThumb); + return (!artExists && ConfigurationManager.Configuration.DownloadTVArt) + || (!logoExists && ConfigurationManager.Configuration.DownloadTVLogo) + || (!thumbExists && ConfigurationManager.Configuration.DownloadTVThumb); } protected override async Task<bool> FetchAsyncInternal(BaseItem item, bool force, CancellationToken cancellationToken) @@ -58,13 +60,13 @@ namespace MediaBrowser.Controller.Providers.TV var series = (Series)item; if (ShouldFetch(series, series.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id }))) { - string language = Kernel.Instance.Configuration.PreferredMetadataLanguage.ToLower(); + string language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower(); string url = string.Format(FanArtBaseUrl, APIKey, series.GetProviderId(MetadataProviders.Tvdb)); var doc = new XmlDocument(); try { - using (var xml = await HttpClient.Get(url, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)) + using (var xml = await HttpClient.Get(url, FanArtMovieProvider.Current.FanArtResourcePool, cancellationToken).ConfigureAwait(false)) { doc.Load(xml); } @@ -78,7 +80,7 @@ namespace MediaBrowser.Controller.Providers.TV if (doc.HasChildNodes) { string path; - if (Kernel.Instance.Configuration.DownloadTVLogo && !series.ResolveArgs.ContainsMetaFileByName(LOGO_FILE)) + if (ConfigurationManager.Configuration.DownloadTVLogo && !series.ResolveArgs.ContainsMetaFileByName(LOGO_FILE)) { var node = doc.SelectSingleNode("//fanart/series/clearlogos/clearlogo[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/clearlogos/clearlogo/@url"); @@ -88,7 +90,7 @@ namespace MediaBrowser.Controller.Providers.TV Logger.Debug("FanArtProvider getting ClearLogo for " + series.Name); try { - series.SetImage(ImageType.Logo, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, path, LOGO_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + series.SetImage(ImageType.Logo, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, path, LOGO_FILE, FanArtMovieProvider.Current.FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -102,7 +104,7 @@ namespace MediaBrowser.Controller.Providers.TV cancellationToken.ThrowIfCancellationRequested(); - if (Kernel.Instance.Configuration.DownloadTVArt && !series.ResolveArgs.ContainsMetaFileByName(ART_FILE)) + if (ConfigurationManager.Configuration.DownloadTVArt && !series.ResolveArgs.ContainsMetaFileByName(ART_FILE)) { var node = doc.SelectSingleNode("//fanart/series/cleararts/clearart[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/cleararts/clearart/@url"); @@ -112,7 +114,7 @@ namespace MediaBrowser.Controller.Providers.TV Logger.Debug("FanArtProvider getting ClearArt for " + series.Name); try { - series.SetImage(ImageType.Art, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, path, ART_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + series.SetImage(ImageType.Art, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, path, ART_FILE, FanArtMovieProvider.Current.FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -126,7 +128,7 @@ namespace MediaBrowser.Controller.Providers.TV cancellationToken.ThrowIfCancellationRequested(); - if (Kernel.Instance.Configuration.DownloadTVThumb && !series.ResolveArgs.ContainsMetaFileByName(THUMB_FILE)) + if (ConfigurationManager.Configuration.DownloadTVThumb && !series.ResolveArgs.ContainsMetaFileByName(THUMB_FILE)) { var node = doc.SelectSingleNode("//fanart/series/tvthumbs/tvthumb[@lang = \"" + language + "\"]/@url") ?? doc.SelectSingleNode("//fanart/series/tvthumbs/tvthumb/@url"); @@ -136,7 +138,7 @@ namespace MediaBrowser.Controller.Providers.TV Logger.Debug("FanArtProvider getting ThumbArt for " + series.Name); try { - series.SetImage(ImageType.Disc, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, path, THUMB_FILE, Kernel.Instance.ResourcePools.FanArt, cancellationToken).ConfigureAwait(false)); + series.SetImage(ImageType.Disc, await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, path, THUMB_FILE, FanArtMovieProvider.Current.FanArtResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { diff --git a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs index 8056ea5c0..eee43016c 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Extensions; @@ -27,13 +28,15 @@ namespace MediaBrowser.Controller.Providers.TV /// <value>The HTTP client.</value> protected IHttpClient HttpClient { get; private set; } - public RemoteEpisodeProvider(IHttpClient httpClient, ILogManager logManager) - : base(logManager) + /// <summary> + /// Initializes a new instance of the <see cref="RemoteEpisodeProvider" /> class. + /// </summary> + /// <param name="httpClient">The HTTP client.</param> + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> + public RemoteEpisodeProvider(IHttpClient httpClient, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { - if (httpClient == null) - { - throw new ArgumentNullException("httpClient"); - } HttpClient = httpClient; } @@ -94,15 +97,15 @@ namespace MediaBrowser.Controller.Providers.TV var episode = (Episode)item; var downloadDate = providerInfo.LastRefreshed; - if (Kernel.Instance.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) + if (ConfigurationManager.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) { return false; } if (!item.DontFetchMeta && !HasLocalMeta(episode)) { - fetch = Kernel.Instance.Configuration.MetadataRefreshDays != -1 && - DateTime.Today.Subtract(downloadDate).TotalDays > Kernel.Instance.Configuration.MetadataRefreshDays; + fetch = ConfigurationManager.Configuration.MetadataRefreshDays != -1 && + DateTime.Today.Subtract(downloadDate).TotalDays > ConfigurationManager.Configuration.MetadataRefreshDays; } return fetch; @@ -183,12 +186,12 @@ namespace MediaBrowser.Controller.Providers.TV seasonNumber = "0"; // Specials } - var url = string.Format(episodeQuery, TVUtils.TVDBApiKey, seriesId, seasonNumber, episodeNumber, Kernel.Instance.Configuration.PreferredMetadataLanguage); + var url = string.Format(episodeQuery, TVUtils.TVDBApiKey, seriesId, seasonNumber, episodeNumber, ConfigurationManager.Configuration.PreferredMetadataLanguage); var doc = new XmlDocument(); try { - using (var result = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var result = await HttpClient.Get(url, RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { doc.Load(result); } @@ -202,11 +205,11 @@ namespace MediaBrowser.Controller.Providers.TV //this is basicly just for anime. if (!doc.HasChildNodes && Int32.Parse(seasonNumber) == 1) { - url = string.Format(absEpisodeQuery, TVUtils.TVDBApiKey, seriesId, episodeNumber, Kernel.Instance.Configuration.PreferredMetadataLanguage); + url = string.Format(absEpisodeQuery, TVUtils.TVDBApiKey, seriesId, episodeNumber, ConfigurationManager.Configuration.PreferredMetadataLanguage); try { - using (var result = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var result = await HttpClient.Get(url, RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { if (result != null) doc.Load(result); usingAbsoluteData = true; @@ -226,7 +229,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - episode.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(episode, TVUtils.BannerUrl + p, Path.GetFileName(p), Kernel.Instance.ResourcePools.TvDb, cancellationToken); + episode.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(episode, TVUtils.BannerUrl + p, Path.GetFileName(p), RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken); } catch (HttpException) { @@ -273,7 +276,7 @@ namespace MediaBrowser.Controller.Providers.TV episode.AddPeople(writers.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = "Writer", Name = str })); } - if (Kernel.Instance.Configuration.SaveLocalMeta) + if (ConfigurationManager.Configuration.SaveLocalMeta) { if (!Directory.Exists(episode.MetaLocation)) Directory.CreateDirectory(episode.MetaLocation); var ms = new MemoryStream(); diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs index ac7981775..71741d225 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; @@ -24,9 +25,9 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> /// <value>The HTTP client.</value> protected IHttpClient HttpClient { get; private set; } - - public RemoteSeasonProvider(IHttpClient httpClient, ILogManager logManager) - : base(logManager) + + public RemoteSeasonProvider(IHttpClient httpClient, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { if (httpClient == null) { @@ -77,13 +78,13 @@ namespace MediaBrowser.Controller.Providers.TV bool fetch = false; var downloadDate = providerInfo.LastRefreshed; - if (Kernel.Instance.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) + if (ConfigurationManager.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) return false; if (!HasLocalMeta(item)) { - fetch = Kernel.Instance.Configuration.MetadataRefreshDays != -1 && - DateTime.UtcNow.Subtract(downloadDate).TotalDays > Kernel.Instance.Configuration.MetadataRefreshDays; + fetch = ConfigurationManager.Configuration.MetadataRefreshDays != -1 && + DateTime.UtcNow.Subtract(downloadDate).TotalDays > ConfigurationManager.Configuration.MetadataRefreshDays; } return fetch; @@ -152,7 +153,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var imgs = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var imgs = await HttpClient.Get(url, RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { images.Load(imgs); } @@ -163,7 +164,7 @@ namespace MediaBrowser.Controller.Providers.TV if (images.HasChildNodes) { - if (Kernel.Instance.Configuration.RefreshItemImages || !season.HasLocalImage("folder")) + if (ConfigurationManager.Configuration.RefreshItemImages || !season.HasLocalImage("folder")) { var n = images.SelectSingleNode("//Banner[BannerType='season'][BannerType2='season'][Season='" + seasonNumber + "']"); if (n != null) @@ -173,7 +174,7 @@ namespace MediaBrowser.Controller.Providers.TV try { if (n != null) - season.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(season, TVUtils.BannerUrl + n.InnerText, "folder" + Path.GetExtension(n.InnerText), Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false); + season.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(season, TVUtils.BannerUrl + n.InnerText, "folder" + Path.GetExtension(n.InnerText), RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken).ConfigureAwait(false); } catch (HttpException) { @@ -185,7 +186,7 @@ namespace MediaBrowser.Controller.Providers.TV } } - if (Kernel.Instance.Configuration.DownloadTVSeasonBanner && (Kernel.Instance.Configuration.RefreshItemImages || !season.HasLocalImage("banner"))) + if (ConfigurationManager.Configuration.DownloadTVSeasonBanner && (ConfigurationManager.Configuration.RefreshItemImages || !season.HasLocalImage("banner"))) { var n = images.SelectSingleNode("//Banner[BannerType='season'][BannerType2='seasonwide'][Season='" + seasonNumber + "']"); if (n != null) @@ -201,7 +202,7 @@ namespace MediaBrowser.Controller.Providers.TV TVUtils.BannerUrl + n.InnerText, "banner" + Path.GetExtension(n.InnerText), - Kernel.Instance.ResourcePools.TvDb, cancellationToken). + RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken). ConfigureAwait(false); season.SetImage(ImageType.Banner, bannerImagePath); @@ -217,7 +218,7 @@ namespace MediaBrowser.Controller.Providers.TV } } - if (Kernel.Instance.Configuration.DownloadTVSeasonBackdrops && (Kernel.Instance.Configuration.RefreshItemImages || !season.HasLocalImage("backdrop"))) + if (ConfigurationManager.Configuration.DownloadTVSeasonBackdrops && (ConfigurationManager.Configuration.RefreshItemImages || !season.HasLocalImage("backdrop"))) { var n = images.SelectSingleNode("//Banner[BannerType='fanart'][Season='" + seasonNumber + "']"); if (n != null) @@ -228,7 +229,7 @@ namespace MediaBrowser.Controller.Providers.TV try { if (season.BackdropImagePaths == null) season.BackdropImagePaths = new List<string>(); - season.BackdropImagePaths.Add(await Kernel.Instance.ProviderManager.DownloadAndSaveImage(season, TVUtils.BannerUrl + n.InnerText, "backdrop" + Path.GetExtension(n.InnerText), Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)); + season.BackdropImagePaths.Add(await Kernel.Instance.ProviderManager.DownloadAndSaveImage(season, TVUtils.BannerUrl + n.InnerText, "backdrop" + Path.GetExtension(n.InnerText), RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -239,7 +240,7 @@ namespace MediaBrowser.Controller.Providers.TV } } } - else if (!Kernel.Instance.Configuration.SaveLocalMeta) //if saving local - season will inherit from series + else if (!ConfigurationManager.Configuration.SaveLocalMeta) //if saving local - season will inherit from series { // not necessarily accurate but will give a different bit of art to each season var lst = images.SelectNodes("//Banner[BannerType='fanart']"); @@ -263,7 +264,7 @@ namespace MediaBrowser.Controller.Providers.TV "backdrop" + Path.GetExtension( n.InnerText), - Kernel.Instance.ResourcePools.TvDb, cancellationToken) + RemoteSeriesProvider.Current.TvDbResourcePool, cancellationToken) .ConfigureAwait(false)); } catch (HttpException) diff --git a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs index 7c65136b6..1d4063cdd 100644 --- a/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs +++ b/MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Extensions; @@ -24,19 +25,47 @@ namespace MediaBrowser.Controller.Providers.TV class RemoteSeriesProvider : BaseMetadataProvider { /// <summary> + /// The tv db + /// </summary> + internal readonly SemaphoreSlim TvDbResourcePool = new SemaphoreSlim(5, 5); + + internal static RemoteSeriesProvider Current { get; private set; } + + /// <summary> /// Gets the HTTP client. /// </summary> /// <value>The HTTP client.</value> protected IHttpClient HttpClient { get; private set; } - public RemoteSeriesProvider(IHttpClient httpClient, ILogManager logManager) - : base(logManager) + /// <summary> + /// Initializes a new instance of the <see cref="RemoteSeriesProvider" /> class. + /// </summary> + /// <param name="httpClient">The HTTP client.</param> + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> + /// <exception cref="System.ArgumentNullException">httpClient</exception> + public RemoteSeriesProvider(IHttpClient httpClient, ILogManager logManager, IServerConfigurationManager configurationManager) + : base(logManager, configurationManager) { if (httpClient == null) { throw new ArgumentNullException("httpClient"); } HttpClient = httpClient; + Current = this; + } + + /// <summary> + /// Releases unmanaged and - optionally - managed resources. + /// </summary> + /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> + protected override void Dispose(bool dispose) + { + if (dispose) + { + TvDbResourcePool.Dispose(); + } + base.Dispose(dispose); } /// <summary> @@ -102,15 +131,15 @@ namespace MediaBrowser.Controller.Providers.TV { var downloadDate = providerInfo.LastRefreshed; - if (Kernel.Instance.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) + if (ConfigurationManager.Configuration.MetadataRefreshDays == -1 && downloadDate != DateTime.MinValue) { return false; } if (item.DontFetchMeta) return false; - return !HasLocalMeta(item) && (Kernel.Instance.Configuration.MetadataRefreshDays != -1 && - DateTime.UtcNow.Subtract(downloadDate).TotalDays > Kernel.Instance.Configuration.MetadataRefreshDays); + return !HasLocalMeta(item) && (ConfigurationManager.Configuration.MetadataRefreshDays != -1 && + DateTime.UtcNow.Subtract(downloadDate).TotalDays > ConfigurationManager.Configuration.MetadataRefreshDays); } /// <summary> @@ -165,12 +194,12 @@ namespace MediaBrowser.Controller.Providers.TV if (!string.IsNullOrEmpty(seriesId)) { - string url = string.Format(seriesGet, TVUtils.TVDBApiKey, seriesId, Kernel.Instance.Configuration.PreferredMetadataLanguage); + string url = string.Format(seriesGet, TVUtils.TVDBApiKey, seriesId, ConfigurationManager.Configuration.PreferredMetadataLanguage); var doc = new XmlDocument(); try { - using (var xml = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var xml = await HttpClient.Get(url, TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { doc.Load(xml); } @@ -219,7 +248,7 @@ namespace MediaBrowser.Controller.Providers.TV //wait for other tasks await Task.WhenAll(actorTask, imageTask).ConfigureAwait(false); - if (Kernel.Instance.Configuration.SaveLocalMeta) + if (ConfigurationManager.Configuration.SaveLocalMeta) { var ms = new MemoryStream(); doc.Save(ms); @@ -249,7 +278,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var actors = await HttpClient.Get(urlActors, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var actors = await HttpClient.Get(urlActors, TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { docActors.Load(actors); } @@ -261,7 +290,7 @@ namespace MediaBrowser.Controller.Providers.TV if (docActors.HasChildNodes) { XmlNode actorsNode = null; - if (Kernel.Instance.Configuration.SaveLocalMeta) + if (ConfigurationManager.Configuration.SaveLocalMeta) { //add to the main doc for saving var seriesNode = doc.SelectSingleNode("//Series"); @@ -282,7 +311,7 @@ namespace MediaBrowser.Controller.Providers.TV { series.AddPerson(new PersonInfo { Type = PersonType.Actor, Name = actorName, Role = actorRole }); - if (Kernel.Instance.Configuration.SaveLocalMeta && actorsNode != null) + if (ConfigurationManager.Configuration.SaveLocalMeta && actorsNode != null) { //create in main doc var personNode = doc.CreateNode(XmlNodeType.Element, "Person", null); @@ -316,7 +345,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var imgs = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var imgs = await HttpClient.Get(url, TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { images.Load(imgs); } @@ -327,7 +356,7 @@ namespace MediaBrowser.Controller.Providers.TV if (images.HasChildNodes) { - if (Kernel.Instance.Configuration.RefreshItemImages || !series.HasLocalImage("folder")) + if (ConfigurationManager.Configuration.RefreshItemImages || !series.HasLocalImage("folder")) { var n = images.SelectSingleNode("//Banner[BannerType='poster']"); if (n != null) @@ -337,7 +366,7 @@ namespace MediaBrowser.Controller.Providers.TV { try { - series.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + n.InnerText, "folder" + Path.GetExtension(n.InnerText), Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false); + series.PrimaryImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + n.InnerText, "folder" + Path.GetExtension(n.InnerText), TvDbResourcePool, cancellationToken).ConfigureAwait(false); } catch (HttpException) { @@ -350,7 +379,7 @@ namespace MediaBrowser.Controller.Providers.TV } } - if (Kernel.Instance.Configuration.DownloadTVBanner && (Kernel.Instance.Configuration.RefreshItemImages || !series.HasLocalImage("banner"))) + if (ConfigurationManager.Configuration.DownloadTVBanner && (ConfigurationManager.Configuration.RefreshItemImages || !series.HasLocalImage("banner"))) { var n = images.SelectSingleNode("//Banner[BannerType='series']"); if (n != null) @@ -360,7 +389,7 @@ namespace MediaBrowser.Controller.Providers.TV { try { - var bannerImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + n.InnerText, "banner" + Path.GetExtension(n.InnerText), Kernel.Instance.ResourcePools.TvDb, cancellationToken); + var bannerImagePath = await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + n.InnerText, "banner" + Path.GetExtension(n.InnerText), TvDbResourcePool, cancellationToken); series.SetImage(ImageType.Banner, bannerImagePath); } @@ -385,11 +414,11 @@ namespace MediaBrowser.Controller.Providers.TV if (p != null) { var bdName = "backdrop" + (bdNo > 0 ? bdNo.ToString() : ""); - if (Kernel.Instance.Configuration.RefreshItemImages || !series.HasLocalImage(bdName)) + if (ConfigurationManager.Configuration.RefreshItemImages || !series.HasLocalImage(bdName)) { try { - series.BackdropImagePaths.Add(await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + p.InnerText, bdName + Path.GetExtension(p.InnerText), Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)); + series.BackdropImagePaths.Add(await Kernel.Instance.ProviderManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + p.InnerText, bdName + Path.GetExtension(p.InnerText), TvDbResourcePool, cancellationToken).ConfigureAwait(false)); } catch (HttpException) { @@ -400,7 +429,7 @@ namespace MediaBrowser.Controller.Providers.TV } } bdNo++; - if (bdNo >= Kernel.Instance.Configuration.MaxBackdrops) break; + if (bdNo >= ConfigurationManager.Configuration.MaxBackdrops) break; } } } @@ -463,7 +492,7 @@ namespace MediaBrowser.Controller.Providers.TV try { - using (var results = await HttpClient.Get(url, Kernel.Instance.ResourcePools.TvDb, cancellationToken).ConfigureAwait(false)) + using (var results = await HttpClient.Get(url, TvDbResourcePool, cancellationToken).ConfigureAwait(false)) { doc.Load(results); } diff --git a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs index 450c36e51..f9d409c18 100644 --- a/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs +++ b/MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; using System; @@ -14,7 +15,7 @@ namespace MediaBrowser.Controller.Providers.TV /// </summary> public class SeriesProviderFromXml : BaseMetadataProvider { - public SeriesProviderFromXml(ILogManager logManager) : base(logManager) + public SeriesProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager) : base(logManager, configurationManager) { } |
