using System; using System.IO; using Emby.Naming.Common; using Jellyfin.Extensions; namespace Emby.Naming.AudioBook { /// /// Resolve specifics (path, container, partNumber, chapterNumber) about audiobook file. /// public class AudioBookResolver { private readonly NamingOptions _options; /// /// Initializes a new instance of the class. /// /// containing AudioFileExtensions and also used to pass to AudioBookFilePathParser. public AudioBookResolver(NamingOptions options) { _options = options; } /// /// Resolve specifics (path, container, partNumber, chapterNumber) about audiobook file. /// /// Path to audiobook file. /// Returns object. public AudioBookFileInfo? Resolve(string path) { if (path.Length == 0 || Path.GetFileNameWithoutExtension(path).Length == 0) { // Return null to indicate this path will not be used, instead of stopping whole process with exception return null; } var extension = Path.GetExtension(path); // Check supported extensions if (!_options.AudioFileExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase)) { return null; } var container = extension.TrimStart('.'); var parsingResult = new AudioBookFilePathParser(_options).Parse(path); return new AudioBookFileInfo( path, container, chapterNumber: parsingResult.ChapterNumber, partNumber: parsingResult.PartNumber); } } }