From 694db80d4c8e83ff381af56d2a3dde29e0855c3d Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Fri, 30 Jan 2026 21:58:24 +0100 Subject: Reroute on version removal --- Emby.Server.Implementations/Library/LibraryManager.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'Emby.Server.Implementations/Library/LibraryManager.cs') diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 2acfd68c36..830c918541 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -428,6 +428,9 @@ namespace Emby.Server.Implementations.Library newPrimary.SetPrimaryVersionId(null); newPrimary.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).GetAwaiter().GetResult(); + // Re-route playlist/collection references from deleted primary to new primary + _itemRepository.RerouteLinkedChildren(video.Id, newPrimary.Id); + // Update remaining alternates to point to new primary foreach (var alternate in alternateVersions.Skip(1)) { @@ -436,6 +439,12 @@ namespace Emby.Server.Implementations.Library } } } + else if (item is Video alternateVideo && !string.IsNullOrEmpty(alternateVideo.PrimaryVersionId) + && Guid.TryParse(alternateVideo.PrimaryVersionId, out var primaryId)) + { + // If deleting an alternate version, re-route references to its primary + _itemRepository.RerouteLinkedChildren(alternateVideo.Id, primaryId); + } var children = item.IsFolder ? ((Folder)item).GetRecursiveChildren(false) @@ -3480,5 +3489,11 @@ namespace Emby.Server.Implementations.Library _fileSystem.CreateShortcut(lnk, _appHost.ReverseVirtualPath(path)); RemoveContentTypeOverrides(path); } + + /// + public int RerouteLinkedChildReferences(Guid fromChildId, Guid toChildId) + { + return _itemRepository.RerouteLinkedChildren(fromChildId, toChildId); + } } } -- cgit v1.2.3