コード例 #1
0
        private async Task <RemoteImageInfo?> GetImageFromSeriesData(Series series, string personName, CancellationToken cancellationToken)
        {
            var tvdbId = Convert.ToInt32(series.GetProviderId(TvdbPlugin.ProviderId), CultureInfo.InvariantCulture);

            try
            {
                var actorsResult = await _tvdbClientManager
                                   .GetActorsAsync(tvdbId, series.GetPreferredMetadataLanguage(), cancellationToken)
                                   .ConfigureAwait(false);

                var actor = actorsResult.Data.FirstOrDefault(a =>
                                                             string.Equals(a.Name, personName, StringComparison.OrdinalIgnoreCase) &&
                                                             !string.IsNullOrEmpty(a.Image));
                if (actor == null)
                {
                    return(null);
                }

                return(new RemoteImageInfo
                {
                    Url = TvdbUtils.BannerUrl + actor.Image,
                    Type = ImageType.Primary,
                    ProviderName = Name
                });
            }
            catch (TvDbServerException e)
            {
                _logger.LogError(e, "Failed to retrieve actor {ActorName} from series {SeriesTvdbId}", personName, tvdbId);
                return(null);
            }
        }
コード例 #2
0
        private async Task FetchSeriesData(MetadataResult <Series> result, string metadataLanguage, Dictionary <string, string> seriesProviderIds, CancellationToken cancellationToken)
        {
            var series = result.Item;

            if (seriesProviderIds.TryGetValue(TvdbPlugin.ProviderName, out var tvdbId) && !string.IsNullOrEmpty(tvdbId))
            {
                series.SetProviderId(TvdbPlugin.ProviderName, tvdbId);
            }

            if (seriesProviderIds.TryGetValue(MetadataProvider.Imdb.ToString(), out var imdbId) && !string.IsNullOrEmpty(imdbId))
            {
                series.SetProviderId(MetadataProvider.Imdb, imdbId);
                tvdbId = await GetSeriesByRemoteId(
                    imdbId,
                    MetadataProvider.Imdb.ToString(),
                    metadataLanguage,
                    cancellationToken).ConfigureAwait(false);
            }

            if (seriesProviderIds.TryGetValue(MetadataProvider.Zap2It.ToString(), out var zap2It) && !string.IsNullOrEmpty(zap2It))
            {
                series.SetProviderId(MetadataProvider.Zap2It, zap2It);
                tvdbId = await GetSeriesByRemoteId(
                    zap2It,
                    MetadataProvider.Zap2It.ToString(),
                    metadataLanguage,
                    cancellationToken).ConfigureAwait(false);
            }

            try
            {
                var seriesResult =
                    await _tvdbClientManager
                    .GetSeriesByIdAsync(Convert.ToInt32(tvdbId, CultureInfo.InvariantCulture), metadataLanguage, cancellationToken)
                    .ConfigureAwait(false);

                MapSeriesToResult(result, seriesResult.Data, metadataLanguage);
            }
            catch (TvDbServerException e)
            {
                _logger.LogError(e, "Failed to retrieve series with id {TvdbId}", tvdbId);
                return;
            }

            cancellationToken.ThrowIfCancellationRequested();

            result.ResetPeople();

            try
            {
                var actorsResult = await _tvdbClientManager
                                   .GetActorsAsync(Convert.ToInt32(tvdbId, CultureInfo.InvariantCulture), metadataLanguage, cancellationToken).ConfigureAwait(false);

                MapActorsToResult(result, actorsResult.Data);
            }
            catch (TvDbServerException e)
            {
                _logger.LogError(e, "Failed to retrieve actors for series {TvdbId}", tvdbId);
            }
        }