Backport pull request #15373 from jellyfin/release-10.11.z

Fix collection grouping in mixed libraries

Original-merge: 13c4517a66

Merged-by: crobibero <cody@robibe.ro>

Backported-by: Bond_009 <bond.009@outlook.com>
This commit is contained in:
theguymadmax 2025-11-17 14:08:49 -05:00 committed by Bond_009
parent c2c4c0adbf
commit c805c5e2b1
1 changed files with 57 additions and 18 deletions

View File

@ -1052,12 +1052,49 @@ namespace MediaBrowser.Controller.Entities
{
ArgumentNullException.ThrowIfNull(items);
if (CollapseBoxSetItems(query, queryParent, user, configurationManager))
if (!CollapseBoxSetItems(query, queryParent, user, configurationManager))
{
items = collectionManager.CollapseItemsWithinBoxSets(items, user);
return items;
}
return items;
var config = configurationManager.Configuration;
bool collapseMovies = config.EnableGroupingMoviesIntoCollections;
bool collapseSeries = config.EnableGroupingShowsIntoCollections;
if (user is null || (collapseMovies && collapseSeries))
{
return collectionManager.CollapseItemsWithinBoxSets(items, user);
}
if (!collapseMovies && !collapseSeries)
{
return items;
}
var collapsibleItems = new List<BaseItem>();
var remainingItems = new List<BaseItem>();
foreach (var item in items)
{
if ((collapseMovies && item is Movie) || (collapseSeries && item is Series))
{
collapsibleItems.Add(item);
}
else
{
remainingItems.Add(item);
}
}
if (collapsibleItems.Count == 0)
{
return remainingItems;
}
var collapsedItems = collectionManager.CollapseItemsWithinBoxSets(collapsibleItems, user);
return collapsedItems.Concat(remainingItems);
}
private static bool CollapseBoxSetItems(
@ -1088,24 +1125,26 @@ namespace MediaBrowser.Controller.Entities
}
var param = query.CollapseBoxSetItems;
if (!param.HasValue)
if (param.HasValue)
{
if (user is not null && query.IncludeItemTypes.Any(type =>
(type == BaseItemKind.Movie && !configurationManager.Configuration.EnableGroupingMoviesIntoCollections) ||
(type == BaseItemKind.Series && !configurationManager.Configuration.EnableGroupingShowsIntoCollections)))
{
return false;
}
if (query.IncludeItemTypes.Length == 0
|| query.IncludeItemTypes.Any(type => type == BaseItemKind.Movie || type == BaseItemKind.Series))
{
param = true;
}
return param.Value && AllowBoxSetCollapsing(query);
}
return param.HasValue && param.Value && AllowBoxSetCollapsing(query);
var config = configurationManager.Configuration;
bool queryHasMovies = query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(BaseItemKind.Movie);
bool queryHasSeries = query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(BaseItemKind.Series);
bool collapseMovies = config.EnableGroupingMoviesIntoCollections;
bool collapseSeries = config.EnableGroupingShowsIntoCollections;
if (user is not null)
{
bool canCollapse = (queryHasMovies && collapseMovies) || (queryHasSeries && collapseSeries);
return canCollapse && AllowBoxSetCollapsing(query);
}
return (queryHasMovies || queryHasSeries) && AllowBoxSetCollapsing(query);
}
private static bool AllowBoxSetCollapsing(InternalItemsQuery request)