From 056dcf7e81049a9d92064d5f91dadfbcf9093a63 Mon Sep 17 00:00:00 2001 From: JPVenson Date: Thu, 14 Nov 2024 09:04:35 +0000 Subject: Added Pipeline debug code --- Jellyfin.Api/Controllers/LibraryStructureController.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'Jellyfin.Api/Controllers/LibraryStructureController.cs') diff --git a/Jellyfin.Api/Controllers/LibraryStructureController.cs b/Jellyfin.Api/Controllers/LibraryStructureController.cs index 93c2393f3..c52068000 100644 --- a/Jellyfin.Api/Controllers/LibraryStructureController.cs +++ b/Jellyfin.Api/Controllers/LibraryStructureController.cs @@ -106,7 +106,15 @@ public class LibraryStructureController : BaseJellyfinApiController [FromQuery] string name, [FromQuery] bool refreshLibrary = false) { - await _libraryManager.RemoveVirtualFolder(name, refreshLibrary).ConfigureAwait(false); + try + { + await _libraryManager.RemoveVirtualFolder(name, refreshLibrary).ConfigureAwait(false); + } + catch (Exception ex) + { + return BadRequest(ex.ToString()); + } + return NoContent(); } -- cgit v1.2.3 From 432cfba2e2516709dfaea004a2d74095aac6a6f3 Mon Sep 17 00:00:00 2001 From: JPVenson Date: Thu, 14 Nov 2024 09:55:32 +0000 Subject: Reverted Test code --- Jellyfin.Api/Controllers/LibraryStructureController.cs | 9 +-------- Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | 5 +++++ 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'Jellyfin.Api/Controllers/LibraryStructureController.cs') diff --git a/Jellyfin.Api/Controllers/LibraryStructureController.cs b/Jellyfin.Api/Controllers/LibraryStructureController.cs index c52068000..c3e3b659b 100644 --- a/Jellyfin.Api/Controllers/LibraryStructureController.cs +++ b/Jellyfin.Api/Controllers/LibraryStructureController.cs @@ -106,14 +106,7 @@ public class LibraryStructureController : BaseJellyfinApiController [FromQuery] string name, [FromQuery] bool refreshLibrary = false) { - try - { - await _libraryManager.RemoveVirtualFolder(name, refreshLibrary).ConfigureAwait(false); - } - catch (Exception ex) - { - return BadRequest(ex.ToString()); - } + await _libraryManager.RemoveVirtualFolder(name, refreshLibrary).ConfigureAwait(false); return NoContent(); } diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index f1afd3543..14300d237 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -1290,6 +1290,11 @@ public sealed class BaseItemRepository( { foreach (var ancestorId in item.AncestorIds) { + if (!context.BaseItems.Any(f => f.Id == ancestorId)) + { + throw new InvalidOperationException($"Cannot link non-existent parent: {ancestorId}"); + } + context.AncestorIds.Add(new AncestorId() { ParentItemId = ancestorId, -- cgit v1.2.3 From aea255f91026598c297d11f032cc483b8608616d Mon Sep 17 00:00:00 2001 From: JPVenson Date: Thu, 14 Nov 2024 10:14:41 +0000 Subject: Deterministic tests my *** --- Jellyfin.Api/Controllers/LibraryStructureController.cs | 9 ++++++++- Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | 4 ++-- .../Controllers/LibraryStructureControllerTests.cs | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) (limited to 'Jellyfin.Api/Controllers/LibraryStructureController.cs') diff --git a/Jellyfin.Api/Controllers/LibraryStructureController.cs b/Jellyfin.Api/Controllers/LibraryStructureController.cs index c3e3b659b..7838c2f61 100644 --- a/Jellyfin.Api/Controllers/LibraryStructureController.cs +++ b/Jellyfin.Api/Controllers/LibraryStructureController.cs @@ -88,7 +88,14 @@ public class LibraryStructureController : BaseJellyfinApiController libraryOptions.PathInfos = Array.ConvertAll(paths, i => new MediaPathInfo(i)); } - await _libraryManager.AddVirtualFolder(name, collectionType, libraryOptions, refreshLibrary).ConfigureAwait(false); + try + { + await _libraryManager.AddVirtualFolder(name, collectionType, libraryOptions, refreshLibrary).ConfigureAwait(false); + } + catch (System.Exception ex) + { + return BadRequest(ex.ToString()); + } return NoContent(); } diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 14300d237..f62d6fc1a 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -83,7 +83,7 @@ public sealed class BaseItemRepository( context.Peoples.Where(e => e.BaseItems!.Count == 0).ExecuteDelete(); context.Chapters.Where(e => e.ItemId == id).ExecuteDelete(); context.MediaStreamInfos.Where(e => e.ItemId == id).ExecuteDelete(); - context.AncestorIds.Where(e => e.ItemId == id).ExecuteDelete(); + context.AncestorIds.Where(e => e.ItemId == id || e.ParentItemId == id).ExecuteDelete(); context.ItemValuesMap.Where(e => e.ItemId == id).ExecuteDelete(); context.ItemValues.Where(e => e.BaseItemsMap!.Count == 0).ExecuteDelete(); context.BaseItemImageInfos.Where(e => e.ItemId == id).ExecuteDelete(); @@ -1292,7 +1292,7 @@ public sealed class BaseItemRepository( { if (!context.BaseItems.Any(f => f.Id == ancestorId)) { - throw new InvalidOperationException($"Cannot link non-existent parent: {ancestorId}"); + continue; } context.AncestorIds.Add(new AncestorId() diff --git a/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs b/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs index dc8c33c73..6b749f0a8 100644 --- a/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs +++ b/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs @@ -77,7 +77,7 @@ public sealed class LibraryStructureControllerTests : IClassFixture Date: Thu, 14 Nov 2024 10:25:49 +0000 Subject: reverted dbg code --- Jellyfin.Api/Controllers/LibraryStructureController.cs | 11 +++-------- .../Controllers/LibraryStructureControllerTests.cs | 4 ++-- 2 files changed, 5 insertions(+), 10 deletions(-) (limited to 'Jellyfin.Api/Controllers/LibraryStructureController.cs') diff --git a/Jellyfin.Api/Controllers/LibraryStructureController.cs b/Jellyfin.Api/Controllers/LibraryStructureController.cs index 7838c2f61..55000fc91 100644 --- a/Jellyfin.Api/Controllers/LibraryStructureController.cs +++ b/Jellyfin.Api/Controllers/LibraryStructureController.cs @@ -88,14 +88,7 @@ public class LibraryStructureController : BaseJellyfinApiController libraryOptions.PathInfos = Array.ConvertAll(paths, i => new MediaPathInfo(i)); } - try - { - await _libraryManager.AddVirtualFolder(name, collectionType, libraryOptions, refreshLibrary).ConfigureAwait(false); - } - catch (System.Exception ex) - { - return BadRequest(ex.ToString()); - } + await _libraryManager.AddVirtualFolder(name, collectionType, libraryOptions, refreshLibrary).ConfigureAwait(false); return NoContent(); } @@ -106,6 +99,7 @@ public class LibraryStructureController : BaseJellyfinApiController /// The name of the folder. /// Whether to refresh the library. /// Folder removed. + /// Folder not found. /// A . [HttpDelete] [ProducesResponseType(StatusCodes.Status204NoContent)] @@ -113,6 +107,7 @@ public class LibraryStructureController : BaseJellyfinApiController [FromQuery] string name, [FromQuery] bool refreshLibrary = false) { + // TODO: refactor! this relies on an FileNotFound exception to return NotFound when attempting to remove a library that does not exist. await _libraryManager.RemoveVirtualFolder(name, refreshLibrary).ConfigureAwait(false); return NoContent(); diff --git a/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs b/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs index 6b749f0a8..0376f57cc 100644 --- a/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs +++ b/tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs @@ -77,7 +77,7 @@ public sealed class LibraryStructureControllerTests : IClassFixture