Merge pull request #12558 from Bond-009/altsourcename

Fix alt version name generation
This commit is contained in:
Bond-009 2024-09-03 09:20:15 +02:00 committed by GitHub
commit 70f4f2e8c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 8 deletions

View File

@ -1180,28 +1180,29 @@ namespace MediaBrowser.Controller.Entities
return info; return info;
} }
private string GetMediaSourceName(BaseItem item) internal string GetMediaSourceName(BaseItem item)
{ {
var terms = new List<string>(); var terms = new List<string>();
var path = item.Path; var path = item.Path;
if (item.IsFileProtocol && !string.IsNullOrEmpty(path)) if (item.IsFileProtocol && !string.IsNullOrEmpty(path))
{ {
var displayName = System.IO.Path.GetFileNameWithoutExtension(path);
if (HasLocalAlternateVersions) if (HasLocalAlternateVersions)
{ {
var displayName = System.IO.Path.GetFileNameWithoutExtension(path) var containingFolderName = System.IO.Path.GetFileName(ContainingFolderPath);
.Replace(System.IO.Path.GetFileName(ContainingFolderPath), string.Empty, StringComparison.OrdinalIgnoreCase) if (displayName.Length > containingFolderName.Length && displayName.StartsWith(containingFolderName, StringComparison.OrdinalIgnoreCase))
.TrimStart(new char[] { ' ', '-' });
if (!string.IsNullOrEmpty(displayName))
{ {
terms.Add(displayName); var name = displayName.AsSpan(containingFolderName.Length).TrimStart([' ', '-']);
if (!name.IsWhiteSpace())
{
terms.Add(name.ToString());
}
} }
} }
if (terms.Count == 0) if (terms.Count == 0)
{ {
var displayName = System.IO.Path.GetFileNameWithoutExtension(path);
terms.Add(displayName); terms.Add(displayName);
} }
} }

View File

@ -1,4 +1,7 @@
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.MediaInfo;
using Moq;
using Xunit; using Xunit;
namespace Jellyfin.Controller.Tests.Entities; namespace Jellyfin.Controller.Tests.Entities;
@ -14,4 +17,30 @@ public class BaseItemTests
[InlineData("1test 2", "0000000001test 0000000002")] [InlineData("1test 2", "0000000001test 0000000002")]
public void BaseItem_ModifySortChunks_Valid(string input, string expected) public void BaseItem_ModifySortChunks_Valid(string input, string expected)
=> Assert.Equal(expected, BaseItem.ModifySortChunks(input)); => 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));
}
} }