aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/UserLibraryService.cs')
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs43
1 files changed, 34 insertions, 9 deletions
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>