aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Naming/TV/SeriesResolver.cs21
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs1
2 files changed, 22 insertions, 0 deletions
diff --git a/Emby.Naming/TV/SeriesResolver.cs b/Emby.Naming/TV/SeriesResolver.cs
index c955b8a0d..0b7309bae 100644
--- a/Emby.Naming/TV/SeriesResolver.cs
+++ b/Emby.Naming/TV/SeriesResolver.cs
@@ -18,6 +18,13 @@ namespace Emby.Naming.TV
private static partial Regex SeriesNameRegex();
/// <summary>
+ /// Regex that matches titles with year in parentheses. Captures the title (which may be
+ /// numeric) before the year, i.e. turns "1923 (2022)" into "1923".
+ /// </summary>
+ [GeneratedRegex(@"(?<title>.+?)\s*\(\d{4}\)")]
+ private static partial Regex TitleWithYearRegex();
+
+ /// <summary>
/// Resolve information about series from path.
/// </summary>
/// <param name="options"><see cref="NamingOptions"/> object passed to <see cref="SeriesPathParser"/>.</param>
@@ -27,6 +34,20 @@ namespace Emby.Naming.TV
{
string seriesName = Path.GetFileName(path);
+ // First check if the filename matches a title with year pattern (handles numeric titles)
+ if (!string.IsNullOrEmpty(seriesName))
+ {
+ var titleWithYearMatch = TitleWithYearRegex().Match(seriesName);
+ if (titleWithYearMatch.Success)
+ {
+ seriesName = titleWithYearMatch.Groups["title"].Value.Trim();
+ return new SeriesInfo(path)
+ {
+ Name = seriesName
+ };
+ }
+ }
+
SeriesPathParserResult result = SeriesPathParser.Parse(options, path);
if (result.Success)
{
diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs
index 84758c9c3..b81b7934c 100644
--- a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs
@@ -19,6 +19,7 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData("/some/path/The Show", "The Show")]
[InlineData("/some/path/The Show s02e10 720p hdtv", "The Show")]
[InlineData("/some/path/The Show s02e10 the episode 720p hdtv", "The Show")]
+ [InlineData("/some/path/1923 (2022)", "1923")]
public void SeriesResolverResolveTest(string path, string name)
{
var res = SeriesResolver.Resolve(_namingOptions, path);