|
@@ -0,0 +1,61 @@
|
|
|
+using System.Globalization;
|
|
|
+using Emby.Naming.Common;
|
|
|
+
|
|
|
+namespace Emby.Naming.TV
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// Used to parse information about series from paths containing more information that only the series name.
|
|
|
+ /// Uses the same regular expressions as the EpisodePathParser but have different success criteria.
|
|
|
+ /// </summary>
|
|
|
+ public static class SeriesPathParser
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// Parses information about series from path.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="options"><see cref="NamingOptions"/> object containing EpisodeExpressions and MultipleEpisodeExpressions.</param>
|
|
|
+ /// <param name="path">Path.</param>
|
|
|
+ /// <returns>Returns <see cref="SeriesPathParserResult"/> object.</returns>
|
|
|
+ public static SeriesPathParserResult Parse(NamingOptions options, string path)
|
|
|
+ {
|
|
|
+ SeriesPathParserResult? result = null;
|
|
|
+
|
|
|
+ foreach (var expression in options.EpisodeExpressions)
|
|
|
+ {
|
|
|
+ var currentResult = Parse(path, expression);
|
|
|
+ if (currentResult.Success)
|
|
|
+ {
|
|
|
+ result = currentResult;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (result != null)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(result.SeriesName))
|
|
|
+ {
|
|
|
+ result.SeriesName = result.SeriesName.Trim(' ', '_', '.', '-');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result ?? new SeriesPathParserResult();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static SeriesPathParserResult Parse(string name, EpisodeExpression expression)
|
|
|
+ {
|
|
|
+ var result = new SeriesPathParserResult();
|
|
|
+
|
|
|
+ var match = expression.Regex.Match(name);
|
|
|
+
|
|
|
+ if (match.Success && match.Groups.Count >= 3)
|
|
|
+ {
|
|
|
+ if (expression.IsNamed)
|
|
|
+ {
|
|
|
+ result.SeriesName = match.Groups["seriesname"].Value;
|
|
|
+ result.Success = !string.IsNullOrEmpty(result.SeriesName) && !string.IsNullOrEmpty(match.Groups["seasonnumber"]?.Value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|