From c60714e36518ab1ea3a2a5b64999d5fb7462460c Mon Sep 17 00:00:00 2001 From: Ionut Andrei Oanca Date: Sat, 28 Nov 2020 14:19:24 +0100 Subject: Move query parameters to request body in SyncPlay --- Jellyfin.Api/Controllers/SyncPlayController.cs | 148 +++++++++++++------------ 1 file changed, 75 insertions(+), 73 deletions(-) (limited to 'Jellyfin.Api/Controllers/SyncPlayController.cs') diff --git a/Jellyfin.Api/Controllers/SyncPlayController.cs b/Jellyfin.Api/Controllers/SyncPlayController.cs index 530cce1ea..e8c9a0956 100644 --- a/Jellyfin.Api/Controllers/SyncPlayController.cs +++ b/Jellyfin.Api/Controllers/SyncPlayController.cs @@ -9,6 +9,7 @@ using MediaBrowser.Controller.Session; using MediaBrowser.Controller.SyncPlay; using MediaBrowser.Controller.SyncPlay.PlaybackRequests; using MediaBrowser.Model.SyncPlay; +using MediaBrowser.Model.SyncPlay.RequestBodies; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -44,34 +45,32 @@ namespace Jellyfin.Api.Controllers /// /// Create a new SyncPlay group. /// - /// The name of the new group. + /// The settings of the new group. /// New group created. /// A indicating success. [HttpPost("New")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayCreateGroup( - [FromQuery, Required] string groupName) + [FromBody, Required] NewGroupRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var newGroupRequest = new NewGroupRequest(groupName); - _syncPlayManager.NewGroup(currentSession, newGroupRequest, CancellationToken.None); + _syncPlayManager.NewGroup(currentSession, requestData, CancellationToken.None); return NoContent(); } /// /// Join an existing SyncPlay group. /// - /// The sync play group id. + /// The group to join. /// Group join successful. /// A indicating success. [HttpPost("Join")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayJoinGroup( - [FromQuery, Required] Guid groupId) + [FromBody, Required] JoinGroupRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var joinRequest = new JoinGroupRequest(groupId); - _syncPlayManager.JoinGroup(currentSession, groupId, joinRequest, CancellationToken.None); + _syncPlayManager.JoinGroup(currentSession, requestData.GroupId, requestData, CancellationToken.None); return NoContent(); } @@ -105,20 +104,19 @@ namespace Jellyfin.Api.Controllers /// /// Request play in SyncPlay group. /// - /// The playing queue. Item ids in the playing queue, comma delimited. - /// The playing item position from the queue. - /// The start position ticks. + /// The new playlist to play in the group. /// Play request sent to all group members. /// A indicating success. [HttpPost("Play")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayPlay( - [FromQuery, Required] Guid[] playingQueue, - [FromQuery, Required] int playingItemPosition, - [FromQuery, Required] long startPositionTicks) + [FromBody, Required] PlayRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new PlayGroupRequest(playingQueue, playingItemPosition, startPositionTicks); + var syncPlayRequest = new PlayGroupRequest( + requestData.PlayingQueue, + requestData.PlayingItemPosition, + requestData.StartPositionTicks); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -126,16 +124,16 @@ namespace Jellyfin.Api.Controllers /// /// Request to change playlist item in SyncPlay group. /// - /// The playlist id of the item. + /// The new item to play. /// Queue update request sent to all group members. /// A indicating success. [HttpPost("SetPlaylistItem")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlaySetPlaylistItem( - [FromQuery, Required] string playlistItemId) + [FromBody, Required] SetPlaylistItemRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new SetPlaylistItemGroupRequest(playlistItemId); + var syncPlayRequest = new SetPlaylistItemGroupRequest(requestData.PlaylistItemId); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -143,16 +141,16 @@ namespace Jellyfin.Api.Controllers /// /// Request to remove items from the playlist in SyncPlay group. /// - /// The playlist ids of the items to remove. + /// The items to remove. /// Queue update request sent to all group members. /// A indicating success. [HttpPost("RemoveFromPlaylist")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayRemoveFromPlaylist( - [FromQuery, Required] string[] playlistItemIds) + [FromBody, Required] RemoveFromPlaylistRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new RemoveFromPlaylistGroupRequest(playlistItemIds); + var syncPlayRequest = new RemoveFromPlaylistGroupRequest(requestData.PlaylistItemIds); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -160,18 +158,16 @@ namespace Jellyfin.Api.Controllers /// /// Request to move an item in the playlist in SyncPlay group. /// - /// The playlist id of the item to move. - /// The new position. + /// The new position for the item. /// Queue update request sent to all group members. /// A indicating success. [HttpPost("MovePlaylistItem")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayMovePlaylistItem( - [FromQuery, Required] string playlistItemId, - [FromQuery, Required] int newIndex) + [FromBody, Required] MovePlaylistItemRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new MovePlaylistItemGroupRequest(playlistItemId, newIndex); + var syncPlayRequest = new MovePlaylistItemGroupRequest(requestData.PlaylistItemId, requestData.NewIndex); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -179,18 +175,16 @@ namespace Jellyfin.Api.Controllers /// /// Request to queue items to the playlist of a SyncPlay group. /// - /// The items to add. - /// The mode in which to enqueue the items. + /// The items to add. /// Queue update request sent to all group members. /// A indicating success. [HttpPost("Queue")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayQueue( - [FromQuery, Required] Guid[] itemIds, - [FromQuery, Required] GroupQueueMode mode) + [FromBody, Required] QueueRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new QueueGroupRequest(itemIds, mode); + var syncPlayRequest = new QueueGroupRequest(requestData.ItemIds, requestData.Mode); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -243,50 +237,58 @@ namespace Jellyfin.Api.Controllers /// /// Request seek in SyncPlay group. /// - /// The playback position in ticks. + /// The new playback position. /// Seek request sent to all group members. /// A indicating success. [HttpPost("Seek")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlaySeek( - [FromQuery, Required] long positionTicks) + [FromBody, Required] SeekRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new SeekGroupRequest(positionTicks); + var syncPlayRequest = new SeekGroupRequest(requestData.PositionTicks); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } /// - /// Request group wait in SyncPlay group while buffering. + /// Notify SyncPlay group that member is buffering. /// - /// When the request has been made by the client. - /// The playback position in ticks. - /// Whether the client's playback is playing or not. - /// The playlist item id. - /// Whether the buffering is done. - /// Buffering request sent to all group members. + /// The player status. + /// Group state update sent to all group members. /// A indicating success. [HttpPost("Buffering")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayBuffering( - [FromQuery, Required] DateTime when, - [FromQuery, Required] long positionTicks, - [FromQuery, Required] bool isPlaying, - [FromQuery, Required] string playlistItemId, - [FromQuery, Required] bool bufferingDone) + [FromBody, Required] BufferRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - IGroupPlaybackRequest syncPlayRequest; - if (!bufferingDone) - { - syncPlayRequest = new BufferGroupRequest(when, positionTicks, isPlaying, playlistItemId); - } - else - { - syncPlayRequest = new ReadyGroupRequest(when, positionTicks, isPlaying, playlistItemId); - } + var syncPlayRequest = new BufferGroupRequest( + requestData.When, + requestData.PositionTicks, + requestData.IsPlaying, + requestData.PlaylistItemId); + _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); + return NoContent(); + } + /// + /// Notify SyncPlay group that member is ready for playback. + /// + /// The player status. + /// Group state update sent to all group members. + /// A indicating success. + [HttpPost("Ready")] + [ProducesResponseType(StatusCodes.Status204NoContent)] + public ActionResult SyncPlayReady( + [FromBody, Required] ReadyRequestBody requestData) + { + var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); + var syncPlayRequest = new ReadyGroupRequest( + requestData.When, + requestData.PositionTicks, + requestData.IsPlaying, + requestData.PlaylistItemId); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -294,16 +296,16 @@ namespace Jellyfin.Api.Controllers /// /// Request SyncPlay group to ignore member during group-wait. /// - /// Whether to ignore the member. + /// The settings to set. /// Member state updated. /// A indicating success. [HttpPost("SetIgnoreWait")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlaySetIgnoreWait( - [FromQuery, Required] bool ignoreWait) + [FromBody, Required] IgnoreWaitRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new IgnoreWaitGroupRequest(ignoreWait); + var syncPlayRequest = new IgnoreWaitGroupRequest(requestData.IgnoreWait); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -311,16 +313,16 @@ namespace Jellyfin.Api.Controllers /// /// Request next track in SyncPlay group. /// - /// The playing item id. + /// The current track information. /// Next track request sent to all group members. /// A indicating success. [HttpPost("NextTrack")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayNextTrack( - [FromQuery, Required] string playlistItemId) + [FromBody, Required] NextTrackRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new NextTrackGroupRequest(playlistItemId); + var syncPlayRequest = new NextTrackGroupRequest(requestData.PlaylistItemId); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -328,16 +330,16 @@ namespace Jellyfin.Api.Controllers /// /// Request previous track in SyncPlay group. /// - /// The playing item id. + /// The current track information. /// Previous track request sent to all group members. /// A indicating success. [HttpPost("PreviousTrack")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayPreviousTrack( - [FromQuery, Required] string playlistItemId) + [FromBody, Required] PreviousTrackRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new PreviousTrackGroupRequest(playlistItemId); + var syncPlayRequest = new PreviousTrackGroupRequest(requestData.PlaylistItemId); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -345,16 +347,16 @@ namespace Jellyfin.Api.Controllers /// /// Request to set repeat mode in SyncPlay group. /// - /// The repeat mode. + /// The new repeat mode. /// Play queue update sent to all group members. /// A indicating success. [HttpPost("SetRepeatMode")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlaySetRepeatMode( - [FromQuery, Required] GroupRepeatMode mode) + [FromBody, Required] SetRepeatModeRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new SetRepeatModeGroupRequest(mode); + var syncPlayRequest = new SetRepeatModeGroupRequest(requestData.Mode); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -362,16 +364,16 @@ namespace Jellyfin.Api.Controllers /// /// Request to set shuffle mode in SyncPlay group. /// - /// The shuffle mode. + /// The new shuffle mode. /// Play queue update sent to all group members. /// A indicating success. [HttpPost("SetShuffleMode")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlaySetShuffleMode( - [FromQuery, Required] GroupShuffleMode mode) + [FromBody, Required] SetShuffleModeRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new SetShuffleModeGroupRequest(mode); + var syncPlayRequest = new SetShuffleModeGroupRequest(requestData.Mode); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } @@ -379,16 +381,16 @@ namespace Jellyfin.Api.Controllers /// /// Update session ping. /// - /// The ping. + /// The new ping. /// Ping updated. /// A indicating success. [HttpPost("Ping")] [ProducesResponseType(StatusCodes.Status204NoContent)] public ActionResult SyncPlayPing( - [FromQuery, Required] double ping) + [FromBody, Required] PingRequestBody requestData) { var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request); - var syncPlayRequest = new PingGroupRequest(Convert.ToInt64(ping)); + var syncPlayRequest = new PingGroupRequest(requestData.Ping); _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); return NoContent(); } -- cgit v1.2.3