From ce51025e7cd27cab307dedd108eab6a1886757a3 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Fri, 15 Feb 2019 20:11:27 +0100 Subject: [PATCH] Use DI for TvDbClientManager --- .../ApplicationHost.cs | 6 ++- .../People/TvdbPersonImageProvider.cs | 4 +- .../TV/MissingEpisodeProvider.cs | 12 +++++- .../TV/SeriesMetadataService.cs | 20 +++++++++- .../TV/TheTVDB/TvDbClientManager.cs | 38 +++---------------- .../TV/TheTVDB/TvdbEpisodeImageProvider.cs | 4 +- .../TV/TheTVDB/TvdbEpisodeProvider.cs | 4 +- .../TV/TheTVDB/TvdbSeasonImageProvider.cs | 8 ++-- .../TV/TheTVDB/TvdbSeriesImageProvider.cs | 6 +-- .../TV/TheTVDB/TvdbSeriesProvider.cs | 4 +- 10 files changed, 54 insertions(+), 52 deletions(-) diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs index 784486d524..e5e38bbf36 100644 --- a/Emby.Server.Implementations/ApplicationHost.cs +++ b/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 /// protected async Task RegisterResources(IServiceCollection serviceCollection) { + serviceCollection.AddMemoryCache(options => options.SizeLimit = 1024); + serviceCollection.AddSingleton(ConfigurationManager); serviceCollection.AddSingleton(this); serviceCollection.AddSingleton(ApplicationPaths); - serviceCollection.AddSingleton(JsonSerializer); serviceCollection.AddSingleton(LoggerFactory); @@ -640,6 +643,7 @@ namespace Emby.Server.Implementations serviceCollection.AddSingleton(EnvironmentInfo); serviceCollection.AddSingleton(FileSystemManager); + serviceCollection.AddSingleton(); HttpClient = CreateHttpClient(); serviceCollection.AddSingleton(HttpClient); diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs index 7e13f7b30b..c6d349addc 100644 --- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs +++ b/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; diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index f05b0d6b83..d24a7bbc71 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/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 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 => diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs index b0abd7c7cb..afbd838e4b 100644 --- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs +++ b/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 { diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs index 2d6038f53e..21f09d8d11 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs +++ b/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 diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index 93c52955b2..640cd4d089 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/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"; diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs index 10665135fa..65fb52c4ac 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs +++ b/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> GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs index 1f5458e5cb..ee0388a703 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs +++ b/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 GetImages(Image[] images, string preferredLanguage) + private IEnumerable GetImages(Image[] images, string preferredLanguage) { var list = new List(); - 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 diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs index a106d7cd3d..dc9f61756f 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs +++ b/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 GetImages(Image[] images, string preferredLanguage) { var list = new List(); - var languages = TvDbClientManager.Instance.GetLanguagesAsync(CancellationToken.None).Result.Data; + var languages = _tvDbClientManager.GetLanguagesAsync(CancellationToken.None).Result.Data; foreach (Image image in images) { diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index d51fbfb47b..9210c8b536 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/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> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken)