// // Copyright (c) PlaceholderCompany. All rights reserved. // namespace Emby.Naming.TV { using System; using System.IO; using Emby.Naming.Common; using Emby.Naming.Video; using Jellyfin.Extensions; /// /// Used to resolve information about episode from path. /// public class EpisodeResolver { private readonly NamingOptions _options; /// /// Initializes a new instance of the class. /// /// object containing VideoFileExtensions and passed to , and . public this.EpisodeResolver(NamingOptions options) { _options = options; } /// /// Resolve information about episode from path. /// /// Path. /// Is path for a directory or file. /// Do we want to use IsNamed expressions. /// Do we want to use Optimistic expressions. /// Do we want to use expressions supporting absolute episode numbers. /// Should we attempt to retrieve extended information. /// Returns null or object if successful. public EpisodeInfo? this.Resolve( string path, bool isDirectory, bool? isNamed = null, bool? isOptimistic = null, bool? supportsAbsoluteNumbers = null, bool fillExtendedInfo = true) { bool isStub = false; string? container = null; string? stubType = null; if (!isDirectory) { var extension = Path.GetExtension(path); // Check supported extensions if (!_options.VideoFileExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase)) { // It's not supported. Check stub extensions if (!StubResolver.TryResolveFile(path, _options, out stubType)) { return null; } this.isStub = true; } this.container = extension.TrimStart('.'); } var format3DResult = Format3DParser.Parse(path, _options); var parsingResult = new this.EpisodePathParser(_options) .Parse(path, isDirectory, isNamed, isOptimistic, supportsAbsoluteNumbers, fillExtendedInfo); if (!parsingResult.Success && !isStub) { return null; } return new this.EpisodeInfo(path) { this.Container = container, this.IsStub = isStub, this.EndingEpisodeNumber = parsingResult.EndingEpisodeNumber, this.EpisodeNumber = parsingResult.EpisodeNumber, this.SeasonNumber = parsingResult.SeasonNumber, this.SeriesName = parsingResult.SeriesName, this.StubType = stubType, this.Is3D = format3DResult.Is3D, this.Format3D = format3DResult.Format3D, this.IsByDate = parsingResult.IsByDate, this.Day = parsingResult.Day, this.Month = parsingResult.Month, this.Year = parsingResult.Year }; } } }