From c2202be0f86f52decc926bb7d14405c23a5f6c33 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Wed, 30 Jan 2019 21:23:23 +0100 Subject: Some of it works??? --- MediaBrowser.Controller/Library/TVUtils.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'MediaBrowser.Controller/Library') diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 5b66e7497..3080143ce 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -10,7 +10,7 @@ namespace MediaBrowser.Controller.Library /// /// The TVDB API key /// - public static readonly string TvdbApiKey = "72930AE1CB7E2DB3"; + public static readonly string TvdbApiKey = "OG4V3YJ3FAP7FP2K"; public static readonly string TvdbBaseUrl = "https://www.thetvdb.com/"; /// /// The banner URL -- cgit v1.2.3 From ecbc0538f6b0d2a3f4907687778b00d56ade363c Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Thu, 7 Feb 2019 19:54:34 +0100 Subject: Add some error handling, grab imdb id and other minor fixes --- MediaBrowser.Controller/Library/TVUtils.cs | 28 +++---- .../TV/TheTVDB/TvdbEpisodeImageProvider.cs | 14 ++-- .../TV/TheTVDB/TvdbSeasonImageProvider.cs | 17 +++-- .../TV/TheTVDB/TvdbSeriesProvider.cs | 88 ++++++++-------------- 4 files changed, 58 insertions(+), 89 deletions(-) (limited to 'MediaBrowser.Controller/Library') diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 3080143ce..0089f65d0 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -28,24 +28,24 @@ namespace MediaBrowser.Controller.Library { if (string.Equals(day, "Daily", StringComparison.OrdinalIgnoreCase)) { - return new DayOfWeek[] - { - DayOfWeek.Sunday, - DayOfWeek.Monday, - DayOfWeek.Tuesday, - DayOfWeek.Wednesday, - DayOfWeek.Thursday, - DayOfWeek.Friday, - DayOfWeek.Saturday - }; + return new[] + { + DayOfWeek.Sunday, + DayOfWeek.Monday, + DayOfWeek.Tuesday, + DayOfWeek.Wednesday, + DayOfWeek.Thursday, + DayOfWeek.Friday, + DayOfWeek.Saturday + }; } if (Enum.TryParse(day, true, out DayOfWeek value)) { - return new DayOfWeek[] - { - value - }; + return new[] + { + value + }; } return new DayOfWeek[] { }; diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index bc526e42a..74165e4bd 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs @@ -18,7 +18,6 @@ namespace MediaBrowser.Providers.TV.TheTVDB { public class TvdbEpisodeImageProvider : IRemoteImageProvider { - private readonly CultureInfo _usCulture = new CultureInfo("en-US"); private readonly IHttpClient _httpClient; private readonly TvDbClientManager _tvDbClientManager; @@ -47,6 +46,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB { var episode = (Episode)item; var series = episode.Series; + var imageResult = new List(); if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { @@ -55,21 +55,17 @@ namespace MediaBrowser.Providers.TV.TheTVDB var episodeResult = await _tvDbClientManager.TvDbClient.Episodes.GetAsync(Convert.ToInt32(tvdbId), cancellationToken); var image = GetImageInfo(episodeResult.Data); - return new List + if (image != null) { - image - }; + imageResult.Add(image); + } } - return new RemoteImageInfo[] { }; + return imageResult; } private RemoteImageInfo GetImageInfo(EpisodeRecord episode) { - var height = 225; - var width = 400; - var url = string.Empty; - if (string.IsNullOrEmpty(episode.Filename)) { return null; diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs index e592b2004..8f763f2c5 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs @@ -11,6 +11,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; +using Microsoft.Extensions.Logging; using TvDbSharper; using TvDbSharper.Dto; using RatingType = MediaBrowser.Model.Dto.RatingType; @@ -22,11 +23,13 @@ namespace MediaBrowser.Providers.TV.TheTVDB private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); private readonly IHttpClient _httpClient; + private readonly ILogger _logger; private readonly TvDbClientManager _tvDbClientManager; - public TvdbSeasonImageProvider(IHttpClient httpClient) + public TvdbSeasonImageProvider(IHttpClient httpClient, ILogger logger) { _httpClient = httpClient; + _logger = logger; _tvDbClientManager = TvDbClientManager.Instance; } @@ -59,13 +62,14 @@ namespace MediaBrowser.Providers.TV.TheTVDB return new RemoteImageInfo[] { }; } + var tvdbId = Convert.ToInt32(series.GetProviderId(MetadataProviders.Tvdb)); var seasonNumber = season.IndexNumber.Value; var language = item.GetPreferredMetadataLanguage(); _tvDbClientManager.TvDbClient.AcceptedLanguage = language; var remoteImages = new List(); + var keyTypes = new[] {KeyType.Season, KeyType.Seasonwide, KeyType.Fanart}; - // TODO error handling - foreach (KeyType keyType in keyTypes) + foreach (var keyType in keyTypes) { var imageQuery = new ImagesQuery { @@ -74,15 +78,12 @@ namespace MediaBrowser.Providers.TV.TheTVDB }; try { - var imageResults = - await _tvDbClientManager.TvDbClient.Series.GetImagesAsync( - Convert.ToInt32(series.GetProviderId(MetadataProviders.Tvdb)), imageQuery, - cancellationToken); + var imageResults = await _tvDbClientManager.TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken); remoteImages.AddRange(GetImages(imageResults.Data, language)); } catch (TvDbServerException e) { - // TODO log + _logger.LogInformation(e, "No images of type {KeyType} found for series {TvdbId}", keyType, tvdbId); } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index d0a1f5ec1..25bea7821 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -95,7 +95,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB result.Item = new Series(); result.HasMetadata = true; - FetchSeriesData(result, itemId.MetadataLanguage, itemId.ProviderIds, cancellationToken); + await FetchSeriesData(result, itemId.MetadataLanguage, itemId.ProviderIds, cancellationToken); } return result; @@ -127,7 +127,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB var seriesResult = await _tvDbClientManager.TvDbClient.Series.GetAsync(Convert.ToInt32(tvdbId), cancellationToken); // TODO error handling - MapSeriesToResult(result, seriesResult.Data, cancellationToken); + MapSeriesToResult(result, seriesResult.Data); cancellationToken.ThrowIfCancellationRequested(); @@ -161,51 +161,6 @@ namespace MediaBrowser.Providers.TV.TheTVDB seriesProviderIds.TryGetValue(MetadataProviders.Zap2It.ToString(), out _); } - // TODO caching - private bool IsCacheValid(string seriesDataPath, string preferredMetadataLanguage) - { - return true; -// try -// { -// var files = _fileSystem.GetFiles(seriesDataPath, new[] { ".xml" }, true, false) -// .ToList(); -// -// var seriesXmlFilename = preferredMetadataLanguage + ".xml"; -// -// const int cacheHours = 12; -// -// var seriesFile = files.FirstOrDefault(i => string.Equals(seriesXmlFilename, i.Name, StringComparison.OrdinalIgnoreCase)); -// // No need to check age if automatic updates are enabled -// if (seriesFile == null || !seriesFile.Exists || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(seriesFile)).TotalHours > cacheHours) -// { -// return false; -// } -// -// var actorsXml = files.FirstOrDefault(i => string.Equals("actors.xml", i.Name, StringComparison.OrdinalIgnoreCase)); -// // No need to check age if automatic updates are enabled -// if (actorsXml == null || !actorsXml.Exists || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(actorsXml)).TotalHours > cacheHours) -// { -// return false; -// } -// -// var bannersXml = files.FirstOrDefault(i => string.Equals("banners.xml", i.Name, StringComparison.OrdinalIgnoreCase)); -// // No need to check age if automatic updates are enabled -// if (bannersXml == null || !bannersXml.Exists || (DateTime.UtcNow - _fileSystem.GetLastWriteTimeUtc(bannersXml)).TotalHours > cacheHours) -// { -// return false; -// } -// return true; -// } -// catch (FileNotFoundException) -// { -// return false; -// } -// catch (IOException) -// { -// return false; -// } - } - /// /// Finds the series. /// @@ -246,7 +201,16 @@ namespace MediaBrowser.Providers.TV.TheTVDB _tvDbClientManager.TvDbClient.AcceptedLanguage = NormalizeLanguage(language); var comparableName = GetComparableName(name); var list = new List, RemoteSearchResult>>(); - TvDbResponse result = await _tvDbClientManager.TvDbClient.Search.SearchSeriesByNameAsync(comparableName, cancellationToken); + TvDbResponse result; + try + { + result = await _tvDbClientManager.TvDbClient.Search.SearchSeriesByNameAsync(comparableName, cancellationToken); + } + catch (TvDbServerException e) + { + _logger.LogError(e, "No series results found for {Name}", comparableName); + return new List(); + } foreach (var seriesSearchResult in result.Data) { @@ -265,8 +229,18 @@ namespace MediaBrowser.Providers.TV.TheTVDB ImageUrl = TVUtils.BannerUrl + seriesSearchResult.Banner }; - // TODO requires another query, is it worth it? - // remoteSearchResult.SetProviderId(MetadataProviders.Imdb, seriesSearchResult.Id); + 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); + } + catch (TvDbServerException e) + { + _logger.LogError(e, "Unable to retrieve series with id {TvdbId}", seriesSearchResult.Id); + } + remoteSearchResult.SetProviderId(MetadataProviders.Tvdb, seriesSearchResult.Id.ToString()); list.Add(new Tuple, RemoteSearchResult>(tvdbTitles, remoteSearchResult)); } @@ -335,14 +309,13 @@ namespace MediaBrowser.Providers.TV.TheTVDB return name.Trim(); } - private static void MapSeriesToResult(MetadataResult result, TvDbSharper.Dto.Series tvdbSeries, CancellationToken cancellationToken) + private static void MapSeriesToResult(MetadataResult result, TvDbSharper.Dto.Series tvdbSeries) { - var episodeAirDates = new List(); Series series = result.Item; series.SetProviderId(MetadataProviders.Tvdb, tvdbSeries.Id.ToString()); series.Name = tvdbSeries.SeriesName; series.Overview = (tvdbSeries.Overview ?? string.Empty).Trim(); - // TODO result.ResultLanguage = (seriesResponse.Data. ?? string.Empty).Trim(); + result.ResultLanguage = TvDbClientManager.Instance.TvDbClient.AcceptedLanguage; series.AirDays = TVUtils.GetAirDays(tvdbSeries.AirsDayOfWeek); series.AirTime = tvdbSeries.AirsTime; @@ -368,14 +341,13 @@ namespace MediaBrowser.Providers.TV.TheTVDB series.AddGenre(genre); } - // TODO is network == studio? series.AddStudio(tvdbSeries.Network); // TODO is this necessary? - if (result.Item.Status.HasValue && result.Item.Status.Value == SeriesStatus.Ended && episodeAirDates.Count > 0) - { - result.Item.EndDate = episodeAirDates.Max(); - } + // if (result.Item.Status.HasValue && result.Item.Status.Value == SeriesStatus.Ended && episodeAirDates.Count > 0) + // { + // result.Item.EndDate = episodeAirDates.Max(); + // } } private static void MapActorsToResult(MetadataResult result, IEnumerable actors) -- cgit v1.2.3 From 8029cd3ebb022817657e870e773ac4f1225e3b24 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Tue, 12 Feb 2019 19:50:19 +0100 Subject: Add better language support --- MediaBrowser.Controller/Library/TVUtils.cs | 10 ++ .../People/TvdbPersonImageProvider.cs | 2 +- .../TV/MissingEpisodeProvider.cs | 2 +- .../TV/TheTVDB/TvDbClientManager.cs | 108 +++++++++++++++------ .../TV/TheTVDB/TvdbEpisodeImageProvider.cs | 6 +- .../TV/TheTVDB/TvdbEpisodeProvider.cs | 8 +- .../TV/TheTVDB/TvdbSeasonImageProvider.cs | 3 +- .../TV/TheTVDB/TvdbSeriesImageProvider.cs | 3 +- .../TV/TheTVDB/TvdbSeriesProvider.cs | 34 ++----- 9 files changed, 108 insertions(+), 68 deletions(-) (limited to 'MediaBrowser.Controller/Library') diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 0089f65d0..355e97db1 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -17,6 +17,16 @@ namespace MediaBrowser.Controller.Library /// public static readonly string BannerUrl = TvdbBaseUrl + "banners/"; + public static string NormalizeLanguage(string language) + { + if (string.IsNullOrWhiteSpace(language)) + { + return null; + } + + // pt-br is just pt to tvdb + return language.Split('-')[0].ToLowerInvariant(); + } /// /// Gets the air days. /// diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs index b3ffa3ca9..86719fe83 100644 --- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs +++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs @@ -78,7 +78,7 @@ namespace MediaBrowser.Providers.People try { - var actorsResult = await _tvDbClientManager.GetActorsAsync(tvdbId, cancellationToken); + var actorsResult = await _tvDbClientManager.GetActorsAsync(tvdbId, series.GetPreferredMetadataLanguage(), cancellationToken); var actor = actorsResult.Data.FirstOrDefault(a => string.Equals(a.Name, personName, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(a.Image)); diff --git a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs index 561cedb03..f05b0d6b8 100644 --- a/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/MissingEpisodeProvider.cs @@ -48,7 +48,7 @@ namespace MediaBrowser.Providers.TV return false; } - var episodes = await TvDbClientManager.Instance.GetAllEpisodesAsync(Convert.ToInt32(tvdbId), cancellationToken); + var episodes = await TvDbClientManager.Instance.GetAllEpisodesAsync(Convert.ToInt32(tvdbId), series.GetPreferredMetadataLanguage(), cancellationToken); var episodeLookup = episodes .Select(i => diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs index 44491e511..9d63b8373 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Library; @@ -22,6 +23,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB private static readonly object syncRoot = new object(); private static TvDbClient tvDbClient; private static DateTime tokenCreatedAt; + private const string DefaultLanguage = "en"; private TvDbClientManager() { @@ -70,32 +72,35 @@ namespace MediaBrowser.Providers.TV.TheTVDB tokenCreatedAt = DateTime.Now; } - // Default to English - tvDbClient.AcceptedLanguage = "en"; + return tvDbClient; } } - public Task> GetSeriesByNameAsync(string name, CancellationToken cancellationToken) + public Task> GetSeriesByNameAsync(string name, string language, + CancellationToken cancellationToken) { - return TryGetValue("series" + name,() => TvDbClient.Search.SearchSeriesByNameAsync(name, cancellationToken)); + return TryGetValue("series" + name, language,() => TvDbClient.Search.SearchSeriesByNameAsync(name, cancellationToken)); } - public Task> GetSeriesByIdAsync(int tvdbId, CancellationToken cancellationToken) + public Task> GetSeriesByIdAsync(int tvdbId, string language, + CancellationToken cancellationToken) { - return TryGetValue("series" + tvdbId,() => TvDbClient.Series.GetAsync(tvdbId, cancellationToken)); + return TryGetValue("series" + tvdbId, language,() => TvDbClient.Series.GetAsync(tvdbId, cancellationToken)); } - public Task> GetEpisodesAsync(int episodeTvdbId, CancellationToken cancellationToken) + public Task> GetEpisodesAsync(int episodeTvdbId, string language, + CancellationToken cancellationToken) { - return TryGetValue("episode" + episodeTvdbId,() => TvDbClient.Episodes.GetAsync(episodeTvdbId, cancellationToken)); + return TryGetValue("episode" + episodeTvdbId, language,() => TvDbClient.Episodes.GetAsync(episodeTvdbId, cancellationToken)); } - public async Task> GetAllEpisodesAsync(int tvdbId, CancellationToken cancellationToken) + public async Task> GetAllEpisodesAsync(int tvdbId, string language, + CancellationToken cancellationToken) { // Traverse all episode pages and join them together var episodes = new List(); - var episodePage = await GetEpisodesPageAsync(tvdbId, new EpisodeQuery(), cancellationToken); + var episodePage = await GetEpisodesPageAsync(tvdbId, new EpisodeQuery(), language, cancellationToken); episodes.AddRange(episodePage.Data); if (!episodePage.Links.Next.HasValue || !episodePage.Links.Last.HasValue) { @@ -107,45 +112,51 @@ namespace MediaBrowser.Providers.TV.TheTVDB for (var page = next; page <= last; ++page) { - episodePage = await GetEpisodesPageAsync(tvdbId, page, new EpisodeQuery(), cancellationToken); + episodePage = await GetEpisodesPageAsync(tvdbId, page, new EpisodeQuery(), language, cancellationToken); episodes.AddRange(episodePage.Data); } return episodes; } - public Task> GetSeriesByImdbIdAsync(string imdbId, CancellationToken cancellationToken) + public Task> GetSeriesByImdbIdAsync(string imdbId, string language, + CancellationToken cancellationToken) { - return TryGetValue("series" + imdbId,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(imdbId, cancellationToken)); + return TryGetValue("series" + imdbId, language,() => TvDbClient.Search.SearchSeriesByImdbIdAsync(imdbId, cancellationToken)); } - public Task> GetSeriesByZap2ItIdAsync(string zap2ItId, CancellationToken cancellationToken) + public Task> GetSeriesByZap2ItIdAsync(string zap2ItId, string language, + CancellationToken cancellationToken) { - return TryGetValue("series" + zap2ItId,() => TvDbClient.Search.SearchSeriesByZap2ItIdAsync(zap2ItId, cancellationToken)); + return TryGetValue("series" + zap2ItId, language,() => TvDbClient.Search.SearchSeriesByZap2ItIdAsync(zap2ItId, cancellationToken)); } - public Task> GetActorsAsync(int tvdbId, CancellationToken cancellationToken) + public Task> GetActorsAsync(int tvdbId, string language, + CancellationToken cancellationToken) { - return TryGetValue("actors" + tvdbId,() => TvDbClient.Series.GetActorsAsync(tvdbId, cancellationToken)); + return TryGetValue("actors" + tvdbId, language,() => TvDbClient.Series.GetActorsAsync(tvdbId, cancellationToken)); } - public Task> GetImagesAsync(int tvdbId, ImagesQuery imageQuery, CancellationToken cancellationToken) + public Task> GetImagesAsync(int tvdbId, ImagesQuery imageQuery, string language, + CancellationToken cancellationToken) { var cacheKey = "images" + tvdbId + "keytype" + imageQuery.KeyType + "subkey" + imageQuery.SubKey; - return TryGetValue(cacheKey,() => TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken)); + return TryGetValue(cacheKey, language,() => TvDbClient.Series.GetImagesAsync(tvdbId, imageQuery, cancellationToken)); } public Task> GetLanguagesAsync(CancellationToken cancellationToken) { - return TryGetValue("languages",() => TvDbClient.Languages.GetAllAsync(cancellationToken)); + return TryGetValue("languages", null,() => TvDbClient.Languages.GetAllAsync(cancellationToken)); } - public Task> GetSeriesEpisodeSummaryAsync(int tvdbId, CancellationToken cancellationToken) + public Task> GetSeriesEpisodeSummaryAsync(int tvdbId, string language, + CancellationToken cancellationToken) { - return TryGetValue("seriesepisodesummary" + tvdbId, + return TryGetValue("seriesepisodesummary" + tvdbId, language, () => TvDbClient.Series.GetEpisodesSummaryAsync(tvdbId, cancellationToken)); } - public Task> GetEpisodesPageAsync(int tvdbId, int page, EpisodeQuery episodeQuery, CancellationToken cancellationToken) + public Task> GetEpisodesPageAsync(int tvdbId, int page, EpisodeQuery episodeQuery, + string language, CancellationToken cancellationToken) { // Not quite as dynamic as it could be var cacheKey = "episodespage" + tvdbId + "page" + page; @@ -157,11 +168,13 @@ namespace MediaBrowser.Providers.TV.TheTVDB { cacheKey += "airedepisode" + episodeQuery.AiredEpisode.Value; } - return TryGetValue(cacheKey, + + return TryGetValue(cacheKey, language, () => TvDbClient.Series.GetEpisodesAsync(tvdbId, page, episodeQuery, cancellationToken)); } - public Task GetEpisodeTvdbId(EpisodeInfo searchInfo, CancellationToken cancellationToken) + public Task GetEpisodeTvdbId(EpisodeInfo searchInfo, string language, + CancellationToken cancellationToken) { searchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out var seriesTvdbId); @@ -180,21 +193,23 @@ namespace MediaBrowser.Providers.TV.TheTVDB episodeQuery.FirstAired = searchInfo.PremiereDate.Value.ToString("yyyy-MM-dd"); } - return GetEpisodeTvdbId(Convert.ToInt32(seriesTvdbId), episodeQuery, cancellationToken); + return GetEpisodeTvdbId(Convert.ToInt32(seriesTvdbId), episodeQuery, cancellationToken, language); } - public async Task GetEpisodeTvdbId(int seriesTvdbId, EpisodeQuery episodeQuery, CancellationToken cancellationToken) + public async Task GetEpisodeTvdbId(int seriesTvdbId, EpisodeQuery episodeQuery, + CancellationToken cancellationToken, string language) { - var episodePage = await GetEpisodesPageAsync(Convert.ToInt32(seriesTvdbId), episodeQuery, cancellationToken); + var episodePage = await GetEpisodesPageAsync(Convert.ToInt32(seriesTvdbId), episodeQuery, language, cancellationToken); return episodePage.Data.FirstOrDefault()?.Id.ToString(); } - public Task> GetEpisodesPageAsync(int tvdbId, EpisodeQuery episodeQuery, CancellationToken cancellationToken) + public Task> GetEpisodesPageAsync(int tvdbId, EpisodeQuery episodeQuery, + string language, CancellationToken cancellationToken) { - return GetEpisodesPageAsync(tvdbId, 1, episodeQuery, cancellationToken); + return GetEpisodesPageAsync(tvdbId, 1, episodeQuery, language, cancellationToken); } - private async Task TryGetValue(object key, Func> resultFactory) + private async Task TryGetValue(string key, string language, Func> resultFactory) { if (_cache.TryGetValue(key, out T cachedValue)) { @@ -209,6 +224,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB return cachedValue; } + tvDbClient.AcceptedLanguage = TVUtils.NormalizeLanguage(language) ?? DefaultLanguage; var result = await resultFactory.Invoke(); _cache.Set(key, result, TimeSpan.FromHours(1)); return result; @@ -218,5 +234,35 @@ namespace MediaBrowser.Providers.TV.TheTVDB _cacheWriteLock.Release(); } } + + private static string GenerateKey(object[] objects) + { + var key = string.Empty; + + foreach (var obj in objects) + { + key += nameof(obj); + var objType = obj.GetType(); + if (objType.IsPrimitive || objType == typeof(string)) + { + key += obj.ToString(); + } + else + { + foreach (PropertyInfo propertyInfo in objType.GetProperties()) + { + var currentValue = propertyInfo.GetValue(obj, null); + if (currentValue == null) + { + continue; + } + + key += propertyInfo.Name + currentValue; + } + } + } + + return key; + } } } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index 49468531d..0935b584a 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs @@ -50,7 +50,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB var episode = (Episode)item; var series = episode.Series; var imageResult = new List(); - + var language = item.GetPreferredMetadataLanguage(); if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { var episodeTvdbId = episode.GetProviderId(MetadataProviders.Tvdb); @@ -66,7 +66,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB ParentIndexNumber = episode.ParentIndexNumber.Value, SeriesProviderIds = series.ProviderIds }; - episodeTvdbId = await _tvDbClientManager.GetEpisodeTvdbId(episodeInfo, cancellationToken); + episodeTvdbId = await _tvDbClientManager.GetEpisodeTvdbId(episodeInfo, language, cancellationToken); if (string.IsNullOrEmpty(episodeTvdbId)) { _logger.LogError("Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}", @@ -76,7 +76,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB } var episodeResult = - await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(episodeTvdbId), cancellationToken); + await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(episodeTvdbId), language, 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 2a52b76eb..10665135f 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeProvider.cs @@ -48,7 +48,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB var episodeTvdbId = searchInfo.GetProviderId(MetadataProviders.Tvdb); if (string.IsNullOrEmpty(episodeTvdbId)) { - episodeTvdbId = await _tvDbClientManager.GetEpisodeTvdbId(searchInfo, cancellationToken); + episodeTvdbId = await _tvDbClientManager.GetEpisodeTvdbId(searchInfo, searchInfo.MetadataLanguage, cancellationToken); if (string.IsNullOrEmpty(episodeTvdbId)) { _logger.LogError("Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}", @@ -56,7 +56,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB return list; } } - var episodeResult = await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(episodeTvdbId), cancellationToken); + var episodeResult = await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(episodeTvdbId), searchInfo.MetadataLanguage, cancellationToken); var metadataResult = MapEpisodeToResult(searchInfo, episodeResult.Data); if (metadataResult.HasMetadata) @@ -102,7 +102,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB { if (string.IsNullOrEmpty(tvdbId)) { - tvdbId = await _tvDbClientManager.GetEpisodeTvdbId(searchInfo, cancellationToken); + tvdbId = await _tvDbClientManager.GetEpisodeTvdbId(searchInfo, searchInfo.MetadataLanguage, cancellationToken); if (string.IsNullOrEmpty(tvdbId)) { _logger.LogError("Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}", @@ -112,7 +112,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB } var episodeResult = await _tvDbClientManager.GetEpisodesAsync( - Convert.ToInt32(tvdbId), + Convert.ToInt32(tvdbId), searchInfo.MetadataLanguage, cancellationToken); result = MapEpisodeToResult(searchInfo, episodeResult.Data); diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs index 9218e9c08..fdd7adc46 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs @@ -65,7 +65,6 @@ namespace MediaBrowser.Providers.TV.TheTVDB var tvdbId = Convert.ToInt32(series.GetProviderId(MetadataProviders.Tvdb)); var seasonNumber = season.IndexNumber.Value; var language = item.GetPreferredMetadataLanguage(); - _tvDbClientManager.TvDbClient.AcceptedLanguage = language; var remoteImages = new List(); var keyTypes = new[] {KeyType.Season, KeyType.Seasonwide, KeyType.Fanart}; @@ -78,7 +77,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB }; try { - var imageResults = await _tvDbClientManager.GetImagesAsync(tvdbId, imageQuery, cancellationToken); + var imageResults = await _tvDbClientManager.GetImagesAsync(tvdbId, imageQuery, language, cancellationToken); remoteImages.AddRange(GetImages(imageResults.Data, language)); } catch (TvDbServerException) diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs index b4b950be1..66596f88d 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs @@ -58,7 +58,6 @@ namespace MediaBrowser.Providers.TV.TheTVDB } var language = item.GetPreferredMetadataLanguage(); - _tvDbClientManager.TvDbClient.AcceptedLanguage = language; var remoteImages = new List(); var keyTypes = new[] {KeyType.Poster, KeyType.Series, KeyType.Fanart}; var tvdbId = Convert.ToInt32(item.GetProviderId(MetadataProviders.Tvdb)); @@ -71,7 +70,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { var imageResults = - await _tvDbClientManager.GetImagesAsync(tvdbId, imageQuery, cancellationToken); + await _tvDbClientManager.GetImagesAsync(tvdbId, imageQuery, language, cancellationToken); remoteImages.AddRange(GetImages(imageResults.Data, language)); } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index 8e5616d15..4053cc488 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -39,17 +39,6 @@ namespace MediaBrowser.Providers.TV.TheTVDB _tvDbClientManager = TvDbClientManager.Instance; } - private string NormalizeLanguage(string language) - { - if (string.IsNullOrWhiteSpace(language)) - { - return language; - } - - // pt-br is just pt to tvdb - return language.Split('-')[0].ToLowerInvariant(); - } - public async Task> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken) { if (IsValidSeries(searchInfo.ProviderIds)) @@ -103,7 +92,6 @@ namespace MediaBrowser.Providers.TV.TheTVDB private async Task FetchSeriesData(MetadataResult result, string metadataLanguage, Dictionary seriesProviderIds, CancellationToken cancellationToken) { - _tvDbClientManager.TvDbClient.AcceptedLanguage = NormalizeLanguage(metadataLanguage); var series = result.Item; if (seriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out var tvdbId) && !string.IsNullOrEmpty(tvdbId)) @@ -126,8 +114,8 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { var seriesResult = - await _tvDbClientManager.GetSeriesByIdAsync(Convert.ToInt32(tvdbId), cancellationToken); - MapSeriesToResult(result, seriesResult.Data); + await _tvDbClientManager.GetSeriesByIdAsync(Convert.ToInt32(tvdbId), metadataLanguage, cancellationToken); + MapSeriesToResult(result, seriesResult.Data, metadataLanguage); } catch (TvDbServerException e) { @@ -141,7 +129,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { - var actorsResult = await _tvDbClientManager.GetActorsAsync(Convert.ToInt32(tvdbId), cancellationToken); + var actorsResult = await _tvDbClientManager.GetActorsAsync(Convert.ToInt32(tvdbId), metadataLanguage, cancellationToken); MapActorsToResult(result, actorsResult.Data); } catch (TvDbServerException e) @@ -152,18 +140,17 @@ namespace MediaBrowser.Providers.TV.TheTVDB private async Task GetSeriesByRemoteId(string id, string idType, string language, CancellationToken cancellationToken) { - _tvDbClientManager.TvDbClient.AcceptedLanguage = NormalizeLanguage(language); TvDbResponse result = null; try { if (string.Equals(idType, MetadataProviders.Zap2It.ToString(), StringComparison.OrdinalIgnoreCase)) { - result = await _tvDbClientManager.GetSeriesByZap2ItIdAsync(id, cancellationToken); + result = await _tvDbClientManager.GetSeriesByZap2ItIdAsync(id, language, cancellationToken); } else { - result = await _tvDbClientManager.GetSeriesByImdbIdAsync(id, cancellationToken); + result = await _tvDbClientManager.GetSeriesByImdbIdAsync(id, language, cancellationToken); } } catch (TvDbServerException e) @@ -218,13 +205,12 @@ namespace MediaBrowser.Providers.TV.TheTVDB private async Task> FindSeriesInternal(string name, string language, CancellationToken cancellationToken) { - _tvDbClientManager.TvDbClient.AcceptedLanguage = NormalizeLanguage(language); var comparableName = GetComparableName(name); var list = new List, RemoteSearchResult>>(); TvDbResponse result; try { - result = await _tvDbClientManager.GetSeriesByNameAsync(comparableName, cancellationToken); + result = await _tvDbClientManager.GetSeriesByNameAsync(comparableName, language, cancellationToken); } catch (TvDbServerException e) { @@ -252,7 +238,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { var seriesSesult = - await _tvDbClientManager.GetSeriesByIdAsync(seriesSearchResult.Id, cancellationToken); + await _tvDbClientManager.GetSeriesByIdAsync(seriesSearchResult.Id, language, cancellationToken); remoteSearchResult.SetProviderId(MetadataProviders.Imdb, seriesSesult.Data.ImdbId); remoteSearchResult.SetProviderId(MetadataProviders.Zap2It, seriesSesult.Data.Zap2itId); } @@ -329,7 +315,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB return name.Trim(); } - private void MapSeriesToResult(MetadataResult result, TvDbSharper.Dto.Series tvdbSeries) + private void MapSeriesToResult(MetadataResult result, TvDbSharper.Dto.Series tvdbSeries, string metadataLanguage) { Series series = result.Item; series.SetProviderId(MetadataProviders.Tvdb, tvdbSeries.Id.ToString()); @@ -367,14 +353,14 @@ namespace MediaBrowser.Providers.TV.TheTVDB try { var episodeSummary = _tvDbClientManager - .GetSeriesEpisodeSummaryAsync(tvdbSeries.Id, CancellationToken.None).Result.Data; + .GetSeriesEpisodeSummaryAsync(tvdbSeries.Id, metadataLanguage, CancellationToken.None).Result.Data; var maxSeasonNumber = episodeSummary.AiredSeasons.Select(s => Convert.ToInt32(s)).Max(); var episodeQuery = new EpisodeQuery { AiredSeason = maxSeasonNumber }; var episodesPage = - _tvDbClientManager.GetEpisodesPageAsync(tvdbSeries.Id, episodeQuery, CancellationToken.None).Result.Data; + _tvDbClientManager.GetEpisodesPageAsync(tvdbSeries.Id, episodeQuery, metadataLanguage, CancellationToken.None).Result.Data; result.Item.EndDate = episodesPage.Select(e => { DateTime.TryParse(e.FirstAired, out var firstAired); -- cgit v1.2.3 From b9efcace7918d520576ad73e8aab4107091519b9 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Wed, 13 Feb 2019 11:21:56 +0100 Subject: Extract imagetype-to-keytype statements into a utility function and move tvdb specific utils to separate class --- MediaBrowser.Controller/Library/TVUtils.cs | 20 --------- .../People/TvdbPersonImageProvider.cs | 3 +- .../TV/TheTVDB/TvDbClientManager.cs | 6 +-- .../TV/TheTVDB/TvdbEpisodeImageProvider.cs | 5 +-- .../TV/TheTVDB/TvdbSeasonImageProvider.cs | 19 ++------- .../TV/TheTVDB/TvdbSeriesImageProvider.cs | 21 ++-------- .../TV/TheTVDB/TvdbSeriesProvider.cs | 4 +- MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs | 47 ++++++++++++++++++++++ 8 files changed, 60 insertions(+), 65 deletions(-) create mode 100644 MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs (limited to 'MediaBrowser.Controller/Library') diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 355e97db1..fd5fb6748 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -7,26 +7,6 @@ namespace MediaBrowser.Controller.Library /// public static class TVUtils { - /// - /// The TVDB API key - /// - public static readonly string TvdbApiKey = "OG4V3YJ3FAP7FP2K"; - public static readonly string TvdbBaseUrl = "https://www.thetvdb.com/"; - /// - /// The banner URL - /// - public static readonly string BannerUrl = TvdbBaseUrl + "banners/"; - - public static string NormalizeLanguage(string language) - { - if (string.IsNullOrWhiteSpace(language)) - { - return null; - } - - // pt-br is just pt to tvdb - return language.Split('-')[0].ToLowerInvariant(); - } /// /// Gets the air days. /// diff --git a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs index 1efd5005b..7e13f7b30 100644 --- a/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs +++ b/MediaBrowser.Providers/People/TvdbPersonImageProvider.cs @@ -11,7 +11,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -using MediaBrowser.Providers.TV; using MediaBrowser.Providers.TV.TheTVDB; using Microsoft.Extensions.Logging; using TvDbSharper; @@ -89,7 +88,7 @@ namespace MediaBrowser.Providers.People return new RemoteImageInfo { - Url = TVUtils.BannerUrl + actor.Image, + Url = TvdbUtils.BannerUrl + actor.Image, Type = ImageType.Primary, ProviderName = Name }; diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs index 66f692bd0..b0843dcdc 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvDbClientManager.cs @@ -28,7 +28,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB private TvDbClientManager() { tvDbClient = new TvDbClient(); - tvDbClient.Authentication.AuthenticateAsync(TVUtils.TvdbApiKey); + tvDbClient.Authentication.AuthenticateAsync(TvdbUtils.TvdbApiKey); tokenCreatedAt = DateTime.Now; } @@ -67,7 +67,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB } catch { - tvDbClient.Authentication.AuthenticateAsync(TVUtils.TvdbApiKey); + tvDbClient.Authentication.AuthenticateAsync(TvdbUtils.TvdbApiKey); } tokenCreatedAt = DateTime.Now; @@ -222,7 +222,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB return cachedValue; } - tvDbClient.AcceptedLanguage = TVUtils.NormalizeLanguage(language) ?? DefaultLanguage; + tvDbClient.AcceptedLanguage = TvdbUtils.NormalizeLanguage(language) ?? DefaultLanguage; var result = await resultFactory.Invoke(); _cache.Set(key, result, TimeSpan.FromHours(1)); return result; diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs index 0935b584a..93c52955b 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbEpisodeImageProvider.cs @@ -1,13 +1,10 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Net; -using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; @@ -105,7 +102,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB Width = Convert.ToInt32(episode.ThumbWidth), Height = Convert.ToInt32(episode.ThumbHeight), ProviderName = Name, - Url = TVUtils.BannerUrl + episode.Filename, + Url = TvdbUtils.BannerUrl + episode.Filename, Type = ImageType.Primary }; } diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs index fdd7adc46..1f5458e5c 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeasonImageProvider.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; -using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; @@ -100,10 +99,10 @@ namespace MediaBrowser.Providers.TV.TheTVDB RatingType = RatingType.Score, CommunityRating = (double?)image.RatingsInfo.Average, VoteCount = image.RatingsInfo.Count, - Url = TVUtils.BannerUrl + image.FileName, + Url = TvdbUtils.BannerUrl + image.FileName, ProviderName = ProviderName, Language = languages.FirstOrDefault(lang => lang.Id == image.LanguageId)?.Abbreviation, - ThumbnailUrl = TVUtils.BannerUrl + image.Thumbnail + ThumbnailUrl = TvdbUtils.BannerUrl + image.Thumbnail }; var resolution = image.Resolution.Split('x'); @@ -113,19 +112,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB imageInfo.Height = Convert.ToInt32(resolution[1]); } - if (string.Equals(image.KeyType, "season", StringComparison.OrdinalIgnoreCase)) - { - imageInfo.Type = ImageType.Primary; - } - else if (string.Equals(image.KeyType, "seasonwide", StringComparison.OrdinalIgnoreCase)) - { - imageInfo.Type = ImageType.Banner; - } - else if (string.Equals(image.KeyType, "fanart", StringComparison.OrdinalIgnoreCase)) - { - imageInfo.Type = ImageType.Backdrop; - } - + imageInfo.Type = TvdbUtils.GetImageTypeFromKeyType(image.KeyType); list.Add(imageInfo); } var isLanguageEn = string.Equals(preferredLanguage, "en", StringComparison.OrdinalIgnoreCase); diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs index 66596f88d..a106d7cd3 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesImageProvider.cs @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; @@ -95,10 +93,10 @@ namespace MediaBrowser.Providers.TV.TheTVDB RatingType = RatingType.Score, CommunityRating = (double?)image.RatingsInfo.Average, VoteCount = image.RatingsInfo.Count, - Url = TVUtils.BannerUrl + image.FileName, + Url = TvdbUtils.BannerUrl + image.FileName, ProviderName = Name, Language = languages.FirstOrDefault(lang => lang.Id == image.LanguageId)?.Abbreviation, - ThumbnailUrl = TVUtils.BannerUrl + image.Thumbnail + ThumbnailUrl = TvdbUtils.BannerUrl + image.Thumbnail }; var resolution = image.Resolution.Split('x'); @@ -108,20 +106,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB imageInfo.Height = Convert.ToInt32(resolution[1]); } - - if (string.Equals(image.KeyType, "poster", StringComparison.OrdinalIgnoreCase)) - { - imageInfo.Type = ImageType.Primary; - } - else if (string.Equals(image.KeyType, "series", StringComparison.OrdinalIgnoreCase)) - { - imageInfo.Type = ImageType.Banner; - } - else if (string.Equals(image.KeyType, "fanart", StringComparison.OrdinalIgnoreCase)) - { - imageInfo.Type = ImageType.Backdrop; - } - + imageInfo.Type = TvdbUtils.GetImageTypeFromKeyType(image.KeyType); list.Add(imageInfo); } var isLanguageEn = string.Equals(preferredLanguage, "en", StringComparison.OrdinalIgnoreCase); diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs index e88093e42..d51fbfb47 100644 --- a/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbSeriesProvider.cs @@ -232,7 +232,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB Name = tvdbTitles.FirstOrDefault(), ProductionYear = firstAired.Year, SearchProviderName = Name, - ImageUrl = TVUtils.BannerUrl + seriesSearchResult.Banner + ImageUrl = TvdbUtils.BannerUrl + seriesSearchResult.Banner }; try @@ -383,7 +383,7 @@ namespace MediaBrowser.Providers.TV.TheTVDB Type = PersonType.Actor, Name = (actor.Name ?? string.Empty).Trim(), Role = actor.Role, - ImageUrl = TVUtils.BannerUrl + actor.Image, + ImageUrl = TvdbUtils.BannerUrl + actor.Image, SortOrder = actor.SortOrder }; diff --git a/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs b/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs new file mode 100644 index 000000000..d253b76a4 --- /dev/null +++ b/MediaBrowser.Providers/TV/TheTVDB/TvdbUtils.cs @@ -0,0 +1,47 @@ +using System; +using System.ComponentModel; +using MediaBrowser.Model.Entities; +using TvDbSharper.Dto; + +namespace MediaBrowser.Providers.TV.TheTVDB +{ + /// + /// Class TVUtils + /// + public static class TvdbUtils + { + /// + /// The TVDB API key + /// + public static readonly string TvdbApiKey = "OG4V3YJ3FAP7FP2K"; + public static readonly string TvdbBaseUrl = "https://www.thetvdb.com/"; + /// + /// The banner URL + /// + public static readonly string BannerUrl = TvdbBaseUrl + "banners/"; + + public static ImageType GetImageTypeFromKeyType(string keyType) + { + switch (keyType.ToLowerInvariant()) + { + case "poster": + case "season": return ImageType.Primary; + case "series": + case "seasonwide": return ImageType.Banner; + case "fanart": return ImageType.Backdrop; + default: throw new ArgumentException($"Invalid or unknown keytype: {keyType}", nameof(keyType)); + } + } + + public static string NormalizeLanguage(string language) + { + if (string.IsNullOrWhiteSpace(language)) + { + return null; + } + + // pt-br is just pt to tvdb + return language.Split('-')[0].ToLowerInvariant(); + } + } +} -- cgit v1.2.3