< Summary - Jellyfin

Information
Class: Emby.Server.Implementations.Library.Resolvers.TV.EpisodeResolver
Assembly: Emby.Server.Implementations
File(s): /srv/git/jellyfin/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs
Line coverage
82%
Covered lines: 19
Uncovered lines: 4
Coverable lines: 23
Total lines: 90
Line coverage: 82.6%
Branch coverage
75%
Covered branches: 21
Total branches: 28
Branch coverage: 75%
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(...)75%38.582876.19%

File(s)

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

#LineLine coverage
 1#nullable disable
 2
 3using System;
 4using System.Linq;
 5using Emby.Naming.Common;
 6using Jellyfin.Data.Enums;
 7using MediaBrowser.Controller.Entities.TV;
 8using MediaBrowser.Controller.Library;
 9using MediaBrowser.Controller.Providers;
 10using MediaBrowser.Model.Entities;
 11using Microsoft.Extensions.Logging;
 12
 13namespace Emby.Server.Implementations.Library.Resolvers.TV
 14{
 15    /// <summary>
 16    /// Class EpisodeResolver.
 17    /// </summary>
 18    public class EpisodeResolver : BaseVideoResolver<Episode>
 19    {
 20        /// <summary>
 21        /// Initializes a new instance of the <see cref="EpisodeResolver"/> class.
 22        /// </summary>
 23        /// <param name="logger">The logger.</param>
 24        /// <param name="namingOptions">The naming options.</param>
 25        /// <param name="directoryService">The directory service.</param>
 26        public EpisodeResolver(ILogger<EpisodeResolver> logger, NamingOptions namingOptions, IDirectoryService directory
 2427            : base(logger, namingOptions, directoryService)
 28        {
 2429        }
 30
 31        /// <summary>
 32        /// Resolves the specified args.
 33        /// </summary>
 34        /// <param name="args">The args.</param>
 35        /// <returns>Episode.</returns>
 36        protected override Episode Resolve(ItemResolveArgs args)
 37        {
 538            var parent = args.Parent;
 39
 540            if (parent is null)
 41            {
 042                return null;
 43            }
 44
 45            // Just in case the user decided to nest episodes.
 46            // Not officially supported but in some cases we can handle it.
 47
 548            var season = parent as Season ?? parent.GetParents().OfType<Season>().FirstOrDefault();
 49
 50            // If the parent is a Season or Series and the parent is not an extras folder, then this is an Episode if th
 51            // Also handle flat tv folders
 552            if (season is not null
 553                || args.GetCollectionType() == CollectionType.tvshows
 554                || args.HasParent<Series>())
 55            {
 256                var episode = ResolveVideo<Episode>(args, false);
 57
 58                // Ignore extras
 259                if (episode is null || episode.ExtraType is not null)
 60                {
 161                    return null;
 62                }
 63
 164                var series = parent as Series ?? parent.GetParents().OfType<Series>().FirstOrDefault();
 65
 166                if (series is not null)
 67                {
 168                    episode.SeriesId = series.Id;
 169                    episode.SeriesName = series.Name;
 70                }
 71
 172                if (season is not null)
 73                {
 074                    episode.SeasonId = season.Id;
 075                    episode.SeasonName = season.Name;
 76                }
 77
 78                // Assume season 1 if there's no season folder and a season number could not be determined
 179                if (season is null && !episode.ParentIndexNumber.HasValue && (episode.IndexNumber.HasValue || episode.Pr
 80                {
 081                    episode.ParentIndexNumber = 1;
 82                }
 83
 184                return episode;
 85            }
 86
 387            return null;
 88        }
 89    }
 90}