@ -1,4 +1,5 @@
using System ;
using System.Collections.Generic ;
using System.ComponentModel.DataAnnotations ;
using System.Linq ;
using System.Threading.Tasks ;
@ -17,6 +18,7 @@ using MediaBrowser.Model.Querying;
using Microsoft.AspNetCore.Authorization ;
using Microsoft.AspNetCore.Http ;
using Microsoft.AspNetCore.Mvc ;
using Microsoft.AspNetCore.Mvc.ModelBinding ;
namespace Jellyfin.Api.Controllers
{
@ -53,6 +55,13 @@ namespace Jellyfin.Api.Controllers
/// <summary>
/// Creates a new playlist.
/// </summary>
/// <remarks>
/// For backwards compatibility parameters can be sent via Query or Body, with Query having higher precedence.
/// </remarks>
/// <param name="name">The playlist name.</param>
/// <param name="ids">The item ids.</param>
/// <param name="userId">The user id.</param>
/// <param name="mediaType">The media type.</param>
/// <param name="createPlaylistRequest">The create playlist payload.</param>
/// <returns>
/// A <see cref="Task" /> that represents the asynchronous operation to create a playlist.
@ -61,14 +70,23 @@ namespace Jellyfin.Api.Controllers
[HttpPost]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task < ActionResult < PlaylistCreationResult > > CreatePlaylist (
[FromBody, Required] CreatePlaylistDto createPlaylistRequest )
[FromQuery] string? name ,
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] IReadOnlyList < Guid > ids ,
[FromQuery] Guid ? userId ,
[FromQuery] string? mediaType ,
[FromBody(EmptyBodyBehavior = EmptyBodyBehavior.Allow)] CreatePlaylistDto ? createPlaylistRequest )
{
if ( ids . Count = = 0 )
{
ids = createPlaylistRequest ? . Ids ? ? Array . Empty < Guid > ( ) ;
}
var result = await _playlistManager . CreatePlaylist ( new PlaylistCreationRequest
{
Name = createPlaylistRequest . Name ,
ItemIdList = createPlaylistRequest . Ids ,
UserId = createPlaylistRequest . UserId ,
MediaType = createPlaylistRequest. MediaType
Name = name ? ? createPlaylistRequest? . Name ,
ItemIdList = ids,
UserId = userId ? ? createPlaylistRequest? .UserId ? ? default ,
MediaType = mediaType ? ? createPlaylistRequest? . MediaType
} ) . ConfigureAwait ( false ) ;
return result ;