aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaus Vium <clausvium@gmail.com>2019-02-07 21:59:57 +0100
committerClaus Vium <clausvium@gmail.com>2019-02-15 19:33:10 +0100
commit1f8e74f3a80cea0b1ce0bacb592bfc156d0f3e53 (patch)
treeb25c3ae8fa692e86be7a6c99cc3bc8ebccf6b4ec
parentd6835f8dd6eb4ee2d397e682bb300b9f19ce23dc (diff)
Add caching for all tvdb requests
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs36
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs2
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs2
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs2
-rw-r--r--MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs24
6 files changed, 46 insertions, 24 deletions
diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs
index 276622666..7af986323 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<SeriesSearchResult[]> GetSeriesByName(string name, CancellationToken cancellationToken)
+ public Task<TvDbResponse<SeriesSearchResult[]>> 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<Series> GetSeriesById(int tvdbId, CancellationToken cancellationToken)
+ public Task<TvDbResponse<Series>> 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<TvDbResponse<EpisodeRecord>> GetEpisodesAsync(int tvdbId, CancellationToken cancellationToken)
+ {
+ return TryGetValue(tvdbId,() => TvDbClient.Episodes.GetAsync(tvdbId, cancellationToken));
+ }
+
+ public Task<TvDbResponse<SeriesSearchResult[]>> GetSeriesByImdbIdAsync(string imdbId, CancellationToken cancellationToken)
+ {
+ return TryGetValue(imdbId,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(imdbId, cancellationToken));
+ }
+
+ public Task<TvDbResponse<SeriesSearchResult[]>> GetSeriesByZap2ItIdAsync(string zap2ItId, CancellationToken cancellationToken)
+ {
+ return TryGetValue(zap2ItId,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(zap2ItId, cancellationToken));
+ }
+ public Task<TvDbResponse<Actor[]>> GetActorsAsync(int tvdbId, CancellationToken cancellationToken)
+ {
+ return TryGetValue(tvdbId,() => TvDbClient.Series.GetActorsAsync(tvdbId, cancellationToken));
+ }
+
+ public Task<TvDbResponse<Image[]>> GetImagesAsync(int tvdbId, ImagesQuery imageQuery, CancellationToken cancellationToken)
+ {
+ return TryGetValue(tvdbId,() => TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken));
}
private async Task<T> TryGetValue<T>(object key, Func<Task<T>> 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 74165e4bd..3f5d415af 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 c3a95f385..c4891a66a 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 8f763f2c5..7040779b4 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 be968e524..03c5502dc 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 db7519b4e..b431d5c7f 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<Tuple<List<string>, RemoteSearchResult>>();
- SeriesSearchResult[] result;
+ TvDbResponse<SeriesSearchResult[]> 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<RemoteSearchResult>();
}
- foreach (var seriesSearchResult in result)
+ foreach (var seriesSearchResult in result.Data)
{
var tvdbTitles = new List<string>
{
@@ -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)
{