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); } }
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); } }