using System; using System.Globalization; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Emby.Naming.Common; namespace Emby.Naming.Audio { public class AlbumParser { private readonly NamingOptions _options; public AlbumParser(NamingOptions options) { _options = options; } public MultiPartResult ParseMultiPart(string path) { var result = new MultiPartResult(); var filename = Path.GetFileName(path); if (string.IsNullOrEmpty(filename)) { return result; } // TODO: Move this logic into options object // Even better, remove the prefixes and come up with regexes // But Kodi documentation seems to be weak for audio // Normalize // Remove whitespace filename = filename.Replace("-", " "); filename = filename.Replace(".", " "); filename = filename.Replace("(", " "); filename = filename.Replace(")", " "); filename = Regex.Replace(filename, @"\s+", " "); filename = filename.TrimStart(); foreach (var prefix in _options.AlbumStackingPrefixes) { if (filename.IndexOf(prefix, StringComparison.OrdinalIgnoreCase) == 0) { var tmp = filename.Substring(prefix.Length); tmp = tmp.Trim().Split(' ').FirstOrDefault() ?? string.Empty; int val; if (int.TryParse(tmp, NumberStyles.Integer, CultureInfo.InvariantCulture, out val)) { result.IsMultiPart = true; break; } } } return result; } } }