| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | 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;        }    }}
 |