diff options
| author | Claus Vium <clausvium@gmail.com> | 2019-02-07 20:28:19 +0100 |
|---|---|---|
| committer | Claus Vium <clausvium@gmail.com> | 2019-02-15 19:33:10 +0100 |
| commit | 75d90c8e4c2213b7428640d407583f4e1c579aa4 (patch) | |
| tree | 3ccfdfab8aba1aac3b879b0eb88e28f3828d7a1b | |
| parent | ecbc0538f6b0d2a3f4907687778b00d56ade363c (diff) | |
Add caching PoC
| -rw-r--r-- | MediaBrowser.Providers/MediaBrowser.Providers.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs | 32 | ||||
| -rw-r--r-- | MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs | 16 |
3 files changed, 41 insertions, 8 deletions
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 1cf1ab256..aadf31a7a 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -11,6 +11,7 @@ </ItemGroup> <ItemGroup> + <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="2.2.0" /> <PackageReference Include="PlaylistsNET" Version="1.0.2" /> <PackageReference Include="TvDbSharper" Version="2.0.0" /> </ItemGroup> diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs index 861cd3f5b..e7b2d151c 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs @@ -1,12 +1,19 @@ using System; +using System.Threading; +using System.Threading.Tasks; using MediaBrowser.Controller.Library; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Internal; using TvDbSharper; +using TvDbSharper.Dto; namespace MediaBrowser.Providers.TV { public sealed class TvDbClientManager { private static volatile TvDbClientManager instance; + // TODO add to DI once Bond's PR is merged + private static MemoryCache _cache; private static readonly object syncRoot = new object(); private static TvDbClient tvDbClient; private static DateTime tokenCreatedAt; @@ -30,7 +37,10 @@ namespace MediaBrowser.Providers.TV lock (syncRoot) { if (instance == null) + { instance = new TvDbClientManager(); + _cache = new MemoryCache(new MemoryCacheOptions()); + } } return instance; @@ -60,5 +70,27 @@ namespace MediaBrowser.Providers.TV return tvDbClient; } } + + public async Task<SeriesSearchResult[]> GetSeriesByName(string name, CancellationToken cancellationToken) + { + if (_cache.TryGetValue(name, out SeriesSearchResult[] series)) + { + return series; + } + var result = await TvDbClient.Search.SearchSeriesByNameAsync(name, cancellationToken); + _cache.Set(name, result.Data, DateTimeOffset.UtcNow.AddHours(1)); + return result.Data; + } + + public async Task<Series> GetSeriesById(int tvdbId, CancellationToken cancellationToken) + { + if (_cache.TryGetValue(tvdbId, out Series series)) + { + return series; + } + var result = await TvDbClient.Series.GetAsync(tvdbId, cancellationToken); + _cache.Set(tvdbId, result.Data, DateTimeOffset.UtcNow.AddHours(1)); + return result.Data; + } } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index 25bea7821..db7519b4e 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -124,10 +124,10 @@ namespace MediaBrowser.Providers.TV.TheTVDB } // TODO call this function elsewhere? - var seriesResult = await _tvDbClientManager.TvDbClient.Series.GetAsync(Convert.ToInt32(tvdbId), cancellationToken); + var seriesResult = await _tvDbClientManager.GetSeriesById(Convert.ToInt32(tvdbId), cancellationToken); // TODO error handling - MapSeriesToResult(result, seriesResult.Data); + MapSeriesToResult(result, seriesResult); cancellationToken.ThrowIfCancellationRequested(); @@ -201,10 +201,10 @@ namespace MediaBrowser.Providers.TV.TheTVDB _tvDbClientManager.TvDbClient.AcceptedLanguage = NormalizeLanguage(language); var comparableName = GetComparableName(name); var list = new List<Tuple<List<string>, RemoteSearchResult>>(); - TvDbResponse<SeriesSearchResult[]> result; + SeriesSearchResult[] result; try { - result = await _tvDbClientManager.TvDbClient.Search.SearchSeriesByNameAsync(comparableName, cancellationToken); + result = await _tvDbClientManager.GetSeriesByName(comparableName, cancellationToken); } catch (TvDbServerException e) { @@ -212,7 +212,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB return new List<RemoteSearchResult>(); } - foreach (var seriesSearchResult in result.Data) + foreach (var seriesSearchResult in result) { var tvdbTitles = new List<string> { @@ -232,9 +232,9 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { var seriesSesult = - await _tvDbClientManager.TvDbClient.Series.GetAsync(seriesSearchResult.Id, cancellationToken); - remoteSearchResult.SetProviderId(MetadataProviders.Imdb, seriesSesult.Data.ImdbId); - remoteSearchResult.SetProviderId(MetadataProviders.Zap2It, seriesSesult.Data.Zap2itId); + await _tvDbClientManager.GetSeriesById(seriesSearchResult.Id, cancellationToken); + remoteSearchResult.SetProviderId(MetadataProviders.Imdb, seriesSesult.ImdbId); + remoteSearchResult.SetProviderId(MetadataProviders.Zap2It, seriesSesult.Zap2itId); } catch (TvDbServerException e) { |
