aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library/LibraryManager.cs
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2026-01-30 21:58:24 +0100
committerShadowghost <Ghost_of_Stone@web.de>2026-01-31 19:21:36 +0100
commit694db80d4c8e83ff381af56d2a3dde29e0855c3d (patch)
tree4e23899944d4be1389f6f92d3bb98b400bb92a74 /Emby.Server.Implementations/Library/LibraryManager.cs
parenta650148dfd9920986e11d414a71df5b1a7f604e8 (diff)
Reroute on version removal
Diffstat (limited to 'Emby.Server.Implementations/Library/LibraryManager.cs')
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs15
1 files changed, 15 insertions, 0 deletions
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);
}
+
+ /// <inheritdoc />
+ public int RerouteLinkedChildReferences(Guid fromChildId, Guid toChildId)
+ {
+ return _itemRepository.RerouteLinkedChildren(fromChildId, toChildId);
+ }
}
}