aboutsummaryrefslogtreecommitdiff
path: root/Emby.Naming/Subtitles/SubtitleParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Naming/Subtitles/SubtitleParser.cs')
-rw-r--r--Emby.Naming/Subtitles/SubtitleParser.cs65
1 files changed, 65 insertions, 0 deletions
diff --git a/Emby.Naming/Subtitles/SubtitleParser.cs b/Emby.Naming/Subtitles/SubtitleParser.cs
new file mode 100644
index 0000000000..fbf0f60cba
--- /dev/null
+++ b/Emby.Naming/Subtitles/SubtitleParser.cs
@@ -0,0 +1,65 @@
+using Emby.Naming.Common;
+using System;
+using System.IO;
+using System.Linq;
+
+namespace Emby.Naming.Subtitles
+{
+ public class SubtitleParser
+ {
+ private readonly NamingOptions _options;
+
+ public SubtitleParser(NamingOptions options)
+ {
+ _options = options;
+ }
+
+ public SubtitleInfo ParseFile(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ throw new ArgumentNullException("path");
+ }
+
+ var extension = Path.GetExtension(path);
+ if (!_options.SubtitleFileExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
+ var flags = GetFlags(path);
+
+ var info = new SubtitleInfo
+ {
+ Path = path,
+ IsDefault = _options.SubtitleDefaultFlags.Any(i => flags.Contains(i, StringComparer.OrdinalIgnoreCase)),
+ IsForced = _options.SubtitleForcedFlags.Any(i => flags.Contains(i, StringComparer.OrdinalIgnoreCase))
+ };
+
+ var parts = flags.Where(i => !_options.SubtitleDefaultFlags.Contains(i, StringComparer.OrdinalIgnoreCase) && !_options.SubtitleForcedFlags.Contains(i, StringComparer.OrdinalIgnoreCase))
+ .ToList();
+
+ // Should have a name, language and file extension
+ if (parts.Count >= 3)
+ {
+ info.Language = parts[parts.Count - 2];
+ }
+
+ return info;
+ }
+
+ private string[] GetFlags(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ throw new ArgumentNullException("path");
+ }
+
+ // Note: the tags need be be surrounded be either a space ( ), hyphen -, dot . or underscore _.
+
+ var file = Path.GetFileName(path);
+
+ return file.Split(_options.SubtitleFlagDelimiters, StringSplitOptions.RemoveEmptyEntries);
+ }
+ }
+}