Add support for filtering boxsets by parentId

This commit is contained in:
Shadowghost
2026-05-20 11:34:45 +02:00
parent 2b2db76948
commit 9dfcc0918f
3 changed files with 24 additions and 0 deletions

View File

@@ -280,10 +280,17 @@ public class ItemsController : BaseJellyfinApiController
var item = _libraryManager.GetParentItem(parentId, userId);
QueryResult<BaseItem> result;
Guid[] boxSetLinkedChildAncestorIds = [];
if (includeItemTypes.Length == 1
&& includeItemTypes[0] == BaseItemKind.BoxSet
&& item is not BoxSet)
{
var isBoxSetsLibrary = item is IHasCollectionType hct && hct.CollectionType == CollectionType.boxsets;
if (parentId.HasValue && item is not UserRootFolder && !isBoxSetsLibrary)
{
boxSetLinkedChildAncestorIds = [parentId.Value];
}
parentId = null;
item = _libraryManager.GetUserRootFolder();
}
@@ -405,6 +412,7 @@ public class ItemsController : BaseJellyfinApiController
MaxPremiereDate = maxPremiereDate?.ToUniversalTime(),
AudioLanguages = audioLanguages,
SubtitleLanguages = subtitleLanguages,
LinkedChildAncestorIds = boxSetLinkedChildAncestorIds,
};
if (ids.Length != 0 || !string.IsNullOrWhiteSpace(searchTerm))

View File

@@ -1027,6 +1027,15 @@ public sealed partial class BaseItemRepository
baseQuery = baseQuery.Where(e => e.Parents!.AsQueryable().Any(ancestorFilter));
}
if (filter.LinkedChildAncestorIds.Length > 0)
{
// Keep folder-like items (BoxSets, Playlists) whose linked children descend from any of the requested ancestor ids.
var linkedChildAncestorIds = filter.LinkedChildAncestorIds;
baseQuery = baseQuery.Where(e => context.LinkedChildren.Any(lc =>
lc.ParentId == e.Id
&& lc.Child!.Parents!.Any(a => linkedChildAncestorIds.Contains(a.ParentItemId))));
}
if (!string.IsNullOrWhiteSpace(filter.AncestorWithPresentationUniqueKey))
{
baseQuery = baseQuery

View File

@@ -21,6 +21,7 @@ namespace MediaBrowser.Controller.Entities
AlbumArtistIds = [];
AlbumIds = [];
AncestorIds = [];
LinkedChildAncestorIds = [];
ArtistIds = [];
BlockUnratedItems = [];
BoxSetLibraryFolders = [];
@@ -265,6 +266,12 @@ namespace MediaBrowser.Controller.Entities
public Guid[] AncestorIds { get; set; }
/// <summary>
/// Gets or sets a list of ancestor ids that the item's linked children must descend from.
/// Useful for filtering BoxSets/Playlists to only those that contain items from a specific library.
/// </summary>
public Guid[] LinkedChildAncestorIds { get; set; }
public Guid[] TopParentIds { get; set; }
public CollectionType?[] PresetViews { get; set; }