diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-09 09:13:31 +0100 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-02-09 09:13:31 +0100 |
| commit | 5dcec831f3bc83761d8170d25eab2cca310ae7cb (patch) | |
| tree | f38bdefeea4c11abe7bb3d62ecab48c8c002c62b /MediaBrowser.Controller/Entities | |
| parent | 737abe6f3a48a1fa792ff2d24dad45a04880717f (diff) | |
Fix naming filter when collapsing into boxsets
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index 4916ead69a..1b574a2814 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -900,6 +900,11 @@ namespace MediaBrowser.Controller.Entities if (user is not null) { items = CollapseBoxSetItemsIfNeeded(items, query, this, user, ConfigurationManager, CollectionManager); + + // After collapse, BoxSets may have replaced items whose names matched the filter + // but the BoxSet's own name may not match. Re-apply name filtering so BoxSets + // appear under the correct letter (e.g. "Jump Street" under J, not under #). + items = ApplyNameFilter(items, query); } var filteredItems = items as IReadOnlyList<BaseItem> ?? items.ToList(); @@ -913,6 +918,26 @@ namespace MediaBrowser.Controller.Entities return result; } + private static IEnumerable<BaseItem> ApplyNameFilter(IEnumerable<BaseItem> items, InternalItemsQuery query) + { + if (!string.IsNullOrWhiteSpace(query.NameStartsWith)) + { + items = items.Where(i => i.SortName.StartsWith(query.NameStartsWith, StringComparison.OrdinalIgnoreCase)); + } + + if (!string.IsNullOrWhiteSpace(query.NameStartsWithOrGreater)) + { + items = items.Where(i => string.Compare(i.SortName, query.NameStartsWithOrGreater, StringComparison.OrdinalIgnoreCase) >= 0); + } + + if (!string.IsNullOrWhiteSpace(query.NameLessThan)) + { + items = items.Where(i => string.Compare(i.SortName, query.NameLessThan, StringComparison.OrdinalIgnoreCase) < 0); + } + + return items; + } + private static IEnumerable<BaseItem> CollapseBoxSetItemsIfNeeded( IEnumerable<BaseItem> items, InternalItemsQuery query, |
