using System; using System.IO; using System.Linq; using Emby.Naming.Common; using Jellyfin.Extensions; namespace Emby.Naming.Audio { /// /// External Audio Parser class. /// public class ExternalAudioFilePathParser { private readonly NamingOptions _options; /// /// Initializes a new instance of the class. /// /// object containing AudioFileExtensions, ExternalAudioDefaultFlags, ExternalAudioForcedFlags and ExternalAudioFlagDelimiters. public ExternalAudioFilePathParser(NamingOptions options) { _options = options; } /// /// Parse file to determine if it is a ExternalAudio and . /// /// Path to file. /// Returns null or object if parsing is successful. public ExternalAudioFileInfo? ParseFile(string path) { if (path.Length == 0) { return null; } var extension = Path.GetExtension(path); if (!_options.AudioFileExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase)) { return null; } var flags = GetFileFlags(path); var info = new ExternalAudioFileInfo( path, _options.ExternalAudioDefaultFlags.Any(i => flags.Contains(i, StringComparison.OrdinalIgnoreCase)), _options.ExternalAudioForcedFlags.Any(i => flags.Contains(i, StringComparison.OrdinalIgnoreCase))); return info; } private string[] GetFileFlags(string path) { var file = Path.GetFileNameWithoutExtension(path); return file.Split(_options.ExternalAudioFlagDelimiters, StringSplitOptions.RemoveEmptyEntries); } } }