aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/UserLibrary')
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs9
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs43
2 files changed, 43 insertions, 9 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 5e0bfca97..d06941bb8 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -172,6 +172,9 @@ namespace MediaBrowser.Api.UserLibrary
[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; }
+ [ApiMember(Name = "MinIndexNumber", Description = "Optional filter index number.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
+ public int? MinIndexNumber { get; set; }
+
/// <summary>
/// Gets the order by.
/// </summary>
@@ -511,6 +514,12 @@ namespace MediaBrowser.Api.UserLibrary
items = items.Where(i => i.Id == previousId || i.Id == nextId);
}
+ // Min index number
+ if (request.MinIndexNumber.HasValue)
+ {
+ items = items.Where(i => i.IndexNumber.HasValue && i.IndexNumber.Value >= request.MinIndexNumber.Value);
+ }
+
// Min official rating
if (!string.IsNullOrEmpty(request.MinOfficialRating))
{
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
index a6c53b4a4..de25651ed 100644
--- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Session;
@@ -325,7 +326,7 @@ namespace MediaBrowser.Api.UserLibrary
/// Class GetSpecialFeatures
/// </summary>
[Route("/Users/{UserId}/Items/{Id}/SpecialFeatures", "GET")]
- [Api(Description = "Gets special features for a movie")]
+ [Api(Description = "Gets special features for an item")]
public class GetSpecialFeatures : IReturn<List<BaseItemDto>>
{
/// <summary>
@@ -404,16 +405,40 @@ namespace MediaBrowser.Api.UserLibrary
// Get everything
var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)).ToList();
- var movie = (Movie)item;
-
var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo);
- var tasks = movie.SpecialFeatureIds
- .Select(_itemRepo.RetrieveItem)
- .OrderBy(i => i.SortName)
- .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, movie));
+ var movie = item as Movie;
- return Task.WhenAll(tasks);
+ // Get them from the db
+ if (movie != null)
+ {
+ // Avoid implicitly captured closure
+ var movie1 = movie;
+
+ var tasks = movie.SpecialFeatureIds
+ .Select(_itemRepo.RetrieveItem)
+ .OrderBy(i => i.SortName)
+ .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, movie1));
+
+ return Task.WhenAll(tasks);
+ }
+
+ var series = item as Series;
+
+ // Get them from the child tree
+ if (series != null)
+ {
+ var tasks = series
+ .RecursiveChildren
+ .OfType<Episode>()
+ .Where(i => i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0)
+ .OrderBy(i => i.SortName)
+ .Select(i => dtoBuilder.GetBaseItemDto(i, fields, user));
+
+ return Task.WhenAll(tasks);
+ }
+
+ throw new ArgumentException("The item does not support special features");
}
/// <summary>
@@ -589,7 +614,7 @@ namespace MediaBrowser.Api.UserLibrary
return DtoBuilder.GetUserItemDataDto(data);
}
-
+
/// <summary>
/// Posts the specified request.
/// </summary>