瀏覽代碼

Use DI for TvDbClientManager

Claus Vium 6 年之前
父節點
當前提交
ce51025e7c

+ 5 - 1
Emby.Server.Implementations/ApplicationHost.cs

@@ -102,8 +102,10 @@ using MediaBrowser.Model.Xml;
 using MediaBrowser.Providers.Chapters;
 using MediaBrowser.Providers.Manager;
 using MediaBrowser.Providers.Subtitles;
+using MediaBrowser.Providers.TV.TheTVDB;
 using MediaBrowser.WebDashboard.Api;
 using MediaBrowser.XbmcMetadata.Providers;
+using Microsoft.Extensions.Caching.Memory;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.DependencyInjection;
 using ServiceStack;
@@ -625,12 +627,13 @@ namespace Emby.Server.Implementations
         /// </summary>
         protected async Task RegisterResources(IServiceCollection serviceCollection)
         {
+            serviceCollection.AddMemoryCache(options => options.SizeLimit = 1024);
+
             serviceCollection.AddSingleton(ConfigurationManager);
             serviceCollection.AddSingleton<IApplicationHost>(this);
 
             serviceCollection.AddSingleton<IApplicationPaths>(ApplicationPaths);
 
-
             serviceCollection.AddSingleton(JsonSerializer);
 
             serviceCollection.AddSingleton(LoggerFactory);
@@ -640,6 +643,7 @@ namespace Emby.Server.Implementations
             serviceCollection.AddSingleton(EnvironmentInfo);
 
             serviceCollection.AddSingleton(FileSystemManager);
+            serviceCollection.AddSingleton<TvDbClientManager>();
 
             HttpClient = CreateHttpClient();
             serviceCollection.AddSingleton(HttpClient);

+ 2 - 2
MediaBrowser.Providers/People/TvdbPersonImageProvider.cs

@@ -24,12 +24,12 @@ namespace MediaBrowser.Providers.People
         private readonly ILibraryManager _libraryManager;
         private readonly TvDbClientManager _tvDbClientManager;
 
-        public TvdbPersonImageProvider(ILibraryManager libraryManager, IHttpClient httpClient, ILogger logger)
+        public TvdbPersonImageProvider(ILibraryManager libraryManager, IHttpClient httpClient, ILogger logger, TvDbClientManager tvDbClientManager)
         {
             _libraryManager = libraryManager;
             _httpClient = httpClient;
             _logger = logger;
-            _tvDbClientManager = TvDbClientManager.Instance;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public string Name => ProviderName;

+ 10 - 2
MediaBrowser.Providers/TV/MissingEpisodeProvider.cs

@@ -27,17 +27,25 @@ namespace MediaBrowser.Providers.TV
         private readonly ILibraryManager _libraryManager;
         private readonly ILocalizationManager _localization;
         private readonly IFileSystem _fileSystem;
+        private readonly TvDbClientManager _tvDbClientManager;
 
         private readonly CultureInfo _usCulture = new CultureInfo("en-US");
         private const double UnairedEpisodeThresholdDays = 2;
 
-        public MissingEpisodeProvider(ILogger logger, IServerConfigurationManager config, ILibraryManager libraryManager, ILocalizationManager localization, IFileSystem fileSystem)
+        public MissingEpisodeProvider(
+            ILogger logger,
+            IServerConfigurationManager config,
+            ILibraryManager libraryManager,
+            ILocalizationManager localization,
+            IFileSystem fileSystem,
+            TvDbClientManager tvDbClientManager)
         {
             _logger = logger;
             _config = config;
             _libraryManager = libraryManager;
             _localization = localization;
             _fileSystem = fileSystem;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public async Task<bool> Run(Series series, bool addNewItems, CancellationToken cancellationToken)
@@ -48,7 +56,7 @@ namespace MediaBrowser.Providers.TV
                 return false;
             }
 
-            var episodes = await TvDbClientManager.Instance.GetAllEpisodesAsync(Convert.ToInt32(tvdbId), series.GetPreferredMetadataLanguage(), cancellationToken);
+            var episodes = await _tvDbClientManager.GetAllEpisodesAsync(Convert.ToInt32(tvdbId), series.GetPreferredMetadataLanguage(), cancellationToken);
 
             var episodeLookup = episodes
                 .Select(i =>

+ 18 - 2
MediaBrowser.Providers/TV/SeriesMetadataService.cs

@@ -10,6 +10,7 @@ using MediaBrowser.Model.Globalization;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Xml;
 using MediaBrowser.Providers.Manager;
+using MediaBrowser.Providers.TV.TheTVDB;
 using Microsoft.Extensions.Logging;
 
 namespace MediaBrowser.Providers.TV
@@ -18,11 +19,24 @@ namespace MediaBrowser.Providers.TV
     {
         private readonly ILocalizationManager _localization;
         private readonly IXmlReaderSettingsFactory _xmlSettings;
+        private readonly TvDbClientManager _tvDbClientManager;
 
-        public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager, ILocalizationManager localization, IXmlReaderSettingsFactory xmlSettings) : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
+        public SeriesMetadataService(
+            IServerConfigurationManager serverConfigurationManager,
+            ILogger logger,
+            IProviderManager providerManager,
+            IFileSystem fileSystem,
+            IUserDataManager userDataManager,
+            ILibraryManager libraryManager,
+            ILocalizationManager localization,
+            IXmlReaderSettingsFactory xmlSettings,
+            TvDbClientManager tvDbClientManager
+            )
+            : base(serverConfigurationManager, logger, providerManager, fileSystem, userDataManager, libraryManager)
         {
             _localization = localization;
             _xmlSettings = xmlSettings;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         protected override async Task AfterMetadataRefresh(Series item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
@@ -32,11 +46,13 @@ namespace MediaBrowser.Providers.TV
             var seasonProvider = new DummySeasonProvider(ServerConfigurationManager, Logger, _localization, LibraryManager, FileSystem);
             await seasonProvider.Run(item, cancellationToken).ConfigureAwait(false);
 
+            // TODO why does it not register this itself omg
             var provider = new MissingEpisodeProvider(Logger,
                 ServerConfigurationManager,
                 LibraryManager,
                 _localization,
-                FileSystem);
+                FileSystem,
+                _tvDbClientManager);
 
             try
             {

+ 6 - 32
MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs

@@ -4,7 +4,6 @@ using System.Linq;
 using System.Reflection;
 using System.Threading;
 using System.Threading.Tasks;
-using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Entities;
 using Microsoft.Extensions.Caching.Memory;
@@ -13,47 +12,22 @@ using TvDbSharper.Dto;
 
 namespace MediaBrowser.Providers.TV.TheTVDB
 {
-    // TODO add to DI once Bond's PR is merged
-    public sealed class TvDbClientManager
+    public class TvDbClientManager
     {
-        private static volatile TvDbClientManager instance;
-        // TODO add to DI once Bond's PR is merged
         private readonly SemaphoreSlim _cacheWriteLock = new SemaphoreSlim(1, 1);
-        private static MemoryCache _cache;
-        private static readonly object syncRoot = new object();
-        private static TvDbClient tvDbClient;
-        private static DateTime tokenCreatedAt;
+        private readonly IMemoryCache _cache;
+        private readonly TvDbClient tvDbClient;
+        private DateTime tokenCreatedAt;
         private const string DefaultLanguage =  "en";
 
-        private TvDbClientManager()
+        public TvDbClientManager(IMemoryCache memoryCache)
         {
+            _cache = memoryCache;
             tvDbClient = new TvDbClient();
             tvDbClient.Authentication.AuthenticateAsync(TvdbUtils.TvdbApiKey);
             tokenCreatedAt = DateTime.Now;
         }
 
-        public static TvDbClientManager Instance
-        {
-            get
-            {
-                if (instance != null)
-                {
-                    return instance;
-                }
-
-                lock (syncRoot)
-                {
-                    if (instance == null)
-                    {
-                        instance = new TvDbClientManager();
-                        _cache = new MemoryCache(new MemoryCacheOptions());
-                    }
-                }
-
-                return instance;
-            }
-        }
-
         public TvDbClient TvDbClient
         {
             get

+ 2 - 2
MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs

@@ -20,11 +20,11 @@ namespace MediaBrowser.Providers.TV.TheTVDB
         private readonly ILogger _logger;
         private readonly TvDbClientManager _tvDbClientManager;
 
-        public TvdbEpisodeImageProvider(IHttpClient httpClient, ILogger logger)
+        public TvdbEpisodeImageProvider(IHttpClient httpClient, ILogger logger, TvDbClientManager tvDbClientManager)
         {
             _httpClient = httpClient;
             _logger = logger;
-            _tvDbClientManager = TvDbClientManager.Instance;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public string Name => "TheTVDB";

+ 2 - 2
MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs

@@ -24,11 +24,11 @@ namespace MediaBrowser.Providers.TV.TheTVDB
         private readonly ILogger _logger;
         private readonly TvDbClientManager _tvDbClientManager;
 
-        public TvdbEpisodeProvider(IHttpClient httpClient, ILogger logger)
+        public TvdbEpisodeProvider(IHttpClient httpClient, ILogger logger, TvDbClientManager tvDbClientManager)
         {
             _httpClient = httpClient;
             _logger = logger;
-            _tvDbClientManager = TvDbClientManager.Instance;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken)

+ 4 - 4
MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs

@@ -25,11 +25,11 @@ namespace MediaBrowser.Providers.TV.TheTVDB
         private readonly ILogger _logger;
         private readonly TvDbClientManager _tvDbClientManager;
 
-        public TvdbSeasonImageProvider(IHttpClient httpClient, ILogger logger)
+        public TvdbSeasonImageProvider(IHttpClient httpClient, ILogger logger, TvDbClientManager tvDbClientManager)
         {
             _httpClient = httpClient;
             _logger = logger;
-            _tvDbClientManager = TvDbClientManager.Instance;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public string Name => ProviderName;
@@ -88,10 +88,10 @@ namespace MediaBrowser.Providers.TV.TheTVDB
             return remoteImages;
         }
 
-        private static IEnumerable<RemoteImageInfo> GetImages(Image[] images, string preferredLanguage)
+        private IEnumerable<RemoteImageInfo> GetImages(Image[] images, string preferredLanguage)
         {
             var list = new List<RemoteImageInfo>();
-            var languages = TvDbClientManager.Instance.GetLanguagesAsync(CancellationToken.None).Result.Data;
+            var languages = _tvDbClientManager.GetLanguagesAsync(CancellationToken.None).Result.Data;
             foreach (Image image in images)
             {
                 var imageInfo = new RemoteImageInfo

+ 3 - 3
MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs

@@ -22,11 +22,11 @@ namespace MediaBrowser.Providers.TV.TheTVDB
         private readonly ILogger _logger;
         private readonly TvDbClientManager _tvDbClientManager;
 
-        public TvdbSeriesImageProvider(IHttpClient httpClient, ILogger logger)
+        public TvdbSeriesImageProvider(IHttpClient httpClient, ILogger logger, TvDbClientManager tvDbClientManager)
         {
             _httpClient = httpClient;
             _logger = logger;
-            _tvDbClientManager = TvDbClientManager.Instance;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public string Name => ProviderName;
@@ -84,7 +84,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB
         private IEnumerable<RemoteImageInfo> GetImages(Image[] images, string preferredLanguage)
         {
             var list = new List<RemoteImageInfo>();
-            var languages = TvDbClientManager.Instance.GetLanguagesAsync(CancellationToken.None).Result.Data;
+            var languages = _tvDbClientManager.GetLanguagesAsync(CancellationToken.None).Result.Data;
 
             foreach (Image image in images)
             {

+ 2 - 2
MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs

@@ -29,14 +29,14 @@ namespace MediaBrowser.Providers.TV.TheTVDB
         private readonly ILocalizationManager _localizationManager;
         private readonly TvDbClientManager _tvDbClientManager;
 
-        public TvdbSeriesProvider(IHttpClient httpClient, ILogger logger, ILibraryManager libraryManager, ILocalizationManager localizationManager)
+        public TvdbSeriesProvider(IHttpClient httpClient, ILogger logger, ILibraryManager libraryManager, ILocalizationManager localizationManager, TvDbClientManager tvDbClientManager)
         {
             _httpClient = httpClient;
             _logger = logger;
             _libraryManager = libraryManager;
             _localizationManager = localizationManager;
             Current = this;
-            _tvDbClientManager = TvDbClientManager.Instance;
+            _tvDbClientManager = tvDbClientManager;
         }
 
         public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken)