From d53a61cc48c2cde0ad428dd7c73f24dd28212c46 Mon Sep 17 00:00:00 2001 From: SenorSmartyPants Date: Thu, 30 Mar 2023 18:17:40 -0500 Subject: [PATCH] Fix case when series name ends in special character Add unit test --- .../Library/LibraryManager.cs | 20 +++++++++-- .../Library/LibraryManager/FindExtrasTests.cs | 34 +++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index f5f63a9ff4..388695cee5 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -2664,10 +2664,24 @@ namespace Emby.Server.Implementations.Library seriesName = season.SeriesName; } - if (seriesName is not null && seriesName.Equals(episodeInfo?.SeriesName, StringComparison.OrdinalIgnoreCase)) + if (seriesName is not null && episodeInfo?.SeriesName is not null) { - // don't attach episode extras to series or season - continue; + // trim series names like episodepathparser does + seriesName = seriesName + .Trim() + .Trim('_', '.', '-') + .Trim(); + + var episodeInfoSeriesName = episodeInfo.SeriesName + .Trim() + .Trim('_', '.', '-') + .Trim(); + + if (seriesName.Equals(episodeInfoSeriesName, StringComparison.OrdinalIgnoreCase)) + { + // don't attach episode extras to series or season + continue; + } } } } diff --git a/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs b/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs index 698df5652a..028c970aa4 100644 --- a/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs +++ b/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs @@ -381,6 +381,40 @@ public class FindExtrasTests Assert.Equal("/series/Dexter/Season 1/interviews/The Cast.mkv", extras[1].Path); } + [Fact] + public void FindExtras_SeasonWithExtras_FindsCorrectExtras2() + { + // Series name directory has special characters stripped that episodes do not + var owner = new Season { Name = "Season 1", SeriesName = "The Venture Bros.", Path = "/series/The Venture Bros/Season 1" }; + var paths = new List + { + "/series/The Venture Bros/Season 1/The Venture Bros. S01E01.mkv", + "/series/The Venture Bros/Season 1/The Venture Bros. S01E01-deleted.mkv", + "/series/The Venture Bros/Season 1/The Venture Bros. - S01E02 - Second Epi.mkv", + "/series/The Venture Bros/Season 1/The Venture Bros. - S01E02 - Second Epi-interview.mkv", + "/series/The Venture Bros/Season 1/The Venture Bros. - S01E02 - Second Epi-scene.mkv", + "/series/The Venture Bros/Season 1/It's a begining-behindthescenes.mkv", + "/series/The Venture Bros/Season 1/interviews/The Cast.mkv", + }; + + var files = paths.Select(p => new FileSystemMetadata + { + FullName = p, + Name = Path.GetFileName(p), + Extension = Path.GetExtension(p), + IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p)) + }).ToList(); + + var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList(); + + Assert.Equal(2, extras.Count); + Assert.Equal(ExtraType.BehindTheScenes, extras[0].ExtraType); + Assert.Equal(typeof(Video), extras[0].GetType()); + Assert.Equal("It's a begining-behindthescenes", extras[0].FileNameWithoutExtension); + Assert.Equal("/series/The Venture Bros/Season 1/It's a begining-behindthescenes.mkv", extras[0].Path); + Assert.Equal("/series/The Venture Bros/Season 1/interviews/The Cast.mkv", extras[1].Path); + } + [Fact] public void FindExtras_EpisodeWithExtras_FindsCorrectExtras() {