#pragma warning disable CS1591
using System ;
using System.Collections.Generic ;
using System.Globalization ;
using System.Linq ;
using System.Net.Http ;
using System.Threading ;
using System.Threading.Tasks ;
using MediaBrowser.Common.Net ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Providers ;
using MediaBrowser.Model.Dto ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Model.Extensions ;
using MediaBrowser.Model.Providers ;
namespace MediaBrowser.Providers.Plugins.Tmdb.TV
{
public class TmdbEpisodeImageProvider : IRemoteImageProvider , IHasOrder
{
private readonly IHttpClientFactory _httpClientFactory ;
private readonly TmdbClientManager _tmdbClientManager ;
public TmdbEpisodeImageProvider ( IHttpClientFactory httpClientFactory , TmdbClientManager tmdbClientManager )
{
_httpClientFactory = httpClientFactory ;
_tmdbClientManager = tmdbClientManager ;
}
// After TheTvDb
public int Order = > 1 ;
public string Name = > TmdbUtils . ProviderName ;
public IEnumerable < ImageType > GetSupportedImages ( BaseItem item )
{
return new List < ImageType >
{
ImageType . Primary
} ;
}
public async Task < IEnumerable < RemoteImageInfo > > GetImages ( BaseItem item , CancellationToken cancellationToken )
{
var episode = ( Controller . Entities . TV . Episode ) item ;
var series = episode . Series ;
var seriesTmdbId = Convert . ToInt32 ( series ? . GetProviderId ( MetadataProvider . Tmdb ) , CultureInfo . InvariantCulture ) ;
if ( seriesTmdbId < = 0 )
{
return Enumerable . Empty < RemoteImageInfo > ( ) ;
}
var seasonNumber = episode . ParentIndexNumber ;
var episodeNumber = episode . IndexNumber ;
if ( ! seasonNumber . HasValue | | ! episodeNumber . HasValue )
{
return Enumerable . Empty < RemoteImageInfo > ( ) ;
}
var language = item . GetPreferredMetadataLanguage ( ) ;
// TODO use image languages if All Languages isn't toggled, but there's currently no way to get that value in here
var episodeResult = await _tmdbClientManager
. GetEpisodeAsync ( seriesTmdbId , seasonNumber . Value , episodeNumber . Value , series . DisplayOrder , null , null , cancellationToken )
. ConfigureAwait ( false ) ;
var stills = episodeResult ? . Images ? . Stills ;
if ( stills = = null )
{
return Enumerable . Empty < RemoteImageInfo > ( ) ;
}
var remoteImages = new RemoteImageInfo [ stills . Count ] ;
for ( var i = 0 ; i < stills . Count ; i + + )
{
var image = stills [ i ] ;
remoteImages [ i ] = new RemoteImageInfo
{
Url = _tmdbClientManager . GetStillUrl ( image . FilePath ) ,
CommunityRating = image . VoteAverage ,
VoteCount = image . VoteCount ,
Width = image . Width ,
Height = image . Height ,
Language = TmdbUtils . AdjustImageLanguage ( image . Iso_639_1 , language ) ,
ProviderName = Name ,
Type = ImageType . Primary ,
RatingType = RatingType . Score
} ;
}
return remoteImages . OrderByLanguageDescending ( language ) ;
}
public Task < HttpResponseMessage > GetImageResponse ( string url , CancellationToken cancellationToken )
{
return _httpClientFactory . CreateClient ( NamedClient . Default ) . GetAsync ( url , cancellationToken ) ;
}
public bool Supports ( BaseItem item )
{
return item is Controller . Entities . TV . Episode ;
}
}
}