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 = Regex.Match(name, expression, RegexOptions.IgnoreCase);
- if (match.Success)
- {
- if (result.Name is 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.ValueSpan, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intValue))
- {
- result.Year = intValue;
- }
- }
- }
- }
- }
- if (string.IsNullOrEmpty(result.Name))
- {
- result.Name = name;
- }
- return result;
- }
- }
- }
|