< Summary - Jellyfin

Information
Class: MediaBrowser.Providers.Plugins.Tmdb.BoxSets.TmdbBoxSetProvider
Assembly: MediaBrowser.Providers
File(s): /srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetProvider.cs
Line coverage
66%
Covered lines: 4
Uncovered lines: 2
Coverable lines: 6
Total lines: 144
Line coverage: 66.6%
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 7/22/2025 - 12:11:20 AM Line coverage: 66.6% (4/6) Total lines: 14310/14/2025 - 12:11:23 AM Line coverage: 66.6% (4/6) Total lines: 144

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Name()100%210%
GetImageResponse(...)100%210%

File(s)

/srv/git/jellyfin/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetProvider.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.Movies;
 10using MediaBrowser.Controller.Library;
 11using MediaBrowser.Controller.Providers;
 12using MediaBrowser.Model.Entities;
 13using MediaBrowser.Model.Providers;
 14
 15namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets
 16{
 17    /// <summary>
 18    /// BoxSet provider powered by TMDb.
 19    /// </summary>
 20    public class TmdbBoxSetProvider : IRemoteMetadataProvider<BoxSet, BoxSetInfo>
 21    {
 22        private readonly IHttpClientFactory _httpClientFactory;
 23        private readonly TmdbClientManager _tmdbClientManager;
 24        private readonly ILibraryManager _libraryManager;
 25
 26        /// <summary>
 27        /// Initializes a new instance of the <see cref="TmdbBoxSetProvider"/> class.
 28        /// </summary>
 29        /// <param name="libraryManager">The <see cref="ILibraryManager"/>.</param>
 30        /// <param name="httpClientFactory">The <see cref="IHttpClientFactory"/>.</param>
 31        /// <param name="tmdbClientManager">The <see cref="TmdbClientManager"/>.</param>
 32        public TmdbBoxSetProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager, ILibraryMan
 33        {
 2134            _httpClientFactory = httpClientFactory;
 2135            _tmdbClientManager = tmdbClientManager;
 2136            _libraryManager = libraryManager;
 2137        }
 38
 39        /// <inheritdoc />
 040        public string Name => TmdbUtils.ProviderName;
 41
 42        /// <inheritdoc />
 43        public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(BoxSetInfo searchInfo, CancellationToken can
 44        {
 45            var tmdbId = Convert.ToInt32(searchInfo.GetProviderId(MetadataProvider.Tmdb), CultureInfo.InvariantCulture);
 46            var language = searchInfo.MetadataLanguage;
 47
 48            if (tmdbId > 0)
 49            {
 50                var collection = await _tmdbClientManager.GetCollectionAsync(tmdbId, language, TmdbUtils.GetImageLanguag
 51
 52                if (collection is null)
 53                {
 54                    return Enumerable.Empty<RemoteSearchResult>();
 55                }
 56
 57                var result = new RemoteSearchResult
 58                {
 59                    Name = collection.Name,
 60                    SearchProviderName = Name
 61                };
 62
 63                if (collection.Images is not null)
 64                {
 65                    result.ImageUrl = _tmdbClientManager.GetPosterUrl(collection.PosterPath);
 66                }
 67
 68                result.SetProviderId(MetadataProvider.Tmdb, collection.Id.ToString(CultureInfo.InvariantCulture));
 69
 70                return new[] { result };
 71            }
 72
 73            var collectionSearchResults = await _tmdbClientManager.SearchCollectionAsync(searchInfo.Name, language, sear
 74
 75            var collections = new RemoteSearchResult[collectionSearchResults.Count];
 76            for (var i = 0; i < collectionSearchResults.Count; i++)
 77            {
 78                var result = collectionSearchResults[i];
 79                var collection = new RemoteSearchResult
 80                {
 81                    Name = result.Name,
 82                    SearchProviderName = Name,
 83                    ImageUrl = _tmdbClientManager.GetPosterUrl(result.PosterPath)
 84                };
 85                collection.SetProviderId(MetadataProvider.Tmdb, result.Id.ToString(CultureInfo.InvariantCulture));
 86
 87                collections[i] = collection;
 88            }
 89
 90            return collections;
 91        }
 92
 93        /// <inheritdoc />
 94        public async Task<MetadataResult<BoxSet>> GetMetadata(BoxSetInfo info, CancellationToken cancellationToken)
 95        {
 96            var tmdbId = Convert.ToInt32(info.GetProviderId(MetadataProvider.Tmdb), CultureInfo.InvariantCulture);
 97            var language = info.MetadataLanguage;
 98
 99            // We don't already have an Id, need to fetch it
 100            if (tmdbId <= 0)
 101            {
 102                // ParseName is required here.
 103                // Caller provides the filename with extension stripped and NOT the parsed filename
 104                var parsedName = _libraryManager.ParseName(info.Name);
 105                var cleanedName = TmdbUtils.CleanName(parsedName.Name);
 106                var searchResults = await _tmdbClientManager.SearchCollectionAsync(cleanedName, language, info.MetadataC
 107
 108                if (searchResults is not null && searchResults.Count > 0)
 109                {
 110                    tmdbId = searchResults[0].Id;
 111                }
 112            }
 113
 114            var result = new MetadataResult<BoxSet>();
 115
 116            if (tmdbId > 0)
 117            {
 118                var collection = await _tmdbClientManager.GetCollectionAsync(tmdbId, language, TmdbUtils.GetImageLanguag
 119
 120                if (collection is not null)
 121                {
 122                    var item = new BoxSet
 123                    {
 124                        Name = collection.Name,
 125                        Overview = collection.Overview
 126                    };
 127
 128                    item.SetProviderId(MetadataProvider.Tmdb, collection.Id.ToString(CultureInfo.InvariantCulture));
 129
 130                    result.HasMetadata = true;
 131                    result.Item = item;
 132                }
 133            }
 134
 135            return result;
 136        }
 137
 138        /// <inheritdoc />
 139        public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
 140        {
 0141            return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);
 142        }
 143    }
 144}