From 46ffe0af9cc45f84ac91e09991e8b4fde62867ad Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Fri, 27 Feb 2026 20:07:09 +0100 Subject: [PATCH] Fix version promotion if multiple versions change --- Emby.Server.Implementations/Library/LibraryManager.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 0ad63ef84a..d4c03ecc75 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -410,7 +410,8 @@ namespace Emby.Server.Implementations.Library // OwnerId check: items with OwnerId set are alternate versions or extras, not primaries if (item is Video video && !video.PrimaryVersionId.HasValue && video.OwnerId.IsEmpty()) { - var alternateVersions = GetLocalAlternateVersionIds(video) + var localAlternateIds = GetLocalAlternateVersionIds(video).ToHashSet(); + var alternateVersions = localAlternateIds .Concat(GetLinkedAlternateVersions(video).Select(v => v.Id)) .Distinct() .Select(id => GetItemById(id)) @@ -447,7 +448,8 @@ namespace Emby.Server.Implementations.Library foreach (var alternate in alternateVersions.Skip(1)) { alternate.SetPrimaryVersionId(newPrimary.Id); - alternate.OwnerId = Guid.Empty; + // Only set OwnerId for local alternates; linked alternates are independent items + alternate.OwnerId = localAlternateIds.Contains(alternate.Id) ? newPrimary.Id : Guid.Empty; alternate.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).GetAwaiter().GetResult(); } }