| 
														
															@@ -14,11 +14,12 @@ namespace MediaBrowser.Providers.TV.TheTVDB 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public class TvDbClientManager 
														 | 
														
														 | 
														
															     public class TvDbClientManager 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     { 
														 | 
														
														 | 
														
															     { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        private const string DefaultLanguage = "en"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         private readonly SemaphoreSlim _cacheWriteLock = new SemaphoreSlim(1, 1); 
														 | 
														
														 | 
														
															         private readonly SemaphoreSlim _cacheWriteLock = new SemaphoreSlim(1, 1); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         private readonly IMemoryCache _cache; 
														 | 
														
														 | 
														
															         private readonly IMemoryCache _cache; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         private readonly TvDbClient _tvDbClient; 
														 | 
														
														 | 
														
															         private readonly TvDbClient _tvDbClient; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         private DateTime _tokenCreatedAt; 
														 | 
														
														 | 
														
															         private DateTime _tokenCreatedAt; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        private const string DefaultLanguage =  "en"; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         public TvDbClientManager(IMemoryCache memoryCache) 
														 | 
														
														 | 
														
															         public TvDbClientManager(IMemoryCache memoryCache) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -102,39 +103,50 @@ namespace MediaBrowser.Providers.TV.TheTVDB 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return episodes; 
														 | 
														
														 | 
														
															             return episodes; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<SeriesSearchResult[]>> GetSeriesByImdbIdAsync(string imdbId, string language, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<SeriesSearchResult[]>> GetSeriesByImdbIdAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string imdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var cacheKey = GenerateKey("series", imdbId, language); 
														 | 
														
														 | 
														
															             var cacheKey = GenerateKey("series", imdbId, language); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return TryGetValue(cacheKey, language,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(imdbId, cancellationToken)); 
														 | 
														
														 | 
														
															             return TryGetValue(cacheKey, language,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(imdbId, cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<SeriesSearchResult[]>> GetSeriesByZap2ItIdAsync(string zap2ItId, string language, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<SeriesSearchResult[]>> GetSeriesByZap2ItIdAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string zap2ItId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var cacheKey = GenerateKey("series", zap2ItId, language); 
														 | 
														
														 | 
														
															             var cacheKey = GenerateKey("series", zap2ItId, language); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            return TryGetValue( cacheKey, language,() => TvDbClient.Search.SearchSeriesByZap2ItIdAsync(zap2ItId, cancellationToken)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return TryGetValue(cacheKey, language, () => TvDbClient.Search.SearchSeriesByZap2ItIdAsync(zap2ItId, cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<Actor[]>> GetActorsAsync(int tvdbId, string language, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<Actor[]>> GetActorsAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int tvdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var cacheKey = GenerateKey("actors", tvdbId, language); 
														 | 
														
														 | 
														
															             var cacheKey = GenerateKey("actors", tvdbId, language); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            return TryGetValue(cacheKey, language,() => TvDbClient.Series.GetActorsAsync(tvdbId, cancellationToken)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return TryGetValue(cacheKey, language, () => TvDbClient.Series.GetActorsAsync(tvdbId, cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<Image[]>> GetImagesAsync(int tvdbId, ImagesQuery imageQuery, string language, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<Image[]>> GetImagesAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int tvdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            ImagesQuery imageQuery, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var cacheKey = GenerateKey("images", tvdbId, language, imageQuery); 
														 | 
														
														 | 
														
															             var cacheKey = GenerateKey("images", tvdbId, language, imageQuery); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            return TryGetValue(cacheKey, language,() => TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return TryGetValue(cacheKey, language, () => TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         public Task<TvDbResponse<Language[]>> GetLanguagesAsync(CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															         public Task<TvDbResponse<Language[]>> GetLanguagesAsync(CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            return TryGetValue("languages", null,() => TvDbClient.Languages.GetAllAsync(cancellationToken)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return TryGetValue("languages", null, () => TvDbClient.Languages.GetAllAsync(cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<EpisodesSummary>> GetSeriesEpisodeSummaryAsync(int tvdbId, string language, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<EpisodesSummary>> GetSeriesEpisodeSummaryAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int tvdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var cacheKey = GenerateKey("seriesepisodesummary", tvdbId, language); 
														 | 
														
														 | 
														
															             var cacheKey = GenerateKey("seriesepisodesummary", tvdbId, language); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -142,8 +154,12 @@ namespace MediaBrowser.Providers.TV.TheTVDB 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 () => TvDbClient.Series.GetEpisodesSummaryAsync(tvdbId, cancellationToken)); 
														 | 
														
														 | 
														
															                 () => TvDbClient.Series.GetEpisodesSummaryAsync(tvdbId, cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<EpisodeRecord[]>> GetEpisodesPageAsync(int tvdbId, int page, EpisodeQuery episodeQuery, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            string language, CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<EpisodeRecord[]>> GetEpisodesPageAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int tvdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int page, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            EpisodeQuery episodeQuery, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             var cacheKey = GenerateKey(language, tvdbId, episodeQuery); 
														 | 
														
														 | 
														
															             var cacheKey = GenerateKey(language, tvdbId, episodeQuery); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -151,7 +167,9 @@ namespace MediaBrowser.Providers.TV.TheTVDB 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 () => TvDbClient.Series.GetEpisodesAsync(tvdbId, page, episodeQuery, cancellationToken)); 
														 | 
														
														 | 
														
															                 () => TvDbClient.Series.GetEpisodesAsync(tvdbId, page, episodeQuery, cancellationToken)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<string> GetEpisodeTvdbId(EpisodeInfo searchInfo, string language, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<string> GetEpisodeTvdbId( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            EpisodeInfo searchInfo, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             searchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), 
														 | 
														
														 | 
														
															             searchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -187,7 +205,9 @@ namespace MediaBrowser.Providers.TV.TheTVDB 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return GetEpisodeTvdbId(Convert.ToInt32(seriesTvdbId), episodeQuery, language, cancellationToken); 
														 | 
														
														 | 
														
															             return GetEpisodeTvdbId(Convert.ToInt32(seriesTvdbId), episodeQuery, language, cancellationToken); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public async Task<string> GetEpisodeTvdbId(int seriesTvdbId, EpisodeQuery episodeQuery, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public async Task<string> GetEpisodeTvdbId( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int seriesTvdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            EpisodeQuery episodeQuery, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             string language, 
														 | 
														
														 | 
														
															             string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															             CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -197,8 +217,11 @@ namespace MediaBrowser.Providers.TV.TheTVDB 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return episodePage.Data.FirstOrDefault()?.Id.ToString(); 
														 | 
														
														 | 
														
															             return episodePage.Data.FirstOrDefault()?.Id.ToString(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        public Task<TvDbResponse<EpisodeRecord[]>> GetEpisodesPageAsync(int tvdbId, EpisodeQuery episodeQuery, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            string language, CancellationToken cancellationToken) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        public Task<TvDbResponse<EpisodeRecord[]>> GetEpisodesPageAsync( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int tvdbId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            EpisodeQuery episodeQuery, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            string language, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            CancellationToken cancellationToken) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         { 
														 | 
														
														 | 
														
															         { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return GetEpisodesPageAsync(tvdbId, 1, episodeQuery, language, cancellationToken); 
														 | 
														
														 | 
														
															             return GetEpisodesPageAsync(tvdbId, 1, episodeQuery, language, cancellationToken); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 |