public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) { if (!TvdbSeriesProvider.IsValidSeries(item.ProviderIds)) { return(Array.Empty <RemoteImageInfo>()); } var language = item.GetPreferredMetadataLanguage(); var remoteImages = new List <RemoteImageInfo>(); var keyTypes = new[] { KeyType.Poster, KeyType.Series, KeyType.Fanart }; var tvdbId = Convert.ToInt32(item.GetProviderId(MetadataProviders.Tvdb)); foreach (KeyType keyType in keyTypes) { var imageQuery = new ImagesQuery { KeyType = keyType }; try { var imageResults = await _tvDbClientManager.GetImagesAsync(tvdbId, imageQuery, language, cancellationToken) .ConfigureAwait(false); remoteImages.AddRange(GetImages(imageResults.Data, language)); } catch (TvDbServerException) { _logger.LogDebug("No images of type {KeyType} exist for series {TvDbId}", keyType, tvdbId); } } return(remoteImages); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) { var season = (Season)item; var series = season.Series; if (series != null && season.IndexNumber.HasValue && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { var seriesProviderIds = series.ProviderIds; var seasonNumber = season.IndexNumber.Value; var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(seriesProviderIds, series.Name, series.ProductionYear, series.GetPreferredMetadataLanguage(), cancellationToken).ConfigureAwait(false); if (!string.IsNullOrEmpty(seriesDataPath)) { var path = Path.Combine(seriesDataPath, "banners.xml"); try { return(GetImages(path, item.GetPreferredMetadataLanguage(), seasonNumber, _xmlSettings, _fileSystem, cancellationToken)); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } catch (IOException) { // No tvdb data yet. Don't blow up } } } return(new RemoteImageInfo[] { }); }
public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var list = new List <RemoteSearchResult>(); // Either an episode number or date must be provided; and the dictionary of provider ids must be valid if ((searchInfo.IndexNumber == null && searchInfo.PremiereDate == null) || !TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds)) { return(list); } var metadataResult = await GetEpisode(searchInfo, cancellationToken).ConfigureAwait(false); if (!metadataResult.HasMetadata) { return(list); } var item = metadataResult.Item; list.Add(new RemoteSearchResult { IndexNumber = item.IndexNumber, Name = item.Name, ParentIndexNumber = item.ParentIndexNumber, PremiereDate = item.PremiereDate, ProductionYear = item.ProductionYear, ProviderIds = item.ProviderIds, SearchProviderName = Name, IndexNumberEnd = item.IndexNumberEnd }); return(list); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) { if (TvdbSeriesProvider.IsValidSeries(item.ProviderIds)) { var language = item.GetPreferredMetadataLanguage(); var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(item.ProviderIds, item.Name, item.ProductionYear, language, cancellationToken).ConfigureAwait(false); if (string.IsNullOrEmpty(seriesDataPath)) { return(new RemoteImageInfo[] { }); } var path = Path.Combine(seriesDataPath, "banners.xml"); try { return(GetImages(path, language, cancellationToken)); } catch (FileNotFoundException) { // No tvdb data yet. Don't blow up } catch (IOException) { // No tvdb data yet. Don't blow up } } return(new RemoteImageInfo[] { }); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) { var episode = (Episode)item; var series = episode.Series; var imageResult = new List <RemoteImageInfo>(); var language = item.GetPreferredMetadataLanguage(); if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { var episodeTvdbId = episode.GetProviderId(MetadataProviders.Tvdb); // Process images try { if (string.IsNullOrEmpty(episodeTvdbId)) { var episodeInfo = new EpisodeInfo { IndexNumber = episode.IndexNumber.Value, ParentIndexNumber = episode.ParentIndexNumber.Value, SeriesProviderIds = series.ProviderIds }; episodeTvdbId = await _tvDbClientManager .GetEpisodeTvdbId(episodeInfo, language, cancellationToken).ConfigureAwait(false); if (string.IsNullOrEmpty(episodeTvdbId)) { _logger.LogError("Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}", episodeInfo.ParentIndexNumber, episodeInfo.IndexNumber, series.GetProviderId(MetadataProviders.Tvdb)); return(imageResult); } } var episodeResult = await _tvDbClientManager .GetEpisodesAsync(Convert.ToInt32(episodeTvdbId), language, cancellationToken) .ConfigureAwait(false); var image = GetImageInfo(episodeResult.Data); if (image != null) { imageResult.Add(image); } } catch (TvDbServerException e) { _logger.LogError(e, "Failed to retrieve episode images for {TvDbId}", episodeTvdbId); } } return(imageResult); }
public Task <IEnumerable <RemoteSearchResult> > GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var list = new List <RemoteSearchResult>(); // The search query must either provide an episode number or date if (!searchInfo.IndexNumber.HasValue && !searchInfo.PremiereDate.HasValue) { return(Task.FromResult((IEnumerable <RemoteSearchResult>)list)); } if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds)) { var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, searchInfo.SeriesProviderIds); try { var metadataResult = FetchEpisodeData(searchInfo, seriesDataPath, cancellationToken); if (metadataResult.HasMetadata) { var item = metadataResult.Item; list.Add(new RemoteSearchResult { IndexNumber = item.IndexNumber, Name = item.Name, ParentIndexNumber = item.ParentIndexNumber, PremiereDate = item.PremiereDate, ProductionYear = item.ProductionYear, ProviderIds = item.ProviderIds, SearchProviderName = Name, IndexNumberEnd = item.IndexNumberEnd }); } } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (IOException) { // Don't fail the provider because this will just keep on going and going. } } return(Task.FromResult((IEnumerable <RemoteSearchResult>)list)); }
public async Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var result = new MetadataResult <Episode> { QueriedById = true }; if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue)) { var tvdbId = searchInfo.GetProviderId(MetadataProviders.Tvdb); try { if (string.IsNullOrEmpty(tvdbId)) { tvdbId = await _tvDbClientManager .GetEpisodeTvdbId(searchInfo, searchInfo.MetadataLanguage, cancellationToken) .ConfigureAwait(false); if (string.IsNullOrEmpty(tvdbId)) { _logger.LogError("Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}", searchInfo.ParentIndexNumber, searchInfo.IndexNumber, tvdbId); return(result); } } var episodeResult = await _tvDbClientManager.GetEpisodesAsync( Convert.ToInt32(tvdbId), searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false); result = MapEpisodeToResult(searchInfo, episodeResult.Data); } catch (TvDbServerException e) { _logger.LogError(e, "Failed to retrieve episode with id {TvDbId}", tvdbId); } } else { _logger.LogDebug("No series identity found for {EpisodeName}", searchInfo.Name); } return(result); }
public async Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var result = new MetadataResult <Episode> { QueriedById = true }; if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue)) { result = await GetEpisode(searchInfo, cancellationToken).ConfigureAwait(false); } else { _logger.LogDebug("No series identity found for {EpisodeName}", searchInfo.Name); } return(result); }
public Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) { var episode = (Episode)item; var series = episode.Series; if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { // Process images var seriesDataPath = TvdbSeriesProvider.GetSeriesDataPath(_config.ApplicationPaths, series.ProviderIds); var nodes = TvdbEpisodeProvider.Current.GetEpisodeXmlNodes(seriesDataPath, episode.GetLookupInfo()); var result = nodes.Select(i => GetImageInfo(i, cancellationToken)) .Where(i => i != null) .ToList(); return(Task.FromResult <IEnumerable <RemoteImageInfo> >(result)); } return(Task.FromResult <IEnumerable <RemoteImageInfo> >(new RemoteImageInfo[] { })); }
public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken) { var season = (Season)item; var series = season.Series; if (series == null || !season.IndexNumber.HasValue || !TvdbSeriesProvider.IsValidSeries(series.ProviderIds)) { return(new RemoteImageInfo[] { }); } var tvdbId = Convert.ToInt32(series.GetProviderId(MetadataProviders.Tvdb)); var seasonNumber = season.IndexNumber.Value; var language = item.GetPreferredMetadataLanguage(); var remoteImages = new List <RemoteImageInfo>(); var keyTypes = new[] { KeyType.Season, KeyType.Seasonwide, KeyType.Fanart }; foreach (var keyType in keyTypes) { var imageQuery = new ImagesQuery { KeyType = keyType, SubKey = seasonNumber.ToString() }; try { var imageResults = await _tvDbClientManager .GetImagesAsync(tvdbId, imageQuery, language, cancellationToken).ConfigureAwait(false); remoteImages.AddRange(GetImages(imageResults.Data, language)); } catch (TvDbServerException) { _logger.LogDebug("No images of type {KeyType} found for series {TvdbId}", keyType, tvdbId); } } return(remoteImages); }
public async Task <MetadataResult <Episode> > GetMetadata(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var result = new MetadataResult <Episode>(); result.QueriedById = true; if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds) && (searchInfo.IndexNumber.HasValue || searchInfo.PremiereDate.HasValue)) { var seriesDataPath = await TvdbSeriesProvider.Current.EnsureSeriesInfo(searchInfo.SeriesProviderIds, null, null, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false); if (string.IsNullOrEmpty(seriesDataPath)) { return(result); } try { result = FetchEpisodeData(searchInfo, seriesDataPath, cancellationToken); } catch (FileNotFoundException) { // Don't fail the provider because this will just keep on going and going. } catch (IOException) { // Don't fail the provider because this will just keep on going and going. } } else { _logger.LogDebug("No series identity found for {0}", searchInfo.Name); } return(result); }
public async Task <IEnumerable <RemoteSearchResult> > GetSearchResults(EpisodeInfo searchInfo, CancellationToken cancellationToken) { var list = new List <RemoteSearchResult>(); // The search query must either provide an episode number or date if (!searchInfo.IndexNumber.HasValue || !searchInfo.PremiereDate.HasValue) { return(list); } if (TvdbSeriesProvider.IsValidSeries(searchInfo.SeriesProviderIds)) { try { var episodeTvdbId = searchInfo.GetProviderId(MetadataProviders.Tvdb); if (string.IsNullOrEmpty(episodeTvdbId)) { searchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Tvdb.ToString(), out var seriesTvdbId); episodeTvdbId = await _tvDbClientManager .GetEpisodeTvdbId(searchInfo, searchInfo.MetadataLanguage, cancellationToken) .ConfigureAwait(false); if (string.IsNullOrEmpty(episodeTvdbId)) { _logger.LogError("Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}", searchInfo.ParentIndexNumber, searchInfo.IndexNumber, seriesTvdbId); return(list); } } var episodeResult = await _tvDbClientManager.GetEpisodesAsync(Convert.ToInt32(episodeTvdbId), searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false); var metadataResult = MapEpisodeToResult(searchInfo, episodeResult.Data); if (metadataResult.HasMetadata) { var item = metadataResult.Item; list.Add(new RemoteSearchResult { IndexNumber = item.IndexNumber, Name = item.Name, ParentIndexNumber = item.ParentIndexNumber, PremiereDate = item.PremiereDate, ProductionYear = item.ProductionYear, ProviderIds = item.ProviderIds, SearchProviderName = Name, IndexNumberEnd = item.IndexNumberEnd }); } } catch (TvDbServerException e) { _logger.LogError(e, "Failed to retrieve episode with id {TvDbId}", searchInfo.IndexNumber); } } return(list); }