< Summary - Jellyfin

Information
Class: MediaBrowser.Providers.Plugins.Tmdb.TV.TmdbEpisodeImageProvider
Assembly: MediaBrowser.Providers
File(s): /srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.cs
Line coverage
14%
Covered lines: 4
Uncovered lines: 24
Coverable lines: 28
Total lines: 95
Line coverage: 14.2%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 5/11/2026 - 12:15:59 AM Line coverage: 14.8% (4/27) Branch coverage: 0% (0/14) Total lines: 9610/29/2026 - 12:17:11 AM Line coverage: 14.2% (4/28) Branch coverage: 0% (0/12) Total lines: 95 5/11/2026 - 12:15:59 AM Line coverage: 14.8% (4/27) Branch coverage: 0% (0/14) Total lines: 9610/29/2026 - 12:17:11 AM Line coverage: 14.2% (4/28) Branch coverage: 0% (0/12) Total lines: 95

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

File(s)

/srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.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.Providers;
 9using MediaBrowser.Model.Entities;
 10using MediaBrowser.Model.Providers;
 11
 12namespace MediaBrowser.Providers.Plugins.Tmdb.TV
 13{
 14    /// <summary>
 15    /// TV episode image provider powered by TheMovieDb.
 16    /// </summary>
 17    public class TmdbEpisodeImageProvider : IRemoteImageProvider, IHasOrder
 18    {
 19        private readonly IHttpClientFactory _httpClientFactory;
 20        private readonly TmdbClientManager _tmdbClientManager;
 21
 22        /// <summary>
 23        /// Initializes a new instance of the <see cref="TmdbEpisodeImageProvider"/> class.
 24        /// </summary>
 25        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/>.</param>
 26        /// <param name="tmdbClientManager">The <see cref="TmdbClientManager"/>.</param>
 27        public TmdbEpisodeImageProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager)
 28        {
 2729            _httpClientFactory = httpClientFactory;
 2730            _tmdbClientManager = tmdbClientManager;
 2731        }
 32
 33        /// <inheritdoc />
 034        public int Order => 1;
 35
 36        /// <inheritdoc />
 037        public string Name => TmdbUtils.ProviderName;
 38
 39        /// <inheritdoc />
 40        public bool Supports(BaseItem item)
 41        {
 10742            return item is Controller.Entities.TV.Episode;
 43        }
 44
 45        /// <inheritdoc />
 46        public IEnumerable<ImageType> GetSupportedImages(BaseItem item)
 47        {
 048            yield return ImageType.Primary;
 049        }
 50
 51        /// <inheritdoc />
 52        public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
 53        {
 054            var episode = (Controller.Entities.TV.Episode)item;
 055            var series = episode.Series;
 56
 057            var seriesTmdbId = 0;
 58
 059            if (series?.TryGetTmdbId(out seriesTmdbId) != true)
 60            {
 061                return Enumerable.Empty<RemoteImageInfo>();
 62            }
 63
 064            var seasonNumber = episode.ParentIndexNumber ?? 1;
 065            var episodeNumber = episode.IndexNumber;
 66
 067            if (!episodeNumber.HasValue)
 68            {
 069                return Enumerable.Empty<RemoteImageInfo>();
 70            }
 71
 072            var episodeGroup = series.GetProviderId(TmdbEpisodeGroupId.ProviderKey);
 073            var language = item.GetPreferredMetadataLanguage();
 74
 75            // TODO use image languages if All Languages isn't toggled, but there's currently no way to get that value i
 076            var episodeResult = await _tmdbClientManager
 077                .GetEpisodeAsync(seriesTmdbId, seasonNumber, episodeNumber.Value, episodeGroup, null, null, null, cancel
 078                .ConfigureAwait(false);
 79
 080            var stills = episodeResult?.Images?.Stills;
 081            if (stills is null)
 82            {
 083                return Enumerable.Empty<RemoteImageInfo>();
 84            }
 85
 086            return _tmdbClientManager.ConvertStillsToRemoteImageInfo(stills, language);
 087        }
 88
 89        /// <inheritdoc />
 90        public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
 91        {
 092            return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);
 93        }
 94    }
 95}