aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Providers
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Providers')
-rw-r--r--MediaBrowser.Controller/Providers/BaseMetadataProvider.cs13
-rw-r--r--MediaBrowser.Controller/Providers/FanartBaseProvider.cs7
-rw-r--r--MediaBrowser.Controller/Providers/FolderProviderFromXml.cs5
-rw-r--r--MediaBrowser.Controller/Providers/ImageFromMediaLocationProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/ImagesByNameProvider.cs7
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegImageProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/BaseFFMpegProvider.cs3
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/BaseFFProbeProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFMpegAudioImageProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs9
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeAudioInfoProvider.cs3
-rw-r--r--MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs54
-rw-r--r--MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs64
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs114
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromJson.cs5
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieProviderFromXml.cs5
-rw-r--r--MediaBrowser.Controller/Providers/Movies/PersonProviderFromJson.cs5
-rw-r--r--MediaBrowser.Controller/Providers/Movies/TmdbPersonProvider.cs51
-rw-r--r--MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs54
-rw-r--r--MediaBrowser.Controller/Providers/ProviderManager.cs39
-rw-r--r--MediaBrowser.Controller/Providers/SortNameProvider.cs16
-rw-r--r--MediaBrowser.Controller/Providers/TV/EpisodeImageFromMediaLocationProvider.cs5
-rw-r--r--MediaBrowser.Controller/Providers/TV/EpisodeProviderFromXml.cs5
-rw-r--r--MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs28
-rw-r--r--MediaBrowser.Controller/Providers/TV/RemoteEpisodeProvider.cs33
-rw-r--r--MediaBrowser.Controller/Providers/TV/RemoteSeasonProvider.cs31
-rw-r--r--MediaBrowser.Controller/Providers/TV/RemoteSeriesProvider.cs69
-rw-r--r--MediaBrowser.Controller/Providers/TV/SeriesProviderFromXml.cs5
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)
{
}