aboutsummaryrefslogtreecommitdiff
path: root/Emby.Naming/Audio/ExternalAudioFilePathParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Naming/Audio/ExternalAudioFilePathParser.cs')
-rw-r--r--Emby.Naming/Audio/ExternalAudioFilePathParser.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/Emby.Naming/Audio/ExternalAudioFilePathParser.cs b/Emby.Naming/Audio/ExternalAudioFilePathParser.cs
new file mode 100644
index 000000000..ab5af9fc6
--- /dev/null
+++ b/Emby.Naming/Audio/ExternalAudioFilePathParser.cs
@@ -0,0 +1,59 @@
+using System;
+using System.IO;
+using System.Linq;
+using Emby.Naming.Common;
+using Jellyfin.Extensions;
+
+namespace Emby.Naming.Audio
+{
+ /// <summary>
+ /// External Audio Parser class.
+ /// </summary>
+ public class ExternalAudioFilePathParser
+ {
+ private readonly NamingOptions _options;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ExternalAudioFilePathParser"/> class.
+ /// </summary>
+ /// <param name="options"><see cref="NamingOptions"/> object containing AudioFileExtensions, ExternalAudioDefaultFlags, ExternalAudioForcedFlags and ExternalAudioFlagDelimiters.</param>
+ public ExternalAudioFilePathParser(NamingOptions options)
+ {
+ _options = options;
+ }
+
+ /// <summary>
+ /// Parse file to determine if it is a ExternalAudio and <see cref="ExternalAudioFileInfo"/>.
+ /// </summary>
+ /// <param name="path">Path to file.</param>
+ /// <returns>Returns null or <see cref="ExternalAudioFileInfo"/> object if parsing is successful.</returns>
+ public ExternalAudioFileInfo? ParseFile(string path)
+ {
+ if (path.Length == 0)
+ {
+ return null;
+ }
+
+ var extension = Path.GetExtension(path);
+ if (!_options.AudioFileExtensions.Contains(extension, StringComparison.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
+ var flags = GetFileFlags(path);
+ var info = new ExternalAudioFileInfo(
+ path,
+ _options.ExternalAudioDefaultFlags.Any(i => flags.Contains(i, StringComparison.OrdinalIgnoreCase)),
+ _options.ExternalAudioForcedFlags.Any(i => flags.Contains(i, StringComparison.OrdinalIgnoreCase)));
+
+ return info;
+ }
+
+ private string[] GetFileFlags(string path)
+ {
+ var file = Path.GetFileNameWithoutExtension(path);
+
+ return file.Split(_options.ExternalAudioFlagDelimiters, StringSplitOptions.RemoveEmptyEntries);
+ }
+ }
+}