< 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
57%
Covered lines: 4
Uncovered lines: 3
Coverable lines: 7
Total lines: 96
Line coverage: 57.1%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
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(...)100%11100%
GetImageResponse(...)100%210%

File(s)

/srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbEpisodeImageProvider.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.Providers;
 11using MediaBrowser.Model.Entities;
 12using MediaBrowser.Model.Providers;
 13
 14namespace MediaBrowser.Providers.Plugins.Tmdb.TV
 15{
 16    /// <summary>
 17    /// TV episode image provider powered by TheMovieDb.
 18    /// </summary>
 19    public class TmdbEpisodeImageProvider : 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="TmdbEpisodeImageProvider"/> class.
 26        /// </summary>
 27        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/>.</param>
 28        /// <param name="tmdbClientManager">The <see cref="TmdbClientManager"/>.</param>
 29        public TmdbEpisodeImageProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager)
 30        {
 2231            _httpClientFactory = httpClientFactory;
 2232            _tmdbClientManager = tmdbClientManager;
 2233        }
 34
 35        /// <inheritdoc />
 036        public int Order => 1;
 37
 38        /// <inheritdoc />
 039        public string Name => TmdbUtils.ProviderName;
 40
 41        /// <inheritdoc />
 42        public bool Supports(BaseItem item)
 43        {
 4644            return item is Controller.Entities.TV.Episode;
 45        }
 46
 47        /// <inheritdoc />
 48        public IEnumerable<ImageType> GetSupportedImages(BaseItem item)
 49        {
 50            yield return ImageType.Primary;
 51        }
 52
 53        /// <inheritdoc />
 54        public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken)
 55        {
 56            var episode = (Controller.Entities.TV.Episode)item;
 57            var series = episode.Series;
 58
 59            var seriesTmdbId = Convert.ToInt32(series?.GetProviderId(MetadataProvider.Tmdb), CultureInfo.InvariantCultur
 60
 61            if (series is null || seriesTmdbId <= 0)
 62            {
 63                return Enumerable.Empty<RemoteImageInfo>();
 64            }
 65
 66            var seasonNumber = episode.ParentIndexNumber;
 67            var episodeNumber = episode.IndexNumber;
 68
 69            if (!seasonNumber.HasValue || !episodeNumber.HasValue)
 70            {
 71                return Enumerable.Empty<RemoteImageInfo>();
 72            }
 73
 74            var language = item.GetPreferredMetadataLanguage();
 75
 76            // TODO use image languages if All Languages isn't toggled, but there's currently no way to get that value i
 77            var episodeResult = await _tmdbClientManager
 78                .GetEpisodeAsync(seriesTmdbId, seasonNumber.Value, episodeNumber.Value, series.DisplayOrder, null, null,
 79                .ConfigureAwait(false);
 80
 81            var stills = episodeResult?.Images?.Stills;
 82            if (stills is null)
 83            {
 84                return Enumerable.Empty<RemoteImageInfo>();
 85            }
 86
 87            return _tmdbClientManager.ConvertStillsToRemoteImageInfo(stills, language);
 88        }
 89
 90        /// <inheritdoc />
 91        public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
 92        {
 093            return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);
 94        }
 95    }
 96}