< Summary - Jellyfin

Information
Class: MediaBrowser.Providers.Plugins.Tmdb.Movies.TmdbMovieImageProvider
Assembly: MediaBrowser.Providers
File(s): /srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieImageProvider.cs
Line coverage
30%
Covered lines: 4
Uncovered lines: 9
Coverable lines: 13
Total lines: 112
Line coverage: 30.7%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Order()100%210%
get_Name()100%210%
Supports(...)50%22100%
GetSupportedImages(...)100%210%
GetImageResponse(...)100%210%

File(s)

/srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieImageProvider.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Globalization;
 4using System.Linq;
 5using System.Net.Http;
 6using System.Threading;
 7using System.Threading.Tasks;
 8using MediaBrowser.Common.Net;
 9using MediaBrowser.Controller.Entities;
 10using MediaBrowser.Controller.Entities.Movies;
 11using MediaBrowser.Controller.Providers;
 12using MediaBrowser.Model.Entities;
 13using MediaBrowser.Model.Providers;
 14using TMDbLib.Objects.Find;
 15
 16namespace MediaBrowser.Providers.Plugins.Tmdb.Movies
 17{
 18    /// <summary>
 19    /// Movie image provider powered by TMDb.
 20    /// </summary>
 21    public class TmdbMovieImageProvider : IRemoteImageProvider, IHasOrder
 22    {
 23        private readonly IHttpClientFactory _httpClientFactory;
 24        private readonly TmdbClientManager _tmdbClientManager;
 25
 26        /// <summary>
 27        /// Initializes a new instance of the <see cref="TmdbMovieImageProvider"/> class.
 28        /// </summary>
 29        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/>.</param>
 30        /// <param name="tmdbClientManager">The <see cref="TmdbClientManager"/>.</param>
 31        public TmdbMovieImageProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager)
 32        {
 2233            _httpClientFactory = httpClientFactory;
 2234            _tmdbClientManager = tmdbClientManager;
 2235        }
 36
 37        /// <inheritdoc />
 038        public int Order => 0;
 39
 40        /// <inheritdoc />
 041        public string Name => TmdbUtils.ProviderName;
 42
 43        /// <inheritdoc />
 44        public bool Supports(BaseItem item)
 45        {
 4646            return item is Movie || item is Trailer;
 47        }
 48
 49        /// <inheritdoc />
 50        public IEnumerable<ImageType> GetSupportedImages(BaseItem item) =>
 051        [
 052            ImageType.Primary,
 053            ImageType.Backdrop,
 054            ImageType.Logo,
 055            ImageType.Thumb
 056        ];
 57
 58        /// <inheritdoc />
 59        public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
 60        {
 61            var language = item.GetPreferredMetadataLanguage();
 62
 63            var movieTmdbId = Convert.ToInt32(item.GetProviderId(MetadataProvider.Tmdb), CultureInfo.InvariantCulture);
 64            if (movieTmdbId <= 0)
 65            {
 66                var movieImdbId = item.GetProviderId(MetadataProvider.Imdb);
 67                if (string.IsNullOrEmpty(movieImdbId))
 68                {
 69                    return Enumerable.Empty<RemoteImageInfo>();
 70                }
 71
 72                var movieResult = await _tmdbClientManager.FindByExternalIdAsync(movieImdbId, FindExternalSource.Imdb, l
 73                if (movieResult?.MovieResults is not null && movieResult.MovieResults.Count > 0)
 74                {
 75                    movieTmdbId = movieResult.MovieResults[0].Id;
 76                }
 77            }
 78
 79            if (movieTmdbId <= 0)
 80            {
 81                return Enumerable.Empty<RemoteImageInfo>();
 82            }
 83
 84            // TODO use image languages if All Languages isn't toggled, but there's currently no way to get that value i
 85            var movie = await _tmdbClientManager
 86                .GetMovieAsync(movieTmdbId, null, null, cancellationToken)
 87                .ConfigureAwait(false);
 88
 89            if (movie?.Images is null)
 90            {
 91                return Enumerable.Empty<RemoteImageInfo>();
 92            }
 93
 94            var posters = movie.Images.Posters;
 95            var backdrops = movie.Images.Backdrops;
 96            var logos = movie.Images.Logos;
 97            var remoteImages = new List<RemoteImageInfo>(posters.Count + backdrops.Count + logos.Count);
 98
 99            remoteImages.AddRange(_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language));
 100            remoteImages.AddRange(_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language));
 101            remoteImages.AddRange(_tmdbClientManager.ConvertLogosToRemoteImageInfo(logos, language));
 102
 103            return remoteImages;
 104        }
 105
 106        /// <inheritdoc />
 107        public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
 108        {
 0109            return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);
 110        }
 111    }
 112}