diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-19 13:35:00 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-19 13:35:00 -0400 |
| commit | 13d997a97a68ba5fb8c58a775e6eb84b91ded3b7 (patch) | |
| tree | 6d61bd20546786fde744887f602029bde3779e8b | |
| parent | f9c00a6145ae6492ae68509887bcae382255c12b (diff) | |
added next/previous episode/season links
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index fbf41eb38..c732e27d6 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -166,6 +166,9 @@ namespace MediaBrowser.Api.UserLibrary [ApiMember(Name = "HasTrailer", Description = "Optional filter by items with trailers.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public bool? HasTrailer { get; set; } + [ApiMember(Name = "AdjacentTo", Description = "Optional. Return items that are siblings of a supplied item.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string AdjacentTo { get; set; } + /// <summary> /// Gets the order by. /// </summary> @@ -240,7 +243,7 @@ namespace MediaBrowser.Api.UserLibrary items = items.AsParallel(); - items = ApplyAdditionalFilters(request, items); + items = ApplyAdditionalFilters(request, items, user); // Apply filters // Run them starting with the ones that are likely to reduce the list the most @@ -325,9 +328,6 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>IEnumerable{BaseItem}.</returns> internal static IEnumerable<BaseItem> ApplyFilter(IEnumerable<BaseItem> items, ItemFilter filter, User user, IUserDataRepository repository) { - // Avoids implicitly captured closure - var currentUser = user; - switch (filter) { case ItemFilter.Likes: @@ -397,7 +397,7 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="request">The request.</param> /// <param name="items">The items.</param> /// <returns>IEnumerable{BaseItem}.</returns> - internal static IEnumerable<BaseItem> ApplyAdditionalFilters(GetItems request, IEnumerable<BaseItem> items) + private IEnumerable<BaseItem> ApplyAdditionalFilters(GetItems request, IEnumerable<BaseItem> items, User user) { // Artists if (!string.IsNullOrEmpty(request.Artists)) @@ -424,6 +424,30 @@ namespace MediaBrowser.Api.UserLibrary }); } + if (!string.IsNullOrEmpty(request.AdjacentTo)) + { + var item = DtoBuilder.GetItemByClientId(request.AdjacentTo, _userManager, _libraryManager); + + var allSiblings = item.Parent.GetChildren(user).OrderBy(i => i.SortName).ToList(); + + var index = allSiblings.IndexOf(item); + + var previousId = Guid.Empty; + var nextId = Guid.Empty; + + if (index > 0) + { + previousId = allSiblings[index - 1].Id; + } + + if (index < allSiblings.Count - 1) + { + nextId = allSiblings[index + 1].Id; + } + + items = items.Where(i => i.Id == previousId || i.Id == nextId); + } + // Min official rating if (!string.IsNullOrEmpty(request.MinOfficialRating)) { |
