From 1f8e74f3a80cea0b1ce0bacb592bfc156d0f3e53 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Thu, 7 Feb 2019 21:59:57 +0100 Subject: [PATCH] Add caching for all tvdb requests --- .../TV/TheTVDB/TvDbClientManager.cs | 36 +++++++++++++++---- .../TV/TheTVDB/TvdbEpisodeImageProvider.cs | 2 +- .../TV/TheTVDB/TvdbEpisodeProvider.cs | 4 +-- .../TV/TheTVDB/TvdbSeasonImageProvider.cs | 2 +- .../TV/TheTVDB/TvdbSeriesImageProvider.cs | 2 +- .../TV/TheTVDB/TvdbSeriesProvider.cs | 24 ++++++------- 6 files changed, 46 insertions(+), 24 deletions(-) diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs index 276622666d..7af9863232 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs @@ -9,6 +9,7 @@ using TvDbSharper.Dto; namespace MediaBrowser.Providers.TV { + // TODO add to DI once Bond's PR is merged public sealed class TvDbClientManager { private static volatile TvDbClientManager instance; @@ -72,22 +73,45 @@ namespace MediaBrowser.Providers.TV } } - public async Task GetSeriesByName(string name, CancellationToken cancellationToken) + public Task> GetSeriesByNameAsync(string name, CancellationToken cancellationToken) { - return await TryGetValue(name, - async () => (await TvDbClient.Search.SearchSeriesByNameAsync(name, cancellationToken)).Data); + return TryGetValue(name,() => TvDbClient.Search.SearchSeriesByNameAsync(name, cancellationToken)); } - public async Task GetSeriesById(int tvdbId, CancellationToken cancellationToken) + public Task> GetSeriesByIdAsync(int tvdbId, CancellationToken cancellationToken) { - return await TryGetValue(tvdbId, - async () => (await TvDbClient.Series.GetAsync(tvdbId, cancellationToken)).Data); + return TryGetValue(tvdbId,() => TvDbClient.Series.GetAsync(tvdbId, cancellationToken)); + } + + public Task> GetEpisodesAsync(int tvdbId, CancellationToken cancellationToken) + { + return TryGetValue(tvdbId,() => TvDbClient.Episodes.GetAsync(tvdbId, cancellationToken)); + } + + public Task> GetSeriesByImdbIdAsync(string imdbId, CancellationToken cancellationToken) + { + return TryGetValue(imdbId,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(imdbId, cancellationToken)); + } + + public Task> GetSeriesByZap2ItIdAsync(string zap2ItId, CancellationToken cancellationToken) + { + return TryGetValue(zap2ItId,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(zap2ItId, cancellationToken)); + } + public Task> GetActorsAsync(int tvdbId, CancellationToken cancellationToken) + { + return TryGetValue(tvdbId,() => TvDbClient.Series.GetActorsAsync(tvdbId, cancellationToken)); + } + + public Task> GetImagesAsync(int tvdbId, ImagesQuery imageQuery, CancellationToken cancellationToken) + { + return TryGetValue(tvdbId,() => TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken)); } private async Task TryGetValue(object key, Func> resultFactory) { if (_cache.TryGetValue(key, out T cachedValue)) { + Console.WriteLine("Cache hit!!!"); return cachedValue; } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index 74165e4bd2..3f5d415afe 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs @@ -52,7 +52,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB { var tvdbId = episode.GetProviderId(MetadataProviders.Tvdb); // Process images - var episodeResult = await _tvDbClientManager.TvDbClient.Episodes.GetAsync(Convert.ToInt32(tvdbId), cancellationToken); + var episodeResult = await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(tvdbId), cancellationToken); var image = GetImageInfo(episodeResult.Data); if (image != null) diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs index c3a95f3856..c4891a66a0 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.TV if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds)) { var episodeResult = - await _tvDbClientManager.TvDbClient.Episodes.GetAsync((int)searchInfo.IndexNumber, cancellationToken); + await _tvDbClientManager.GetEpisodesAsync((int)searchInfo.IndexNumber, cancellationToken); var metadataResult = MapEpisodeToResult(searchInfo, episodeResult.Data); if (metadataResult.HasMetadata) @@ -82,7 +82,7 @@ namespace MediaBrowser.Providers.TV if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue)) { - var episodeResult = await _tvDbClientManager.TvDbClient.Episodes.GetAsync(Convert.ToInt32(searchInfo.GetProviderId(MetadataProviders.Tvdb)), + var episodeResult = await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(searchInfo.GetProviderId(MetadataProviders.Tvdb)), cancellationToken); result = MapEpisodeToResult(searchInfo, episodeResult.Data); diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs index 8f763f2c53..7040779b4d 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs @@ -78,7 +78,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB }; try { - var imageResults = await _tvDbClientManager.TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken); + var imageResults = await _tvDbClientManager.GetImagesAsync(tvdbId, imageQuery, cancellationToken); remoteImages.AddRange(GetImages(imageResults.Data, language)); } catch (TvDbServerException e) diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs index be968e5248..03c5502dcd 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs @@ -67,7 +67,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB KeyType = keyType }; var imageResults = - await _tvDbClientManager.TvDbClient.Series.GetImagesAsync(Convert.ToInt32(item.GetProviderId(MetadataProviders.Tvdb)), imageQuery, cancellationToken); + await _tvDbClientManager.GetImagesAsync(Convert.ToInt32(item.GetProviderId(MetadataProviders.Tvdb)), imageQuery, cancellationToken); remoteImages.AddRange(GetImages(imageResults.Data, language)); } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index db7519b4eb..b431d5c7f6 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -123,17 +123,15 @@ namespace MediaBrowser.Providers.TV.TheTVDB tvdbId = await GetSeriesByRemoteId(zap2It, MetadataProviders.Zap2It.ToString(), metadataLanguage, cancellationToken); } - // TODO call this function elsewhere? - var seriesResult = await _tvDbClientManager.GetSeriesById(Convert.ToInt32(tvdbId), cancellationToken); + var seriesResult = await _tvDbClientManager.GetSeriesByIdAsync(Convert.ToInt32(tvdbId), cancellationToken); - // TODO error handling - MapSeriesToResult(result, seriesResult); + MapSeriesToResult(result, seriesResult.Data); cancellationToken.ThrowIfCancellationRequested(); result.ResetPeople(); - var actorsResult = await _tvDbClientManager.TvDbClient.Series.GetActorsAsync(Convert.ToInt32(tvdbId), cancellationToken); + var actorsResult = await _tvDbClientManager.GetActorsAsync(Convert.ToInt32(tvdbId), cancellationToken); MapActorsToResult(result, actorsResult.Data); } @@ -144,11 +142,11 @@ namespace MediaBrowser.Providers.TV.TheTVDB if (string.Equals(idType, MetadataProviders.Zap2It.ToString(), StringComparison.OrdinalIgnoreCase)) { - result = await _tvDbClientManager.TvDbClient.Search.SearchSeriesByZap2ItIdAsync(id, cancellationToken); + result = await _tvDbClientManager.GetSeriesByZap2ItIdAsync(id, cancellationToken); } else { - result = await _tvDbClientManager.TvDbClient.Search.SearchSeriesByImdbIdAsync(id, cancellationToken); + result = await _tvDbClientManager.GetSeriesByImdbIdAsync(id, cancellationToken); } return result.Data.First().Id.ToString(); @@ -201,10 +199,10 @@ namespace MediaBrowser.Providers.TV.TheTVDB _tvDbClientManager.TvDbClient.AcceptedLanguage = NormalizeLanguage(language); var comparableName = GetComparableName(name); var list = new List, RemoteSearchResult>>(); - SeriesSearchResult[] result; + TvDbResponse result; try { - result = await _tvDbClientManager.GetSeriesByName(comparableName, cancellationToken); + result = await _tvDbClientManager.GetSeriesByNameAsync(comparableName, cancellationToken); } catch (TvDbServerException e) { @@ -212,7 +210,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB return new List(); } - foreach (var seriesSearchResult in result) + foreach (var seriesSearchResult in result.Data) { var tvdbTitles = new List { @@ -232,9 +230,9 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { var seriesSesult = - await _tvDbClientManager.GetSeriesById(seriesSearchResult.Id, cancellationToken); - remoteSearchResult.SetProviderId(MetadataProviders.Imdb, seriesSesult.ImdbId); - remoteSearchResult.SetProviderId(MetadataProviders.Zap2It, seriesSesult.Zap2itId); + await _tvDbClientManager.GetSeriesByIdAsync(seriesSearchResult.Id, cancellationToken); + remoteSearchResult.SetProviderId(MetadataProviders.Imdb, seriesSesult.Data.ImdbId); + remoteSearchResult.SetProviderId(MetadataProviders.Zap2It, seriesSesult.Data.Zap2itId); } catch (TvDbServerException e) {