mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-04-24 05:57:20 -04:00
Backport pull request #11648 from jellyfin/release-10.9.z
Fix series status parsing
Original-merge: c6c48a2b47
Merged-by: nielsvanvelzen <nielsvanvelzen@users.noreply.github.com>
Backported-by: Joshua M. Boniface <joshua@boniface.me>
This commit is contained in:
parent
29a293f9e7
commit
b063dfd2e3
4 changed files with 80 additions and 10 deletions
44
Emby.Naming/TV/TvParserHelpers.cs
Normal file
44
Emby.Naming/TV/TvParserHelpers.cs
Normal file
|
@ -0,0 +1,44 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace Emby.Naming.TV;
|
||||
|
||||
/// <summary>
|
||||
/// Helper class for TV metadata parsing.
|
||||
/// </summary>
|
||||
public static class TvParserHelpers
|
||||
{
|
||||
private static readonly string[] _continuingState = ["Pilot", "Returning Series", "Returning"];
|
||||
private static readonly string[] _endedState = ["Cancelled"];
|
||||
|
||||
/// <summary>
|
||||
/// Tries to parse a string into <see cref="SeriesStatus"/>.
|
||||
/// </summary>
|
||||
/// <param name="status">The status string.</param>
|
||||
/// <param name="enumValue">The <see cref="SeriesStatus"/>.</param>
|
||||
/// <returns>Returns true if parsing was successful.</returns>
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
31
tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs
Normal file
31
tests/Jellyfin.Naming.Tests/TV/TvParserHelpersTest.cs
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue