Exemple #1
0
        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))
            {
                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 episode     = (Episode)item;
            var series      = episode.Series;
            var imageResult = new List <RemoteImageInfo>();
            var language    = item.GetPreferredMetadataLanguage();

            if (series != null && TvdbSeriesProvider.IsValidSeries(series.ProviderIds))
            {
                // Process images
                try
                {
                    string episodeTvdbId = null;

                    if (episode.IndexNumber.HasValue && episode.ParentIndexNumber.HasValue)
                    {
                        var episodeInfo = new EpisodeInfo
                        {
                            IndexNumber        = episode.IndexNumber.Value,
                            ParentIndexNumber  = episode.ParentIndexNumber.Value,
                            SeriesProviderIds  = series.ProviderIds,
                            SeriesDisplayOrder = series.DisplayOrder
                        };

                        episodeTvdbId = await _tvdbClientManager
                                        .GetEpisodeTvdbId(episodeInfo, language, cancellationToken).ConfigureAwait(false);
                    }

                    if (string.IsNullOrEmpty(episodeTvdbId))
                    {
                        _logger.LogError(
                            "Episode {SeasonNumber}x{EpisodeNumber} not found for series {SeriesTvdbId}",
                            episode.ParentIndexNumber,
                            episode.IndexNumber,
                            series.GetProviderId(MetadataProvider.Tvdb));
                        return(imageResult);
                    }

                    var episodeResult =
                        await _tvdbClientManager
                        .GetEpisodesAsync(Convert.ToInt32(episodeTvdbId, CultureInfo.InvariantCulture), 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 series {TvDbId}", series.GetProviderId(MetadataProvider.Tvdb));
                }
            }

            return(imageResult);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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(Array.Empty <RemoteImageInfo>());
            }

            var tvdbId       = Convert.ToInt32(series.GetProviderId(MetadataProvider.Tvdb));
            var seasonNumber = season.IndexNumber.Value;
            var language     = item.GetPreferredMetadataLanguage();
            var remoteImages = new List <RemoteImageInfo>();

            var keyTypes = _tvdbClientManager.GetImageKeyTypesForSeasonAsync(tvdbId, language, cancellationToken).ConfigureAwait(false);

            await 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);
        }
        /// <inheritdoc />
        public async Task <IEnumerable <RemoteImageInfo> > GetImages(BaseItem item, CancellationToken cancellationToken)
        {
            var seriesWithPerson = _libraryManager.GetItemList(new InternalItemsQuery
            {
                IncludeItemTypes = new[] { nameof(Series) },
                PersonIds        = new[] { item.Id },
                DtoOptions       = new DtoOptions(false)
                {
                    EnableImages = false
                }
            }).Cast <Series>()
                                   .Where(i => TvdbSeriesProvider.IsValidSeries(i.ProviderIds))
                                   .ToList();

            var infos = (await Task.WhenAll(seriesWithPerson.Select(async i =>
                                                                    await GetImageFromSeriesData(i, item.Name, cancellationToken).ConfigureAwait(false)))
                         .ConfigureAwait(false))
                        .Where(i => i != null)
                        .Take(1);

            return(infos);
        }