|
|
|
@ -62,9 +62,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("Songs/{itemId}/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromSong(
|
|
|
|
|
[FromRoute, Required] Guid itemId,
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
@ -75,11 +77,16 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
[FromQuery] int? imageTypeLimit,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
var item = _libraryManager.GetItemById(itemId);
|
|
|
|
|
userId = RequestHelpers.GetUserId(User, userId);
|
|
|
|
|
var user = userId.IsNullOrEmpty()
|
|
|
|
|
? null
|
|
|
|
|
: _userManager.GetUserById(userId.Value);
|
|
|
|
|
var item = _libraryManager.GetItemById<BaseItem>(itemId, user);
|
|
|
|
|
if (item is null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = new DtoOptions { Fields = fields }
|
|
|
|
|
.AddClientFields(User)
|
|
|
|
|
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
|
|
|
|
@ -99,9 +106,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("Albums/{itemId}/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromAlbum(
|
|
|
|
|
[FromRoute, Required] Guid itemId,
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
@ -112,15 +121,20 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
[FromQuery] int? imageTypeLimit,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
var album = _libraryManager.GetItemById(itemId);
|
|
|
|
|
userId = RequestHelpers.GetUserId(User, userId);
|
|
|
|
|
var user = userId.IsNullOrEmpty()
|
|
|
|
|
? null
|
|
|
|
|
: _userManager.GetUserById(userId.Value);
|
|
|
|
|
var item = _libraryManager.GetItemById<BaseItem>(itemId, user);
|
|
|
|
|
if (item is null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = new DtoOptions { Fields = fields }
|
|
|
|
|
.AddClientFields(User)
|
|
|
|
|
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
|
|
|
|
|
var items = _musicManager.GetInstantMixFromItem(album, user, dtoOptions);
|
|
|
|
|
var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);
|
|
|
|
|
return GetResult(items, user, limit, dtoOptions);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -136,9 +150,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("Playlists/{itemId}/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromPlaylist(
|
|
|
|
|
[FromRoute, Required] Guid itemId,
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
@ -149,15 +165,20 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
[FromQuery] int? imageTypeLimit,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
var playlist = (Playlist)_libraryManager.GetItemById(itemId);
|
|
|
|
|
userId = RequestHelpers.GetUserId(User, userId);
|
|
|
|
|
var user = userId.IsNullOrEmpty()
|
|
|
|
|
? null
|
|
|
|
|
: _userManager.GetUserById(userId.Value);
|
|
|
|
|
var item = _libraryManager.GetItemById<Playlist>(itemId, user);
|
|
|
|
|
if (item is null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = new DtoOptions { Fields = fields }
|
|
|
|
|
.AddClientFields(User)
|
|
|
|
|
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
|
|
|
|
|
var items = _musicManager.GetInstantMixFromItem(playlist, user, dtoOptions);
|
|
|
|
|
var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);
|
|
|
|
|
return GetResult(items, user, limit, dtoOptions);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -209,9 +230,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("Artists/{itemId}/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromArtists(
|
|
|
|
|
[FromRoute, Required] Guid itemId,
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
@ -222,11 +245,16 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
[FromQuery] int? imageTypeLimit,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
var item = _libraryManager.GetItemById(itemId);
|
|
|
|
|
userId = RequestHelpers.GetUserId(User, userId);
|
|
|
|
|
var user = userId.IsNullOrEmpty()
|
|
|
|
|
? null
|
|
|
|
|
: _userManager.GetUserById(userId.Value);
|
|
|
|
|
var item = _libraryManager.GetItemById<BaseItem>(itemId, user);
|
|
|
|
|
if (item is null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = new DtoOptions { Fields = fields }
|
|
|
|
|
.AddClientFields(User)
|
|
|
|
|
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
|
|
|
|
@ -246,9 +274,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("Items/{itemId}/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromItem(
|
|
|
|
|
[FromRoute, Required] Guid itemId,
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
@ -259,11 +289,16 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
[FromQuery] int? imageTypeLimit,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
var item = _libraryManager.GetItemById(itemId);
|
|
|
|
|
userId = RequestHelpers.GetUserId(User, userId);
|
|
|
|
|
var user = userId.IsNullOrEmpty()
|
|
|
|
|
? null
|
|
|
|
|
: _userManager.GetUserById(userId.Value);
|
|
|
|
|
var item = _libraryManager.GetItemById<BaseItem>(itemId, user);
|
|
|
|
|
if (item is null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = new DtoOptions { Fields = fields }
|
|
|
|
|
.AddClientFields(User)
|
|
|
|
|
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
|
|
|
|
@ -283,9 +318,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("Artists/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
[Obsolete("Use GetInstantMixFromArtists")]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromArtists2(
|
|
|
|
|
[FromQuery, Required] Guid id,
|
|
|
|
@ -320,9 +357,11 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
/// <param name="imageTypeLimit">Optional. The max number of images to return, per image type.</param>
|
|
|
|
|
/// <param name="enableImageTypes">Optional. The image types to include in the output.</param>
|
|
|
|
|
/// <response code="200">Instant playlist returned.</response>
|
|
|
|
|
/// <response code="404">Item not found.</response>
|
|
|
|
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
|
|
|
|
[HttpGet("MusicGenres/InstantMix")]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
|
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
|
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromMusicGenreById(
|
|
|
|
|
[FromQuery, Required] Guid id,
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
@ -333,11 +372,16 @@ public class InstantMixController : BaseJellyfinApiController
|
|
|
|
|
[FromQuery] int? imageTypeLimit,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] ImageType[] enableImageTypes)
|
|
|
|
|
{
|
|
|
|
|
var item = _libraryManager.GetItemById(id);
|
|
|
|
|
userId = RequestHelpers.GetUserId(User, userId);
|
|
|
|
|
var user = userId.IsNullOrEmpty()
|
|
|
|
|
? null
|
|
|
|
|
: _userManager.GetUserById(userId.Value);
|
|
|
|
|
var item = _libraryManager.GetItemById<BaseItem>(id, user);
|
|
|
|
|
if (item is null)
|
|
|
|
|
{
|
|
|
|
|
return NotFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dtoOptions = new DtoOptions { Fields = fields }
|
|
|
|
|
.AddClientFields(User)
|
|
|
|
|
.AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);
|
|
|
|
|