diff --git a/Emby.Naming/TV/TvParserHelpers.cs b/Emby.Naming/TV/TvParserHelpers.cs
new file mode 100644
index 0000000000..2eca389da5
--- /dev/null
+++ b/Emby.Naming/TV/TvParserHelpers.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Linq;
+using MediaBrowser.Model.Entities;
+
+namespace Emby.Naming.TV;
+
+///
+/// Helper class for TV metadata parsing.
+///
+public static class TvParserHelpers
+{
+ private static readonly string[] _continuingState = ["Pilot", "Returning Series", "Returning"];
+ private static readonly string[] _endedState = ["Cancelled"];
+
+ ///
+ /// Tries to parse a string into .
+ ///
+ /// The status string.
+ /// The .
+ /// Returns true if parsing was successful.
+ public static bool TryParseSeriesStatus(string status, out SeriesStatus? enumValue)
+ {
+ if (Enum.TryParse(status, true, out SeriesStatus seriesStatus))
+ {
+ enumValue = seriesStatus;
+ return true;
+ }
+
+ if (_continuingState.Contains(status, StringComparer.OrdinalIgnoreCase))
+ {
+ enumValue = SeriesStatus.Continuing;
+ return true;
+ }
+
+ if (_endedState.Contains(status, StringComparer.OrdinalIgnoreCase))
+ {
+ enumValue = SeriesStatus.Ended;
+ return true;
+ }
+
+ enumValue = null;
+ return false;
+ }
+}
diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs
index 8dc2d69385..d8476bd47d 100644
--- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesProvider.cs
@@ -278,17 +278,12 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.TV
series.RunTimeTicks = seriesResult.EpisodeRunTime.Select(i => TimeSpan.FromMinutes(i).Ticks).FirstOrDefault();
- if (string.Equals(seriesResult.Status, "Ended", StringComparison.OrdinalIgnoreCase)
- || string.Equals(seriesResult.Status, "Canceled", StringComparison.OrdinalIgnoreCase))
+ if (Emby.Naming.TV.TvParserHelpers.TryParseSeriesStatus(seriesResult.Status, out var seriesStatus))
{
- series.Status = SeriesStatus.Ended;
- series.EndDate = seriesResult.LastAirDate;
- }
- else
- {
- series.Status = SeriesStatus.Continuing;
+ series.Status = seriesStatus;
}
+ series.EndDate = seriesResult.LastAirDate;
series.PremiereDate = seriesResult.FirstAirDate;
var ids = seriesResult.ExternalIds;
diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
index 94df871e9d..3b551acec7 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
@@ -1,6 +1,6 @@
-using System;
using System.Globalization;
using System.Xml;
+using Emby.Naming.TV;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Extensions;
@@ -87,7 +87,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (!string.IsNullOrWhiteSpace(status))
{
- if (Enum.TryParse(status, true, out SeriesStatus seriesStatus))
+ if (TvParserHelpers.TryParseSeriesStatus(status, out var seriesStatus))
{
item.Status = seriesStatus;
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs b/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs
new file mode 100644
index 0000000000..2d4b5b730e
--- /dev/null
+++ b/tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs
@@ -0,0 +1,31 @@
+using Emby.Naming.TV;
+using MediaBrowser.Model.Entities;
+using Xunit;
+
+namespace Jellyfin.Naming.Tests.TV;
+
+public class TvParserHelpersTest
+{
+ [Theory]
+ [InlineData("Ended", SeriesStatus.Ended)]
+ [InlineData("Cancelled", SeriesStatus.Ended)]
+ [InlineData("Continuing", SeriesStatus.Continuing)]
+ [InlineData("Returning", SeriesStatus.Continuing)]
+ [InlineData("Returning Series", SeriesStatus.Continuing)]
+ [InlineData("Unreleased", SeriesStatus.Unreleased)]
+ public void SeriesStatusParserTest_Valid(string statusString, SeriesStatus? status)
+ {
+ var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsered);
+ Assert.True(successful);
+ Assert.Equal(status, parsered);
+ }
+
+ [Theory]
+ [InlineData("XXX")]
+ public void SeriesStatusParserTest_InValid(string statusString)
+ {
+ var successful = TvParserHelpers.TryParseSeriesStatus(statusString, out var parsered);
+ Assert.False(successful);
+ Assert.Null(parsered);
+ }
+}