diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-21 19:58:00 +0100 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-21 19:58:00 +0100 |
| commit | 0f1a6fe4c27fa4c91b7e8dcd577960c568fa3c03 (patch) | |
| tree | 4001c37074b8efc538f68c85147b6165b7b1125c /Jellyfin.Server.Implementations/Item | |
| parent | 561e78efb40c2025bdd02df87da7d456cf97c045 (diff) | |
Fix IsPlayed filter and setting BoxSet played/unplayed
Diffstat (limited to 'Jellyfin.Server.Implementations/Item')
| -rw-r--r-- | Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 2c0ec69941..c0476b00e7 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -3323,6 +3323,33 @@ public sealed class BaseItemRepository baseQuery = baseQuery.Where(s => !playedSeriesIdList.Contains(s.Id)); } } + else if (filter.IncludeItemTypes.Length == 1 && filter.IncludeItemTypes[0] == BaseItemKind.BoxSet) + { + var boxSetIds = baseQuery.Select(e => e.Id).ToList(); + var userId = filter.User!.Id; + var playedBoxSetIds = new List<Guid>(boxSetIds.Count); + foreach (var boxSetId in boxSetIds) + { + var descendantIds = DescendantQueryHelper.GetAllDescendantIds(context, boxSetId); + var leafItems = context.BaseItems + .Where(e => descendantIds.Contains(e.Id) && !e.IsFolder && !e.IsVirtualItem); + + if (leafItems.Any() + && leafItems.All(f => f.UserData!.Any(ud => ud.UserId == userId && ud.Played))) + { + playedBoxSetIds.Add(boxSetId); + } + } + + if (filter.IsPlayed.Value) + { + baseQuery = baseQuery.Where(s => playedBoxSetIds.Contains(s.Id)); + } + else + { + baseQuery = baseQuery.Where(s => !playedBoxSetIds.Contains(s.Id)); + } + } else { var playedItemIds = context.UserData |
