|
|
@@ -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;
|
|
|
- }
|
|
|
+ return param.Value && AllowBoxSetCollapsing(query);
|
|
|
+ }
|
|
|
|
|
|
- if (query.IncludeItemTypes.Length == 0
|
|
|
- || query.IncludeItemTypes.Any(type => type == BaseItemKind.Movie || type == BaseItemKind.Series))
|
|
|
- {
|
|
|
- param = true;
|
|
|
- }
|
|
|
+ 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 param.HasValue && param.Value && AllowBoxSetCollapsing(query);
|
|
|
+ return (queryHasMovies || queryHasSeries) && AllowBoxSetCollapsing(query);
|
|
|
}
|
|
|
|
|
|
private static bool AllowBoxSetCollapsing(InternalItemsQuery request)
|