aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond-009 <bond.009@outlook.com>2024-09-07 18:09:53 -0400
committerJoshua M. Boniface <joshua@boniface.me>2024-09-07 18:09:53 -0400
commite10b986ea0e8aea98fd83d3d8d30c5c2ac385f73 (patch)
treef9399f99e0a0b240952c299dbd2ba71d3053d356
parent7631956451af5927c1c9850eb4e106dc4d0cdde1 (diff)
Backport pull request #12558 from jellyfin/release-10.9.z
Fix alt version name generation Original-merge: 70f4f2e8c2378f9a219c840ac23d0bcd2638c966 Merged-by: Bond-009 <bond.009@outlook.com> Backported-by: Joshua M. Boniface <joshua@boniface.me>
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs17
-rw-r--r--tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs29
2 files changed, 38 insertions, 8 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 125f8f225..05a7b7896 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -1185,28 +1185,29 @@ namespace MediaBrowser.Controller.Entities
return info;
}
- private string GetMediaSourceName(BaseItem item)
+ internal string GetMediaSourceName(BaseItem item)
{
var terms = new List<string>();
var path = item.Path;
if (item.IsFileProtocol && !string.IsNullOrEmpty(path))
{
+ var displayName = System.IO.Path.GetFileNameWithoutExtension(path);
if (HasLocalAlternateVersions)
{
- var displayName = System.IO.Path.GetFileNameWithoutExtension(path)
- .Replace(System.IO.Path.GetFileName(ContainingFolderPath), string.Empty, StringComparison.OrdinalIgnoreCase)
- .TrimStart(new char[] { ' ', '-' });
-
- if (!string.IsNullOrEmpty(displayName))
+ var containingFolderName = System.IO.Path.GetFileName(ContainingFolderPath);
+ if (displayName.Length > containingFolderName.Length && displayName.StartsWith(containingFolderName, StringComparison.OrdinalIgnoreCase))
{
- terms.Add(displayName);
+ var name = displayName.AsSpan(containingFolderName.Length).TrimStart([' ', '-']);
+ if (!name.IsWhiteSpace())
+ {
+ terms.Add(name.ToString());
+ }
}
}
if (terms.Count == 0)
{
- var displayName = System.IO.Path.GetFileNameWithoutExtension(path);
terms.Add(displayName);
}
}
diff --git a/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs b/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs
index f3ada59db..6171f12e4 100644
--- a/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs
+++ b/tests/Jellyfin.Controller.Tests/Entities/BaseItemTests.cs
@@ -1,4 +1,7 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Model.MediaInfo;
+using Moq;
using Xunit;
namespace Jellyfin.Controller.Tests.Entities;
@@ -14,4 +17,30 @@ public class BaseItemTests
[InlineData("1test 2", "0000000001test 0000000002")]
public void BaseItem_ModifySortChunks_Valid(string input, string expected)
=> Assert.Equal(expected, BaseItem.ModifySortChunks(input));
+
+ [Theory]
+ [InlineData("/Movies/Ted/Ted.mp4", "/Movies/Ted/Ted - Unrated Edition.mp4", "Ted", "Unrated Edition")]
+ [InlineData("/Movies/Deadpool 2 (2018)/Deadpool 2 (2018).mkv", "/Movies/Deadpool 2 (2018)/Deadpool 2 (2018) - Super Duper Cut.mkv", "Deadpool 2 (2018)", "Super Duper Cut")]
+ public void GetMediaSourceName_Valid(string primaryPath, string altPath, string name, string altName)
+ {
+ var mediaSourceManager = new Mock<IMediaSourceManager>();
+ mediaSourceManager.Setup(x => x.GetPathProtocol(It.IsAny<string>()))
+ .Returns((string x) => MediaProtocol.File);
+ BaseItem.MediaSourceManager = mediaSourceManager.Object;
+
+ var video = new Video()
+ {
+ Path = primaryPath
+ };
+
+ var videoAlt = new Video()
+ {
+ Path = altPath,
+ };
+
+ video.LocalAlternateVersions = [videoAlt.Path];
+
+ Assert.Equal(name, video.GetMediaSourceName(video));
+ Assert.Equal(altName, video.GetMediaSourceName(videoAlt));
+ }
}