diff options
| author | Stepan <ste.martinek+git@gmail.com> | 2020-11-02 20:03:12 +0100 |
|---|---|---|
| committer | Stepan <ste.martinek+git@gmail.com> | 2020-11-02 20:03:12 +0100 |
| commit | 1e7177568887d0f808660454e5eb7ca7ebcd6998 (patch) | |
| tree | 0359804e2c4d691a7cf476c7364cefded0ab2947 /Emby.Naming/AudioBook | |
| parent | 50a2ef9d8aaf92e8b69ced5ea2fcc8fa185fe675 (diff) | |
Add Name and Year parsing for audiobooks
Diffstat (limited to 'Emby.Naming/AudioBook')
| -rw-r--r-- | Emby.Naming/AudioBook/AudioBookInfo.cs | 4 | ||||
| -rw-r--r-- | Emby.Naming/AudioBook/AudioBookListResolver.cs | 6 | ||||
| -rw-r--r-- | Emby.Naming/AudioBook/AudioBookNameParser.cs | 59 | ||||
| -rw-r--r-- | Emby.Naming/AudioBook/AudioBookNameParserResult.cs | 12 |
4 files changed, 77 insertions, 4 deletions
diff --git a/Emby.Naming/AudioBook/AudioBookInfo.cs b/Emby.Naming/AudioBook/AudioBookInfo.cs index fba11ea726..353a0f4a01 100644 --- a/Emby.Naming/AudioBook/AudioBookInfo.cs +++ b/Emby.Naming/AudioBook/AudioBookInfo.cs @@ -11,12 +11,14 @@ namespace Emby.Naming.AudioBook /// Initializes a new instance of the <see cref="AudioBookInfo" /> class. /// </summary> /// <param name="name">Name of audiobook.</param> - public AudioBookInfo(string name) + /// <param name="year">Year of audiobook release.</param> + public AudioBookInfo(string name, int? year) { Files = new List<AudioBookFileInfo>(); Extras = new List<AudioBookFileInfo>(); AlternateVersions = new List<AudioBookFileInfo>(); Name = name; + Year = year; } /// <summary> diff --git a/Emby.Naming/AudioBook/AudioBookListResolver.cs b/Emby.Naming/AudioBook/AudioBookListResolver.cs index 795065a6c9..86ba2eeeaf 100644 --- a/Emby.Naming/AudioBook/AudioBookListResolver.cs +++ b/Emby.Naming/AudioBook/AudioBookListResolver.cs @@ -41,9 +41,9 @@ namespace Emby.Naming.AudioBook stackFiles.Sort(); - // stack.Name can be empty when we have file without folder, but always have some files - var name = string.IsNullOrEmpty(stack.Name) ? stack.Files[0] : stack.Name; - var info = new AudioBookInfo(name) { Files = stackFiles }; + var result = new AudioBookNameParser(_options).Parse(stack.Name); + + var info = new AudioBookInfo(result.Name, result.Year) { Files = stackFiles }; yield return info; } diff --git a/Emby.Naming/AudioBook/AudioBookNameParser.cs b/Emby.Naming/AudioBook/AudioBookNameParser.cs new file mode 100644 index 0000000000..c48db93b37 --- /dev/null +++ b/Emby.Naming/AudioBook/AudioBookNameParser.cs @@ -0,0 +1,59 @@ +#nullable enable +#pragma warning disable CS1591 + +using System.Globalization; +using System.IO; +using System.Text.RegularExpressions; +using Emby.Naming.Common; + +namespace Emby.Naming.AudioBook +{ + public class AudioBookNameParser + { + private readonly NamingOptions _options; + + public AudioBookNameParser(NamingOptions options) + { + _options = options; + } + + 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; + } + } +} diff --git a/Emby.Naming/AudioBook/AudioBookNameParserResult.cs b/Emby.Naming/AudioBook/AudioBookNameParserResult.cs new file mode 100644 index 0000000000..b28e259dda --- /dev/null +++ b/Emby.Naming/AudioBook/AudioBookNameParserResult.cs @@ -0,0 +1,12 @@ +#nullable enable +#pragma warning disable CS1591 + +namespace Emby.Naming.AudioBook +{ + public struct AudioBookNameParserResult + { + public string Name { get; set; } + + public int? Year { get; set; } + } +} |
