aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary/ItemsService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/ItemsService.cs')
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs43
1 files changed, 43 insertions, 0 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index b040d3dd8..ec00be988 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -238,6 +238,9 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "HasOfficialRating", Description = "Optional filter by items that have official ratings", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public bool? HasOfficialRating { get; set; }
+
+ [ApiMember(Name = "CollapseBoxSetItems", Description = "Whether or not to hide items behind their boxsets.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool CollapseBoxSetItems { get; set; }
}
/// <summary>
@@ -315,6 +318,11 @@ namespace MediaBrowser.Api.UserLibrary
items = items.AsEnumerable();
+ if (request.CollapseBoxSetItems)
+ {
+ items = CollapseItemsWithinBoxSets(items, user);
+ }
+
items = ApplySortOrder(request, items, user, _libraryManager);
// This must be the last filter
@@ -1218,6 +1226,41 @@ namespace MediaBrowser.Api.UserLibrary
return false;
}
+ private IEnumerable<BaseItem> CollapseItemsWithinBoxSets(IEnumerable<BaseItem> items, User user)
+ {
+ var itemsToCollapse = new List<ISupportsBoxSetGrouping>();
+ var boxsets = new List<BaseItem>();
+
+ var list = items.ToList();
+
+ foreach (var item in list.OfType<ISupportsBoxSetGrouping>())
+ {
+ var currentBoxSets = item.BoxSetIdList
+ .Select(i => _libraryManager.GetItemById(i))
+ .Where(i => i != null && i.IsVisible(user))
+ .ToList();
+
+ if (currentBoxSets.Count > 0)
+ {
+ itemsToCollapse.Add(item);
+ boxsets.AddRange(currentBoxSets);
+ }
+ }
+
+ return list.Except(itemsToCollapse.Cast<BaseItem>()).Concat(boxsets).Distinct();
+ }
+
+ private bool AllowBoxSetCollapsing(GetItems request)
+ {
+ // Only allow when using default sort order
+ if (!string.IsNullOrEmpty(request.SortBy) && !string.Equals(request.SortBy, "SortName", StringComparison.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+
+ return true;
+ }
+
internal static IEnumerable<BaseItem> FilterForAdjacency(IEnumerable<BaseItem> items, string adjacentToId)
{
var list = items.ToList();