using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.Movies { class ManualMovieDbImageProvider : IImageProvider { private readonly IJsonSerializer _jsonSerializer; private readonly IServerConfigurationManager _config; public ManualMovieDbImageProvider(IJsonSerializer jsonSerializer, IServerConfigurationManager config) { _jsonSerializer = jsonSerializer; _config = config; } public string Name { get { return "TheMovieDB"; } } public bool Supports(BaseItem item, ImageType imageType) { if (MovieDbImagesProvider.SupportsItem(item)) { return imageType == ImageType.Primary || imageType == ImageType.Backdrop; } return false; } public async Task> GetAvailableImages(BaseItem item, ImageType imageType, CancellationToken cancellationToken) { var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); var results = MovieDbImagesProvider.FetchImages(item, _jsonSerializer); var tmdbImageUrl = tmdbSettings.images.base_url + "original"; if (imageType == ImageType.Primary) { var sources = GetPosters(results, item); return sources.Select(i => new RemoteImageInfo { Url = tmdbImageUrl + i.file_path, CommunityRating = i.vote_average, VoteCount = i.vote_count, Width = i.width, Height = i.height, Language = i.iso_639_1, ProviderName = Name }); } if (imageType == ImageType.Backdrop) { var sources = GetBackdrops(results, item); return sources.Select(i => new RemoteImageInfo { Url = tmdbImageUrl + i.file_path, CommunityRating = i.vote_average, VoteCount = i.vote_count, Width = i.width, Height = i.height, ProviderName = Name }); } throw new ArgumentException("Unrecognized ImageType: " + imageType); } /// /// Gets the posters. /// /// The images. /// The item. /// IEnumerable{MovieDbProvider.Poster}. public IEnumerable GetPosters(MovieDbProvider.Images images, BaseItem item) { var language = _config.Configuration.PreferredMetadataLanguage; var isLanguageEn = string.Equals(language, "en", StringComparison.OrdinalIgnoreCase); var eligiblePosters = images.posters == null ? new List() : images.posters.Where(i => i.width >= _config.Configuration.MinMoviePosterWidth) .ToList(); return eligiblePosters.OrderByDescending(i => { if (string.Equals(language, i.iso_639_1, StringComparison.OrdinalIgnoreCase)) { return 3; } if (!isLanguageEn) { if (string.Equals("en", i.iso_639_1, StringComparison.OrdinalIgnoreCase)) { return 2; } } if (string.IsNullOrEmpty(i.iso_639_1)) { return isLanguageEn ? 3 : 2; } return 0; }) .ThenByDescending(i => i.vote_average) .ToList(); } /// /// Gets the backdrops. /// /// The images. /// The item. /// IEnumerable{MovieDbProvider.Backdrop}. public IEnumerable GetBackdrops(MovieDbProvider.Images images, BaseItem item) { var eligibleBackdrops = images.backdrops == null ? new List() : images.backdrops.Where(i => i.width >= _config.Configuration.MinMovieBackdropWidth) .ToList(); return eligibleBackdrops.OrderByDescending(i => i.vote_average); } } }