diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index f1b8b2d52..1682afb10 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -301,9 +301,10 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>Task{ItemsResult}.</returns> private ItemsResult GetItems(GetItems request) { + var parentItem = string.IsNullOrEmpty(request.ParentId) ? null : _libraryManager.GetItemById(request.ParentId); var user = request.UserId.HasValue ? _userManager.GetUserById(request.UserId.Value) : null; - var items = GetItemsToSerialize(request, user); + var items = GetItemsToSerialize(request, user, parentItem); items = items.AsParallel(); @@ -320,7 +321,7 @@ namespace MediaBrowser.Api.UserLibrary items = items.AsEnumerable(); - if (CollapseBoxSetItems(request)) + if (CollapseBoxSetItems(request, parentItem)) { items = _collectionManager.CollapseItemsWithinBoxSets(items, user); } @@ -348,8 +349,14 @@ namespace MediaBrowser.Api.UserLibrary }; } - private bool CollapseBoxSetItems(GetItems request) + private bool CollapseBoxSetItems(GetItems request, BaseItem parentItem) { + // Could end up stuck in a loop like this + if (parentItem is BoxSet) + { + return false; + } + var param = request.CollapseBoxSetItems; if (!param.HasValue) @@ -369,13 +376,14 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> /// <param name="request">The request.</param> /// <param name="user">The user.</param> + /// <param name="parentItem">The parent item.</param> /// <returns>IEnumerable{BaseItem}.</returns> /// <exception cref="System.InvalidOperationException"></exception> - private IEnumerable<BaseItem> GetItemsToSerialize(GetItems request, User user) + private IEnumerable<BaseItem> GetItemsToSerialize(GetItems request, User user, BaseItem parentItem) { var item = string.IsNullOrEmpty(request.ParentId) ? user == null ? _libraryManager.RootFolder : user.RootFolder : - _libraryManager.GetItemById(request.ParentId); + parentItem; // Default list type = children IEnumerable<BaseItem> items; @@ -1382,7 +1390,7 @@ namespace MediaBrowser.Api.UserLibrary { return false; } - + return true; } |
