using System.Globalization; using System.Text.RegularExpressions; using Emby.Naming.Common; namespace Emby.Naming.AudioBook { /// <summary> /// Helper class to retrieve name and year from audiobook previously retrieved name. /// </summary> public class AudioBookNameParser { private readonly NamingOptions _options; /// <summary> /// Initializes a new instance of the <see cref="AudioBookNameParser"/> class. /// </summary> /// <param name="options">Naming options containing AudioBookNamesExpressions.</param> public AudioBookNameParser(NamingOptions options) { _options = options; } /// <summary> /// Parse name and year from previously determined name of audiobook. /// </summary> /// <param name="name">Name of the audiobook.</param> /// <returns>Returns <see cref="AudioBookNameParserResult"/> object.</returns> public AudioBookNameParserResult Parse(string name) { AudioBookNameParserResult result = default; foreach (var expression in _options.AudioBookNamesExpressions) { var match = new Regex(expression, RegexOptions.IgnoreCase).Match(name); if (match.Success) { if (result.Name == null) { var value = match.Groups["name"]; if (value.Success) { result.Name = value.Value; } } if (!result.Year.HasValue) { var value = match.Groups["year"]; if (value.Success) { if (int.TryParse(value.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intValue)) { result.Year = intValue; } } } } } if (string.IsNullOrEmpty(result.Name)) { result.Name = name; } return result; } } }