aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities
diff options
context:
space:
mode:
authorShadowghost <Ghost_of_Stone@web.de>2026-02-15 23:12:52 +0100
committerShadowghost <Ghost_of_Stone@web.de>2026-02-15 23:12:52 +0100
commit3439d3c017a06604e7b471a1063a8467306f78f2 (patch)
tree356fbec32efdba1456b6103d95d1463f092b1bb1 /MediaBrowser.Controller/Entities
parent837c7d4ed3edc8c4fcf2640bd6341bb792888244 (diff)
Migrate PrimaryVersionId to GUID and fix assignment
Diffstat (limited to 'MediaBrowser.Controller/Entities')
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs34
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));