< 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
9%
Covered lines: 4
Uncovered lines: 38
Coverable lines: 42
Total lines: 122
Line coverage: 9.5%
Branch coverage
3%
Covered branches: 1
Total branches: 30
Branch coverage: 3.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 5/16/2026 - 12:15:55 AM Line coverage: 9.5% (4/42) Branch coverage: 2.7% (1/36) Total lines: 1246/3/2026 - 12:16:02 AM Line coverage: 9.5% (4/42) Branch coverage: 3.3% (1/30) Total lines: 12410/29/2026 - 12:17:11 AM Line coverage: 9.5% (4/42) Branch coverage: 3.3% (1/30) Total lines: 122 5/16/2026 - 12:15:55 AM Line coverage: 9.5% (4/42) Branch coverage: 2.7% (1/36) Total lines: 1246/3/2026 - 12:16:02 AM Line coverage: 9.5% (4/42) Branch coverage: 3.3% (1/30) Total lines: 12410/29/2026 - 12:17:11 AM Line coverage: 9.5% (4/42) Branch coverage: 3.3% (1/30) Total lines: 122

Coverage delta

Coverage delta 1 -1

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%
GetImages()0%812280%
GetImageResponse(...)100%210%

File(s)

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

#LineLine coverage
 1using System.Collections.Generic;
 2using System.Linq;
 3using System.Net.Http;
 4using System.Threading;
 5using System.Threading.Tasks;
 6using MediaBrowser.Common.Net;
 7using MediaBrowser.Controller.Entities;
 8using MediaBrowser.Controller.Entities.Movies;
 9using MediaBrowser.Controller.Providers;
 10using MediaBrowser.Model.Entities;
 11using MediaBrowser.Model.Providers;
 12using TMDbLib.Objects.Find;
 13
 14namespace MediaBrowser.Providers.Plugins.Tmdb.Movies
 15{
 16    /// <summary>
 17    /// Movie image provider powered by TMDb.
 18    /// </summary>
 19    public class TmdbMovieImageProvider : IRemoteImageProvider, IHasOrder
 20    {
 21        private readonly IHttpClientFactory _httpClientFactory;
 22        private readonly TmdbClientManager _tmdbClientManager;
 23
 24        /// <summary>
 25        /// Initializes a new instance of the <see cref="TmdbMovieImageProvider"/> class.
 26        /// </summary>
 27        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/>.</param>
 28        /// <param name="tmdbClientManager">The <see cref="TmdbClientManager"/>.</param>
 29        public TmdbMovieImageProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager)
 30        {
 2731            _httpClientFactory = httpClientFactory;
 2732            _tmdbClientManager = tmdbClientManager;
 2733        }
 34
 35        /// <inheritdoc />
 036        public int Order => 0;
 37
 38        /// <inheritdoc />
 039        public string Name => TmdbUtils.ProviderName;
 40
 41        /// <inheritdoc />
 42        public bool Supports(BaseItem item)
 43        {
 10744            return item is Movie || item is Trailer;
 45        }
 46
 47        /// <inheritdoc />
 48        public IEnumerable<ImageType> GetSupportedImages(BaseItem item) =>
 049        [
 050            ImageType.Primary,
 051            ImageType.Backdrop,
 052            ImageType.Logo,
 053            ImageType.Thumb
 054        ];
 55
 56        /// <inheritdoc />
 57        public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
 58        {
 059            var language = item.GetPreferredMetadataLanguage();
 060            var countryCode = item.GetPreferredMetadataCountryCode();
 61
 062            item.TryGetTmdbId(out var movieTmdbId);
 063            if (movieTmdbId <= 0)
 64            {
 065                var movieImdbId = item.GetProviderId(MetadataProvider.Imdb);
 066                if (string.IsNullOrEmpty(movieImdbId))
 67                {
 068                    return Enumerable.Empty<RemoteImageInfo>();
 69                }
 70
 071                var movieResult = await _tmdbClientManager.FindByExternalIdAsync(movieImdbId, FindExternalSource.Imdb, l
 072                if (movieResult?.MovieResults is not null && movieResult.MovieResults.Count > 0)
 73                {
 074                    movieTmdbId = movieResult.MovieResults[0].Id;
 75                }
 76            }
 77
 078            if (movieTmdbId <= 0)
 79            {
 080                return [];
 81            }
 82
 83            // TODO use image languages if All Languages isn't toggled, but there's currently no way to get that value i
 084            var movie = await _tmdbClientManager
 085                .GetMovieAsync(movieTmdbId, null, null, null, cancellationToken)
 086                .ConfigureAwait(false);
 87
 088            if (movie?.Images is null)
 89            {
 090                return [];
 91            }
 92
 093            var posters = movie.Images.Posters;
 094            var backdrops = movie.Images.Backdrops;
 095            var logos = movie.Images.Logos;
 096            var remoteImages = new List<RemoteImageInfo>((posters?.Count ?? 0) + (backdrops?.Count ?? 0) + (logos?.Count
 97
 098            if (posters is not null)
 99            {
 0100                remoteImages.AddRange(_tmdbClientManager.ConvertPostersToRemoteImageInfo(posters, language));
 101            }
 102
 0103            if (backdrops is not null)
 104            {
 0105                remoteImages.AddRange(_tmdbClientManager.ConvertBackdropsToRemoteImageInfo(backdrops, language));
 106            }
 107
 0108            if (logos is not null)
 109            {
 0110                remoteImages.AddRange(_tmdbClientManager.ConvertLogosToRemoteImageInfo(logos, language));
 111            }
 112
 0113            return remoteImages;
 0114        }
 115
 116        /// <inheritdoc />
 117        public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
 118        {
 0119            return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);
 120        }
 121    }
 122}