@ -131,6 +131,8 @@ public class LibraryController : BaseJellyfinApiController
/// <param name="itemId">The item id.</param>
/// <param name="userId">Optional. Filter by user id, and attach user data.</param>
/// <param name="inheritFromParent">Optional. Determines whether or not parent items should be searched for theme media.</param>
/// <param name="sortBy">Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.</param>
/// <param name="sortOrder">Optional. Sort Order - Ascending, Descending.</param>
/// <response code="200">Theme songs returned.</response>
/// <response code="404">Item not found.</response>
/// <returns>The item theme songs.</returns>
@ -141,7 +143,9 @@ public class LibraryController : BaseJellyfinApiController
public ActionResult < ThemeMediaResult > GetThemeSongs (
[FromRoute, Required] Guid itemId ,
[FromQuery] Guid ? userId ,
[FromQuery] bool inheritFromParent = false )
[FromQuery] bool inheritFromParent = false ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ItemSortBy [ ] ? sortBy = null ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] SortOrder [ ] ? sortOrder = null )
{
userId = RequestHelpers . GetUserId ( User , userId ) ;
var user = userId . IsNullOrEmpty ( )
@ -158,11 +162,15 @@ public class LibraryController : BaseJellyfinApiController
return NotFound ( ) ;
}
sortOrder ? ? = [ ] ;
sortBy ? ? = [ ] ;
var orderBy = RequestHelpers . GetOrderBy ( sortBy , sortOrder ) ;
IReadOnlyList < BaseItem > themeItems ;
while ( true )
{
themeItems = item . GetThemeSongs ( ) ;
themeItems = item . GetThemeSongs ( user , orderBy ) ;
if ( themeItems . Count > 0 | | ! inheritFromParent )
{
@ -197,6 +205,8 @@ public class LibraryController : BaseJellyfinApiController
/// <param name="itemId">The item id.</param>
/// <param name="userId">Optional. Filter by user id, and attach user data.</param>
/// <param name="inheritFromParent">Optional. Determines whether or not parent items should be searched for theme media.</param>
/// <param name="sortBy">Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.</param>
/// <param name="sortOrder">Optional. Sort Order - Ascending, Descending.</param>
/// <response code="200">Theme videos returned.</response>
/// <response code="404">Item not found.</response>
/// <returns>The item theme videos.</returns>
@ -207,7 +217,9 @@ public class LibraryController : BaseJellyfinApiController
public ActionResult < ThemeMediaResult > GetThemeVideos (
[FromRoute, Required] Guid itemId ,
[FromQuery] Guid ? userId ,
[FromQuery] bool inheritFromParent = false )
[FromQuery] bool inheritFromParent = false ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ItemSortBy [ ] ? sortBy = null ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] SortOrder [ ] ? sortOrder = null )
{
userId = RequestHelpers . GetUserId ( User , userId ) ;
var user = userId . IsNullOrEmpty ( )
@ -223,11 +235,15 @@ public class LibraryController : BaseJellyfinApiController
return NotFound ( ) ;
}
sortOrder ? ? = [ ] ;
sortBy ? ? = [ ] ;
var orderBy = RequestHelpers . GetOrderBy ( sortBy , sortOrder ) ;
IEnumerable < BaseItem > themeItems ;
while ( true )
{
themeItems = item . GetThemeVideos ( ) ;
themeItems = item . GetThemeVideos ( user , orderBy ) ;
if ( themeItems . Any ( ) | | ! inheritFromParent )
{
@ -262,6 +278,8 @@ public class LibraryController : BaseJellyfinApiController
/// <param name="itemId">The item id.</param>
/// <param name="userId">Optional. Filter by user id, and attach user data.</param>
/// <param name="inheritFromParent">Optional. Determines whether or not parent items should be searched for theme media.</param>
/// <param name="sortBy">Optional. Specify one or more sort orders, comma delimited. Options: Album, AlbumArtist, Artist, Budget, CommunityRating, CriticRating, DateCreated, DatePlayed, PlayCount, PremiereDate, ProductionYear, SortName, Random, Revenue, Runtime.</param>
/// <param name="sortOrder">Optional. Sort Order - Ascending, Descending.</param>
/// <response code="200">Theme songs and videos returned.</response>
/// <response code="404">Item not found.</response>
/// <returns>The item theme videos.</returns>
@ -271,17 +289,23 @@ public class LibraryController : BaseJellyfinApiController
public ActionResult < AllThemeMediaResult > GetThemeMedia (
[FromRoute, Required] Guid itemId ,
[FromQuery] Guid ? userId ,
[FromQuery] bool inheritFromParent = false )
[FromQuery] bool inheritFromParent = false ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ItemSortBy [ ] ? sortBy = null ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] SortOrder [ ] ? sortOrder = null )
{
var themeSongs = GetThemeSongs (
itemId ,
userId ,
inheritFromParent ) ;
inheritFromParent ,
sortBy ,
sortOrder ) ;
var themeVideos = GetThemeVideos (
itemId ,
userId ,
inheritFromParent ) ;
inheritFromParent ,
sortBy ,
sortOrder ) ;
if ( themeSongs . Result is StatusCodeResult { StatusCode : StatusCodes . Status404NotFound }
| | themeVideos . Result is StatusCodeResult { StatusCode : StatusCodes . Status404NotFound } )