diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-15 23:12:52 +0100 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-15 23:12:52 +0100 |
| commit | 3439d3c017a06604e7b471a1063a8467306f78f2 (patch) | |
| tree | 356fbec32efdba1456b6103d95d1463f092b1bb1 /MediaBrowser.Controller/Entities | |
| parent | 837c7d4ed3edc8c4fcf2640bd6341bb792888244 (diff) | |
Migrate PrimaryVersionId to GUID and fix assignment
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 34 |
2 files changed, 18 insertions, 18 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 7e4205b6ba..525a4bc334 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -480,7 +480,7 @@ namespace MediaBrowser.Controller.Entities if (item is Video video) { // Check via PrimaryVersionId - if (!string.IsNullOrEmpty(video.PrimaryVersionId)) + if (video.PrimaryVersionId.HasValue) { Logger.LogDebug("Item is an alternate version (via PrimaryVersionId), skipping deletion: {Path}", item.Path ?? item.Name); continue; diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 02b3b31d3b..21b5d5d77b 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -41,7 +41,7 @@ namespace MediaBrowser.Controller.Entities } [JsonIgnore] - public string PrimaryVersionId { get; set; } + public Guid? PrimaryVersionId { get; set; } public string[] AdditionalParts { get; set; } @@ -254,9 +254,9 @@ namespace MediaBrowser.Controller.Entities private int GetMediaSourceCount(HashSet<Guid> callstack = null) { callstack ??= new(); - if (!string.IsNullOrEmpty(PrimaryVersionId)) + if (PrimaryVersionId.HasValue) { - var item = LibraryManager.GetItemById(PrimaryVersionId); + var item = LibraryManager.GetItemById(PrimaryVersionId.Value); if (item is Video video) { if (callstack.Contains(video.Id)) @@ -317,25 +317,17 @@ namespace MediaBrowser.Controller.Entities return list; } - public void SetPrimaryVersionId(string id) + public void SetPrimaryVersionId(Guid? id) { - if (string.IsNullOrEmpty(id)) - { - PrimaryVersionId = null; - } - else - { - PrimaryVersionId = id; - } - + PrimaryVersionId = id; PresentationUniqueKey = CreatePresentationUniqueKey(); } public override string CreatePresentationUniqueKey() { - if (!string.IsNullOrEmpty(PrimaryVersionId)) + if (PrimaryVersionId.HasValue) { - return PrimaryVersionId; + return PrimaryVersionId.Value.ToString("N", CultureInfo.InvariantCulture); } return base.CreatePresentationUniqueKey(); @@ -483,6 +475,7 @@ namespace MediaBrowser.Controller.Entities if (altVideo is not null) { altVideo.OwnerId = Id; + altVideo.SetPrimaryVersionId(Id); LibraryManager.CreateItem(altVideo, GetParent()); } } @@ -495,6 +488,13 @@ namespace MediaBrowser.Controller.Entities if (LibraryManager.GetItemById(id) is Video video) { LibraryManager.UpsertLinkedChild(Id, video.Id, LinkedChildType.LocalAlternateVersion); + + // Ensure PrimaryVersionId is set for existing alternate versions that may not have it + if (!video.PrimaryVersionId.HasValue) + { + video.SetPrimaryVersionId(Id); + await video.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false); + } } } @@ -612,9 +612,9 @@ namespace MediaBrowser.Controller.Entities list.AddRange(LibraryManager.GetLinkedAlternateVersions(this).Select(i => ((BaseItem)i, MediaSourceType.Grouping))); - if (!string.IsNullOrEmpty(PrimaryVersionId)) + if (PrimaryVersionId.HasValue) { - if (LibraryManager.GetItemById(PrimaryVersionId) is Video primary) + if (LibraryManager.GetItemById(PrimaryVersionId.Value) is Video primary) { var existingIds = list.Select(i => i.Item1.Id).ToList(); list.Add((primary, MediaSourceType.Grouping)); |
