| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 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.Entities.Movies;using MediaBrowser.Controller.Providers;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Providers;namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets{    /// <summary>    /// BoxSet image provider powered by TMDb.    /// </summary>    public class TmdbBoxSetImageProvider : IRemoteImageProvider, IHasOrder    {        private readonly IHttpClientFactory _httpClientFactory;        private readonly TmdbClientManager _tmdbClientManager;        /// <summary>        /// Initializes a new instance of the <see cref="TmdbBoxSetImageProvider"/> class.        /// </summary>        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/>.</param>        /// <param name="tmdbClientManager">The <see cref="TmdbClientManager"/>.</param>        public TmdbBoxSetImageProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager)        {            _httpClientFactory = httpClientFactory;            _tmdbClientManager = tmdbClientManager;        }        /// <inheritdoc />        public string Name => TmdbUtils.ProviderName;        /// <inheritdoc />        public int Order => 0;        /// <inheritdoc />        public bool Supports(BaseItem item)        {            return item is BoxSet;        }        /// <inheritdoc />        public IEnumerable<ImageType> GetSupportedImages(BaseItem item)        {            return new ImageType[]            {                ImageType.Primary,                ImageType.Backdrop            };        }        /// <inheritdoc />        public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)        {            var tmdbId = Convert.ToInt32(item.GetProviderId(MetadataProvider.Tmdb), CultureInfo.InvariantCulture);            if (tmdbId <= 0)            {                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 collection = await _tmdbClientManager.GetCollectionAsync(tmdbId, null, null, cancellationToken).ConfigureAwait(false);            if (collection?.Images is null)            {                return Enumerable.Empty<RemoteImageInfo>();            }            var posters = collection.Images.Posters;            var backdrops = collection.Images.Backdrops;            var remoteImages = new List<RemoteImageInfo>(posters.Count + backdrops.Count);            remoteImages.AddRange(_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language));            remoteImages.AddRange(_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language));            return remoteImages;        }        /// <inheritdoc />        public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)        {            return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);        }    }}
 |