< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Library.Resolvers.TV.SeasonResolver
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs
Line coverage
23%
Covered lines: 10
Uncovered lines: 32
Coverable lines: 42
Total lines: 100
Line coverage: 23.8%
Branch coverage
9%
Covered branches: 2
Total branches: 22
Branch coverage: 9%
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%
Resolve(...)9.09%425.54225.88%

File(s)

/srv/git/jellyfin/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs

#LineLine coverage
 1#nullable disable
 2
 3using System.Globalization;
 4using Emby.Naming.Common;
 5using Emby.Naming.TV;
 6using MediaBrowser.Controller.Entities.TV;
 7using MediaBrowser.Controller.Library;
 8using MediaBrowser.Model.Globalization;
 9using Microsoft.Extensions.Logging;
 10
 11namespace Emby.Server.Implementations.Library.Resolvers.TV
 12{
 13    /// <summary>
 14    /// Class SeasonResolver.
 15    /// </summary>
 16    public class SeasonResolver : GenericFolderResolver<Season>
 17    {
 18        private readonly ILocalizationManager _localization;
 19        private readonly ILogger<SeasonResolver> _logger;
 20        private readonly NamingOptions _namingOptions;
 21
 22        /// <summary>
 23        /// Initializes a new instance of the <see cref="SeasonResolver"/> class.
 24        /// </summary>
 25        /// <param name="namingOptions">The naming options.</param>
 26        /// <param name="localization">The localization.</param>
 27        /// <param name="logger">The logger.</param>
 2228        public SeasonResolver(
 2229            NamingOptions namingOptions,
 2230            ILocalizationManager localization,
 2231            ILogger<SeasonResolver> logger)
 32        {
 2233            _namingOptions = namingOptions;
 2234            _localization = localization;
 2235            _logger = logger;
 2236        }
 37
 38        /// <summary>
 39        /// Resolves the specified args.
 40        /// </summary>
 41        /// <param name="args">The args.</param>
 42        /// <returns>Season.</returns>
 43        protected override Season Resolve(ItemResolveArgs args)
 44        {
 345            if (args.Parent is Series series && args.IsDirectory)
 46            {
 047                var namingOptions = _namingOptions;
 48
 049                var path = args.Path;
 50
 051                var seasonParserResult = SeasonPathParser.Parse(path, true, true);
 52
 053                var season = new Season
 054                {
 055                    IndexNumber = seasonParserResult.SeasonNumber,
 056                    SeriesId = series.Id,
 057                    SeriesName = series.Name,
 058                    Path = seasonParserResult.IsSeasonFolder ? path : null
 059                };
 60
 061                if (!season.IndexNumber.HasValue || !seasonParserResult.IsSeasonFolder)
 62                {
 063                    var resolver = new Naming.TV.EpisodeResolver(namingOptions);
 64
 065                    var folderName = System.IO.Path.GetFileName(path);
 066                    var testPath = @"\\test\" + folderName;
 67
 068                    var episodeInfo = resolver.Resolve(testPath, true);
 69
 070                    if (episodeInfo?.EpisodeNumber is not null && episodeInfo.SeasonNumber.HasValue)
 71                    {
 072                        _logger.LogDebug(
 073                            "Found folder underneath series with episode number: {0}. Season {1}. Episode {2}",
 074                            path,
 075                            episodeInfo.SeasonNumber.Value,
 076                            episodeInfo.EpisodeNumber.Value);
 77
 078                        return null;
 79                    }
 80                }
 81
 082                if (season.IndexNumber.HasValue && string.IsNullOrEmpty(season.Name))
 83                {
 084                    var seasonNumber = season.IndexNumber.Value;
 085                    season.Name = seasonNumber == 0 ?
 086                        args.LibraryOptions.SeasonZeroDisplayName :
 087                        string.Format(
 088                            CultureInfo.InvariantCulture,
 089                            _localization.GetLocalizedString("NameSeasonNumber"),
 090                            seasonNumber,
 091                            args.LibraryOptions.PreferredMetadataLanguage);
 92                }
 93
 094                return season;
 95            }
 96
 397            return null;
 98        }
 99    }
 100}