aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ci/azure-pipelines-package.yml12
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs89
-rw-r--r--Emby.Server.Implementations/Localization/Core/my.json9
-rw-r--r--Emby.Server.Implementations/Localization/Core/vi.json2
-rw-r--r--MediaBrowser.Providers/TV/SeasonMetadataService.cs2
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs7
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs7
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs7
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs15
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs27
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs7
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs5
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs5
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs5
-rw-r--r--tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs42
15 files changed, 104 insertions, 137 deletions
diff --git a/.ci/azure-pipelines-package.yml b/.ci/azure-pipelines-package.yml
index 89f7137fd..19d65ea0c 100644
--- a/.ci/azure-pipelines-package.yml
+++ b/.ci/azure-pipelines-package.yml
@@ -43,10 +43,6 @@ jobs:
displayName: Set release version (stable)
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
- - script: './bump-version $(JellyfinVersion)'
- displayName: Bump internal version (stable)
- condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
-
- script: 'docker build -f deployment/Dockerfile.$(BuildConfiguration) -t jellyfin-server-$(BuildConfiguration) deployment'
displayName: 'Build Dockerfile'
@@ -92,10 +88,6 @@ jobs:
displayName: Set release version (stable)
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
- - script: './bump-version $(JellyfinVersion)'
- displayName: Bump internal version (stable)
- condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
-
- task: DownloadPipelineArtifact@2
displayName: 'Download OpenAPI Spec'
inputs:
@@ -143,10 +135,6 @@ jobs:
displayName: Set release version (stable)
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
- - script: './bump-version $(JellyfinVersion)'
- displayName: Bump internal version (stable)
- condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/v')
-
- task: Docker@2
displayName: 'Push Unstable Image'
condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master')
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 41f29b835..5ab9e02fe 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -3015,86 +3015,101 @@ namespace Emby.Server.Implementations.Data
return " ORDER BY " + string.Join(',', orderBy.Select(i =>
{
- var columnMap = MapOrderByField(i.OrderBy, query);
- var sortOrder = columnMap.SortOrder == SortOrder.Ascending ? "ASC" : "DESC";
- return columnMap.SortBy + " " + sortOrder;
+ var sortBy = MapOrderByField(i.OrderBy, query);
+ var sortOrder = i.SortOrder == SortOrder.Ascending ? "ASC" : "DESC";
+ return sortBy + " " + sortOrder;
}));
}
- private (string SortBy, SortOrder SortOrder) MapOrderByField(string name, InternalItemsQuery query)
+ private string MapOrderByField(string name, InternalItemsQuery query)
{
if (string.Equals(name, ItemSortBy.AirTime, StringComparison.OrdinalIgnoreCase))
{
// TODO
- return ("SortName", SortOrder.Ascending);
+ return "SortName";
}
- else if (string.Equals(name, ItemSortBy.Runtime, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.Runtime, StringComparison.OrdinalIgnoreCase))
{
- return ("RuntimeTicks", SortOrder.Ascending);
+ return "RuntimeTicks";
}
- else if (string.Equals(name, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.Random, StringComparison.OrdinalIgnoreCase))
{
- return ("RANDOM()", SortOrder.Ascending);
+ return "RANDOM()";
}
- else if (string.Equals(name, ItemSortBy.DatePlayed, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.DatePlayed, StringComparison.OrdinalIgnoreCase))
{
if (query.GroupBySeriesPresentationUniqueKey)
{
- return ("MAX(LastPlayedDate)", SortOrder.Ascending);
+ return "MAX(LastPlayedDate)";
}
- return ("LastPlayedDate", SortOrder.Ascending);
+ return "LastPlayedDate";
}
- else if (string.Equals(name, ItemSortBy.PlayCount, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.PlayCount, StringComparison.OrdinalIgnoreCase))
{
- return ("PlayCount", SortOrder.Ascending);
+ return "PlayCount";
}
- else if (string.Equals(name, ItemSortBy.IsFavoriteOrLiked, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.IsFavoriteOrLiked, StringComparison.OrdinalIgnoreCase))
{
- return ("(Select Case When IsFavorite is null Then 0 Else IsFavorite End )", SortOrder.Descending);
+ return "(Select Case When IsFavorite is null Then 0 Else IsFavorite End )";
}
- else if (string.Equals(name, ItemSortBy.IsFolder, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.IsFolder, StringComparison.OrdinalIgnoreCase))
{
- return ("IsFolder", SortOrder.Descending);
+ return "IsFolder";
}
- else if (string.Equals(name, ItemSortBy.IsPlayed, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.IsPlayed, StringComparison.OrdinalIgnoreCase))
{
- return ("played", SortOrder.Descending);
+ return "played";
}
- else if (string.Equals(name, ItemSortBy.IsUnplayed, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.IsUnplayed, StringComparison.OrdinalIgnoreCase))
{
- return ("played", SortOrder.Descending);
+ return "played";
}
- else if (string.Equals(name, ItemSortBy.DateLastContentAdded, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.DateLastContentAdded, StringComparison.OrdinalIgnoreCase))
{
- return ("DateLastMediaAdded", SortOrder.Ascending);
+ return "DateLastMediaAdded";
}
- else if (string.Equals(name, ItemSortBy.Artist, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.Artist, StringComparison.OrdinalIgnoreCase))
{
- return ("(select CleanValue from itemvalues where ItemId=Guid and Type=0 LIMIT 1)", SortOrder.Ascending);
+ return "(select CleanValue from itemvalues where ItemId=Guid and Type=0 LIMIT 1)";
}
- else if (string.Equals(name, ItemSortBy.AlbumArtist, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.AlbumArtist, StringComparison.OrdinalIgnoreCase))
{
- return ("(select CleanValue from itemvalues where ItemId=Guid and Type=1 LIMIT 1)", SortOrder.Ascending);
+ return "(select CleanValue from itemvalues where ItemId=Guid and Type=1 LIMIT 1)";
}
- else if (string.Equals(name, ItemSortBy.OfficialRating, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.OfficialRating, StringComparison.OrdinalIgnoreCase))
{
- return ("InheritedParentalRatingValue", SortOrder.Ascending);
+ return "InheritedParentalRatingValue";
}
- else if (string.Equals(name, ItemSortBy.Studio, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.Studio, StringComparison.OrdinalIgnoreCase))
{
- return ("(select CleanValue from itemvalues where ItemId=Guid and Type=3 LIMIT 1)", SortOrder.Ascending);
+ return "(select CleanValue from itemvalues where ItemId=Guid and Type=3 LIMIT 1)";
}
- else if (string.Equals(name, ItemSortBy.SeriesDatePlayed, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.SeriesDatePlayed, StringComparison.OrdinalIgnoreCase))
{
- return ("(Select MAX(LastPlayedDate) from TypedBaseItems B" + GetJoinUserDataText(query) + " where Played=1 and B.SeriesPresentationUniqueKey=A.PresentationUniqueKey)", SortOrder.Ascending);
+ return "(Select MAX(LastPlayedDate) from TypedBaseItems B" + GetJoinUserDataText(query) + " where Played=1 and B.SeriesPresentationUniqueKey=A.PresentationUniqueKey)";
}
- else if (string.Equals(name, ItemSortBy.SeriesSortName, StringComparison.OrdinalIgnoreCase))
+
+ if (string.Equals(name, ItemSortBy.SeriesSortName, StringComparison.OrdinalIgnoreCase))
{
- return ("SeriesName", SortOrder.Ascending);
+ return "SeriesName";
}
- return (name, SortOrder.Ascending);
+ return name;
}
public List<Guid> GetItemIdsList(InternalItemsQuery query)
diff --git a/Emby.Server.Implementations/Localization/Core/my.json b/Emby.Server.Implementations/Localization/Core/my.json
index 0967ef424..7f14f250d 100644
--- a/Emby.Server.Implementations/Localization/Core/my.json
+++ b/Emby.Server.Implementations/Localization/Core/my.json
@@ -1 +1,8 @@
-{}
+{
+ "Default": "ပုံသေ",
+ "Collections": "စုစည်းမှုများ",
+ "Channels": "ချန်နယ်များ",
+ "Books": "စာအုပ်များ",
+ "Artists": "အနုပညာရှင်များ",
+ "Albums": "အခွေများ"
+}
diff --git a/Emby.Server.Implementations/Localization/Core/vi.json b/Emby.Server.Implementations/Localization/Core/vi.json
index b7ece8d5f..d80f1760d 100644
--- a/Emby.Server.Implementations/Localization/Core/vi.json
+++ b/Emby.Server.Implementations/Localization/Core/vi.json
@@ -13,7 +13,7 @@
"Songs": "Bài Hát",
"Sync": "Đồng Bộ",
"ValueSpecialEpisodeName": "Đặc Biệt - {0}",
- "Albums": "Tuyển Tập",
+ "Albums": "",
"Artists": "Ca Sĩ",
"TaskDownloadMissingSubtitlesDescription": "Tìm kiếm phụ đề bị thiếu trên Internet dựa trên cấu hình dữ liệu mô tả.",
"TaskDownloadMissingSubtitles": "Tải Xuống Phụ Đề Bị Thiếu",
diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
index b173fc7a3..1f06cbdb2 100644
--- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
@@ -35,7 +35,7 @@ namespace MediaBrowser.Providers.TV
{
var updatedType = base.BeforeSaveInternal(item, isFullRefresh, updateType);
- if (item.IndexNumber.HasValue && item.IndexNumber.Value == 0)
+ if (item.IndexNumber == 0 && !item.IsLocked && !item.LockedFields.Contains(MetadataField.Name))
{
var seasonZeroDisplayName = LibraryManager.GetLibraryOptions(item).SeasonZeroDisplayName;
diff --git a/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs
index 356ba216d..e81c5152e 100644
--- a/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class AbsoluteEpisodeNumberTests
{
+ private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions());
+
[Theory]
[InlineData("The Simpsons/12.avi", 12)]
[InlineData("The Simpsons/The Simpsons 12.avi", 12)]
@@ -16,10 +18,7 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData("The Simpsons/The Simpsons 101.avi", 101)]
public void GetEpisodeNumberFromFileTest(string path, int episodeNumber)
{
- var options = new NamingOptions();
-
- var result = new EpisodeResolver(options)
- .Resolve(path, false, null, null, true);
+ var result = _resolver.Resolve(path, false, null, null, true);
Assert.Equal(episodeNumber, result?.EpisodeNumber);
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs
index 2937914b9..72052a23c 100644
--- a/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class DailyEpisodeTests
{
+ private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions());
+
[Theory]
[InlineData(@"/server/anything_1996.11.14.mp4", "anything", 1996, 11, 14)]
[InlineData(@"/server/anything_1996-11-14.mp4", "anything", 1996, 11, 14)]
@@ -16,10 +18,7 @@ namespace Jellyfin.Naming.Tests.TV
// TODO: [InlineData(@"/server/Last Man Standing_KTLADT_2018_05_25_01_28_00.wtv", "Last Man Standing", 2018, 05, 25)]
public void Test(string path, string seriesName, int? year, int? month, int? day)
{
- var options = new NamingOptions();
-
- var result = new EpisodeResolver(options)
- .Resolve(path, false);
+ var result = _resolver.Resolve(path, false);
Assert.Null(result?.SeasonNumber);
Assert.Null(result?.EpisodeNumber);
diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs
index 8bd1a43d6..1da5a30a8 100644
--- a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class EpisodeNumberWithoutSeasonTests
{
+ private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions());
+
[Theory]
[InlineData(8, @"The Simpsons/The Simpsons.S25E08.Steal this episode.mp4")]
[InlineData(2, @"The Simpsons/The Simpsons - 02 - Ep Name.avi")]
@@ -24,10 +26,7 @@ namespace Jellyfin.Naming.Tests.TV
// TODO: [InlineData(13, @"Case Closed (1996-2007)/Case Closed - 13.mkv")]
public void GetEpisodeNumberFromFileTest(int episodeNumber, string path)
{
- var options = new NamingOptions();
-
- var result = new EpisodeResolver(options)
- .Resolve(path, false);
+ var result = _resolver.Resolve(path, false);
Assert.Equal(episodeNumber, result?.EpisodeNumber);
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs
index 12fc19bc4..af219b118 100644
--- a/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class EpisodePathParserTest
{
+ private readonly NamingOptions _namingOptions = new NamingOptions();
+
[Theory]
[InlineData("/media/Foo/Foo-S01E01", true, "Foo", 1, 1)]
[InlineData("/media/Foo - S04E011", true, "Foo", 4, 11)]
@@ -36,8 +38,7 @@ namespace Jellyfin.Naming.Tests.TV
// TODO: [InlineData("/The.Legend.of.Condor.Heroes.2017.V2.web-dl.1080p.h264.aac-hdctv/The.Legend.of.Condor.Heroes.2017.E07.V2.web-dl.1080p.h264.aac-hdctv.mkv", "The Legend of Condor Heroes 2017", 1, 7)]
public void ParseEpisodesCorrectly(string path, bool isDirectory, string name, int season, int episode)
{
- NamingOptions o = new NamingOptions();
- EpisodePathParser p = new EpisodePathParser(o);
+ EpisodePathParser p = new EpisodePathParser(_namingOptions);
var res = p.Parse(path, isDirectory);
Assert.True(res.Success);
@@ -50,8 +51,7 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData("/test/01-03.avi", true, true)]
public void EpisodePathParserTest_DifferentExpressionsParameters(string path, bool? isNamed, bool? isOptimistic)
{
- NamingOptions o = new NamingOptions();
- EpisodePathParser p = new EpisodePathParser(o);
+ EpisodePathParser p = new EpisodePathParser(_namingOptions);
var res = p.Parse(path, false, isNamed, isOptimistic);
Assert.True(res.Success);
@@ -60,8 +60,7 @@ namespace Jellyfin.Naming.Tests.TV
[Fact]
public void EpisodePathParserTest_FalsePositivePixelRate()
{
- NamingOptions o = new NamingOptions();
- EpisodePathParser p = new EpisodePathParser(o);
+ EpisodePathParser p = new EpisodePathParser(_namingOptions);
var res = p.Parse("Series Special (1920x1080).mkv", false);
Assert.False(res.Success);
@@ -70,14 +69,14 @@ namespace Jellyfin.Naming.Tests.TV
[Fact]
public void EpisodeResolverTest_WrongExtension()
{
- var res = new EpisodeResolver(new NamingOptions()).Resolve("test.mp3", false);
+ var res = new EpisodeResolver(_namingOptions).Resolve("test.mp3", false);
Assert.Null(res);
}
[Fact]
public void EpisodeResolverTest_WrongExtensionStub()
{
- var res = new EpisodeResolver(new NamingOptions()).Resolve("dvd.disc", false);
+ var res = new EpisodeResolver(_namingOptions).Resolve("dvd.disc", false);
Assert.NotNull(res);
Assert.True(res!.IsStub);
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs
deleted file mode 100644
index d0418a49e..000000000
--- a/tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using Emby.Naming.Common;
-using Emby.Naming.TV;
-using Xunit;
-
-namespace Jellyfin.Naming.Tests.TV
-{
- public class EpisodeWithoutSeasonTests
- {
- // TODO: [Theory]
- // TODO: [InlineData(@"/server/anything_ep02.mp4", "anything", null, 2)]
- // TODO: [InlineData(@"/server/anything_ep_02.mp4", "anything", null, 2)]
- // TODO: [InlineData(@"/server/anything_part.II.mp4", "anything", null, null)]
- // TODO: [InlineData(@"/server/anything_pt.II.mp4", "anything", null, null)]
- // TODO: [InlineData(@"/server/anything_pt_II.mp4", "anything", null, null)]
- public void Test(string path, string seriesName, int? seasonNumber, int? episodeNumber)
- {
- var options = new NamingOptions();
-
- var result = new EpisodeResolver(options)
- .Resolve(path, false);
-
- Assert.Equal(seasonNumber, result?.SeasonNumber);
- Assert.Equal(episodeNumber, result?.EpisodeNumber);
- Assert.Equal(seriesName, result?.SeriesName, ignoreCase: true);
- }
- }
-}
diff --git a/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs
index 58ea0bec5..ffaa64c3f 100644
--- a/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class MultiEpisodeTests
{
+ private readonly EpisodePathParser _episodePathParser = new EpisodePathParser(new NamingOptions());
+
[Theory]
[InlineData(@"Season 1/4x01 – 20 Hours in America (1).mkv", null)]
[InlineData(@"Season 1/01x02 blah.avi", null)]
@@ -69,10 +71,7 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData(@"Season 1/MOONLIGHTING_s01e01-e04", 4)]
public void TestGetEndingEpisodeNumberFromFile(string filename, int? endingEpisodeNumber)
{
- var options = new NamingOptions();
-
- var result = new EpisodePathParser(options)
- .Parse(filename, false);
+ var result = _episodePathParser.Parse(filename, false);
Assert.Equal(result.EndingEpisodeNumber, endingEpisodeNumber);
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs
index 4837e3a3b..58ec1b5d2 100644
--- a/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs
@@ -6,7 +6,7 @@ namespace Jellyfin.Naming.Tests.TV
{
public class SeasonNumberTests
{
- private readonly NamingOptions _namingOptions = new NamingOptions();
+ private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions());
[Theory]
[InlineData("The Daily Show/The Daily Show 25x22 - [WEBDL-720p][AAC 2.0][x264] Noah Baumbach-TBS.mkv", 25)]
@@ -56,8 +56,7 @@ namespace Jellyfin.Naming.Tests.TV
// TODO: [InlineData(@"Seinfeld/Seinfeld 0807 The Checks.avi", 8)]
public void GetSeasonNumberFromEpisodeFileTest(string path, int? expected)
{
- var result = new EpisodeResolver(_namingOptions)
- .Resolve(path, false);
+ var result = _resolver.Resolve(path, false);
Assert.Equal(expected, result?.SeasonNumber);
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs
index ceb5f8b73..e6b0409db 100644
--- a/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class SeriesPathParserTest
{
+ private readonly NamingOptions _namingOptions = new NamingOptions();
+
[Theory]
[InlineData("The.Show.S01", "The.Show")]
[InlineData("/The.Show.S01", "The.Show")]
@@ -18,8 +20,7 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData("/something/The Show/S01", "The Show")]
public void SeriesPathParserParseTest(string path, string name)
{
- NamingOptions o = new NamingOptions();
- var res = SeriesPathParser.Parse(o, path);
+ var res = SeriesPathParser.Parse(_namingOptions, path);
Assert.Equal(name, res.SeriesName);
Assert.True(res.Success);
diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs
index 97f4b4058..84758c9c3 100644
--- a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs
@@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class SeriesResolverTests
{
+ private readonly NamingOptions _namingOptions = new NamingOptions();
+
[Theory]
[InlineData("The.Show.S01", "The Show")]
[InlineData("The.Show.S01.COMPLETE", "The Show")]
@@ -19,8 +21,7 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData("/some/path/The Show s02e10 the episode 720p hdtv", "The Show")]
public void SeriesResolverResolveTest(string path, string name)
{
- NamingOptions o = new NamingOptions();
- var res = SeriesResolver.Resolve(o, path);
+ var res = SeriesResolver.Resolve(_namingOptions, path);
Assert.Equal(name, res.Name);
}
diff --git a/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs
index 6d49ac832..fa46ecc3a 100644
--- a/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs
+++ b/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs
@@ -7,6 +7,8 @@ namespace Jellyfin.Naming.Tests.TV
{
public class SimpleEpisodeTests
{
+ private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions());
+
[Theory]
[InlineData("/server/anything_s01e02.mp4", "anything", 1, 2)]
[InlineData("/server/anything_s1e2.mp4", "anything", 1, 2)]
@@ -23,39 +25,25 @@ namespace Jellyfin.Naming.Tests.TV
[InlineData(@"Love.Death.and.Robots.S01.1080p.NF.WEB-DL.DDP5.1.x264-NTG/Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv", "Love.Death.and.Robots", 1, 1)]
[InlineData("[YuiSubs] Tensura Nikki - Tensei Shitara Slime Datta Ken/[YuiSubs] Tensura Nikki - Tensei Shitara Slime Datta Ken - 12 (NVENC H.265 1080p).mkv", "Tensura Nikki - Tensei Shitara Slime Datta Ken", null, 12)]
[InlineData("[Baz-Bar]Foo - 01 - 12[1080p][Multiple Subtitle]/[Baz-Bar] Foo - 05 [1080p][Multiple Subtitle].mkv", "Foo", null, 5)]
+ [InlineData("Series/4-12 - The Woman.mp4", "", 4, 12, 12)]
// TODO: [InlineData("E:\\Anime\\Yahari Ore no Seishun Love Comedy wa Machigatteiru\\Yahari Ore no Seishun Love Comedy wa Machigatteiru. Zoku\\Oregairu Zoku 11 - Hayama Hayato Always Renconds to Everyone's Expectations..mkv", "Yahari Ore no Seishun Love Comedy wa Machigatteiru", null, 11)]
// TODO: [InlineData(@"/Library/Series/The Grand Tour (2016)/Season 1/S01E01 The Holy Trinity.mkv", "The Grand Tour", 1, 1)]
- public void TestSimple(string path, string seriesName, int? seasonNumber, int? episodeNumber)
+ public void TestSimple(string path, string seriesName, int? seasonNumber, int? episodeNumber, int? episodeEndNumber = null)
{
- Test(path, seriesName, seasonNumber, episodeNumber, null);
- }
-
- [Theory]
- [InlineData("Series/4-12 - The Woman.mp4", "", 4, 12, 12)]
- public void TestWithPossibleEpisodeEnd(string path, string seriesName, int? seasonNumber, int? episodeNumber, int? episodeEndNumber)
- {
- Test(path, seriesName, seasonNumber, episodeNumber, episodeEndNumber);
- }
-
- private void Test(string path, string seriesName, int? seasonNumber, int? episodeNumber, int? episodeEndNumber)
- {
- var options = new NamingOptions();
-
- var result = new EpisodeResolver(options)
- .Resolve(path, false);
+ var result = _resolver.Resolve(path, false);
Assert.NotNull(result);
- Assert.Equal(seasonNumber, result?.SeasonNumber);
- Assert.Equal(episodeNumber, result?.EpisodeNumber);
- Assert.Equal(seriesName, result?.SeriesName, true);
- Assert.Equal(path, result?.Path);
+ Assert.Equal(seasonNumber, result!.SeasonNumber);
+ Assert.Equal(episodeNumber, result!.EpisodeNumber);
+ Assert.Equal(seriesName, result!.SeriesName, true);
+ Assert.Equal(path, result!.Path);
Assert.Equal(Path.GetExtension(path).Substring(1), result?.Container);
- Assert.Null(result?.Format3D);
- Assert.False(result?.Is3D);
- Assert.False(result?.IsStub);
- Assert.Null(result?.StubType);
- Assert.Equal(episodeEndNumber, result?.EndingEpisodeNumber);
- Assert.False(result?.IsByDate);
+ Assert.Null(result!.Format3D);
+ Assert.False(result!.Is3D);
+ Assert.False(result!.IsStub);
+ Assert.Null(result!.StubType);
+ Assert.Equal(episodeEndNumber, result!.EndingEpisodeNumber);
+ Assert.False(result!.IsByDate);
}
}
}