diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-25 21:03:46 +0100 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-25 21:03:46 +0100 |
| commit | 2d0d497961a7ca990384bd180f381824d5591cb8 (patch) | |
| tree | 3648fbc3612af0855b3a7328649b95045a87900c /Emby.Server.Implementations/Library | |
| parent | 4bd9dbe9108c55bc788e35346498f710187d401d (diff) | |
Update saved metadata on primary change
Diffstat (limited to 'Emby.Server.Implementations/Library')
| -rw-r--r-- | Emby.Server.Implementations/Library/LibraryManager.cs | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index c0782c8f9b..144238e3e0 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -441,7 +441,7 @@ namespace Emby.Server.Implementations.Library 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); + RerouteLinkedChildReferencesAsync(video.Id, newPrimary.Id).GetAwaiter().GetResult(); // Update remaining alternates to point to new primary foreach (var alternate in alternateVersions.Skip(1)) @@ -455,7 +455,7 @@ namespace Emby.Server.Implementations.Library else if (item is Video alternateVideo && alternateVideo.PrimaryVersionId.HasValue) { // If deleting an alternate version, re-route references to its primary - _itemRepository.RerouteLinkedChildren(alternateVideo.Id, alternateVideo.PrimaryVersionId.Value); + RerouteLinkedChildReferencesAsync(alternateVideo.Id, alternateVideo.PrimaryVersionId.Value).GetAwaiter().GetResult(); } var children = item.IsFolder @@ -3655,9 +3655,26 @@ namespace Emby.Server.Implementations.Library } /// <inheritdoc /> - public int RerouteLinkedChildReferences(Guid fromChildId, Guid toChildId) + public async Task RerouteLinkedChildReferencesAsync(Guid fromChildId, Guid toChildId) { - return _itemRepository.RerouteLinkedChildren(fromChildId, toChildId); + var affectedParentIds = _itemRepository.RerouteLinkedChildren(fromChildId, toChildId); + + // Update in-memory LinkedChildren and re-save metadata (NFO) for affected parents + foreach (var parentId in affectedParentIds) + { + if (GetItemById(parentId) is Folder parent) + { + foreach (var lc in parent.LinkedChildren) + { + if (lc.ItemId.HasValue && lc.ItemId.Value.Equals(fromChildId)) + { + lc.ItemId = toChildId; + } + } + + await RunMetadataSavers(parent, ItemUpdateType.MetadataEdit).ConfigureAwait(false); + } + } } /// <inheritdoc /> |
