aboutsummaryrefslogtreecommitdiff
path: root/Emby.Naming/AudioBook
diff options
context:
space:
mode:
authorStepan <ste.martinek+git@gmail.com>2020-11-02 20:03:12 +0100
committerStepan <ste.martinek+git@gmail.com>2020-11-02 20:03:12 +0100
commit1e7177568887d0f808660454e5eb7ca7ebcd6998 (patch)
tree0359804e2c4d691a7cf476c7364cefded0ab2947 /Emby.Naming/AudioBook
parent50a2ef9d8aaf92e8b69ced5ea2fcc8fa185fe675 (diff)
Add Name and Year parsing for audiobooks
Diffstat (limited to 'Emby.Naming/AudioBook')
-rw-r--r--Emby.Naming/AudioBook/AudioBookInfo.cs4
-rw-r--r--Emby.Naming/AudioBook/AudioBookListResolver.cs6
-rw-r--r--Emby.Naming/AudioBook/AudioBookNameParser.cs59
-rw-r--r--Emby.Naming/AudioBook/AudioBookNameParserResult.cs12
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; }
+ }
+}