aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/VideosController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Api/Controllers/VideosController.cs')
-rw-r--r--Jellyfin.Api/Controllers/VideosController.cs21
1 files changed, 12 insertions, 9 deletions
diff --git a/Jellyfin.Api/Controllers/VideosController.cs b/Jellyfin.Api/Controllers/VideosController.cs
index 394a95ee5f..2c2cbf1ec6 100644
--- a/Jellyfin.Api/Controllers/VideosController.cs
+++ b/Jellyfin.Api/Controllers/VideosController.cs
@@ -148,9 +148,9 @@ public class VideosController : BaseJellyfinApiController
return NotFound();
}
- if (item.LinkedAlternateVersions.Length == 0)
+ if (item.LinkedAlternateVersions.Length == 0 && item.PrimaryVersionId.HasValue)
{
- item = _libraryManager.GetItemById<Video>(Guid.Parse(item.PrimaryVersionId));
+ item = _libraryManager.GetItemById<Video>(item.PrimaryVersionId.Value);
}
if (item is null)
@@ -158,7 +158,7 @@ public class VideosController : BaseJellyfinApiController
return NotFound();
}
- foreach (var link in item.GetLinkedAlternateVersions())
+ foreach (var link in _libraryManager.GetLinkedAlternateVersions(item))
{
link.SetPrimaryVersionId(null);
link.LinkedAlternateVersions = Array.Empty<LinkedChild>();
@@ -198,7 +198,7 @@ public class VideosController : BaseJellyfinApiController
return BadRequest("Please supply at least two videos to merge.");
}
- var primaryVersion = items.FirstOrDefault(i => i.MediaSourceCount > 1 && string.IsNullOrEmpty(i.PrimaryVersionId));
+ var primaryVersion = items.FirstOrDefault(i => i.MediaSourceCount > 1 && !i.PrimaryVersionId.HasValue);
if (primaryVersion is null)
{
primaryVersion = items
@@ -219,22 +219,25 @@ public class VideosController : BaseJellyfinApiController
foreach (var item in items.Where(i => !i.Id.Equals(primaryVersion.Id)))
{
- item.SetPrimaryVersionId(primaryVersion.Id.ToString("N", CultureInfo.InvariantCulture));
+ item.SetPrimaryVersionId(primaryVersion.Id);
await item.UpdateToRepositoryAsync(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
- if (!alternateVersionsOfPrimary.Any(i => string.Equals(i.Path, item.Path, StringComparison.OrdinalIgnoreCase)))
+ // Re-route any playlist/collection references from this item to the primary
+ await _libraryManager.RerouteLinkedChildReferencesAsync(item.Id, primaryVersion.Id).ConfigureAwait(false);
+
+ if (!alternateVersionsOfPrimary.Any(i => i.ItemId.HasValue && i.ItemId.Value.Equals(item.Id)))
{
alternateVersionsOfPrimary.Add(new LinkedChild
{
- Path = item.Path,
- ItemId = item.Id
+ ItemId = item.Id,
+ Type = LinkedChildType.LinkedAlternateVersion
});
}
foreach (var linkedItem in item.LinkedAlternateVersions)
{
- if (!alternateVersionsOfPrimary.Any(i => string.Equals(i.Path, linkedItem.Path, StringComparison.OrdinalIgnoreCase)))
+ if (linkedItem.ItemId.HasValue && !alternateVersionsOfPrimary.Any(i => i.ItemId.HasValue && i.ItemId.Value.Equals(linkedItem.ItemId.Value)))
{
alternateVersionsOfPrimary.Add(linkedItem);
}