@ -1,6 +1,7 @@
using System.Collections.Generic ;
using System.ComponentModel.DataAnnotations ;
using System.Threading ;
using System.Threading.Tasks ;
using Jellyfin.Api.Constants ;
using Jellyfin.Api.Helpers ;
using Jellyfin.Api.Models.SyncPlayDtos ;
@ -51,10 +52,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("New")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayCreateGroup)]
public ActionResult SyncPlayCreateGroup (
public async Task < ActionResult > SyncPlayCreateGroup (
[FromBody, Required] NewGroupRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new NewGroupRequest ( requestData . GroupName ) ;
_syncPlayManager . NewGroup ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -69,10 +70,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Join")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayJoinGroup)]
public ActionResult SyncPlayJoinGroup (
public async Task < ActionResult > SyncPlayJoinGroup (
[FromBody, Required] JoinGroupRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new JoinGroupRequest ( requestData . GroupId ) ;
_syncPlayManager . JoinGroup ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -86,9 +87,9 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Leave")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayLeaveGroup ( )
public async Task < ActionResult > SyncPlayLeaveGroup ( )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new LeaveGroupRequest ( ) ;
_syncPlayManager . LeaveGroup ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -102,9 +103,9 @@ namespace Jellyfin.Api.Controllers
[HttpGet("List")]
[ProducesResponseType(StatusCodes.Status200OK)]
[Authorize(Policy = Policies.SyncPlayJoinGroup)]
public ActionResult < IEnumerable < GroupInfoDto > > SyncPlayGetGroups ( )
public async Task < ActionResult < IEnumerable < GroupInfoDto > > > SyncPlayGetGroups ( )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new ListGroupsRequest ( ) ;
return Ok ( _syncPlayManager . ListGroups ( currentSession , syncPlayRequest ) ) ;
}
@ -118,10 +119,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("SetNewQueue")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlaySetNewQueue (
public async Task < ActionResult > SyncPlaySetNewQueue (
[FromBody, Required] PlayRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new PlayGroupRequest (
requestData . PlayingQueue ,
requestData . PlayingItemPosition ,
@ -139,10 +140,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("SetPlaylistItem")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlaySetPlaylistItem (
public async Task < ActionResult > SyncPlaySetPlaylistItem (
[FromBody, Required] SetPlaylistItemRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new SetPlaylistItemGroupRequest ( requestData . PlaylistItemId ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -157,10 +158,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("RemoveFromPlaylist")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayRemoveFromPlaylist (
public async Task < ActionResult > SyncPlayRemoveFromPlaylist (
[FromBody, Required] RemoveFromPlaylistRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new RemoveFromPlaylistGroupRequest ( requestData . PlaylistItemIds ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -175,10 +176,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("MovePlaylistItem")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayMovePlaylistItem (
public async Task < ActionResult > SyncPlayMovePlaylistItem (
[FromBody, Required] MovePlaylistItemRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new MovePlaylistItemGroupRequest ( requestData . PlaylistItemId , requestData . NewIndex ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -193,10 +194,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Queue")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayQueue (
public async Task < ActionResult > SyncPlayQueue (
[FromBody, Required] QueueRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new QueueGroupRequest ( requestData . ItemIds , requestData . Mode ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -210,9 +211,9 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Unpause")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayUnpause ( )
public async Task < ActionResult > SyncPlayUnpause ( )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new UnpauseGroupRequest ( ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -226,9 +227,9 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Pause")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayPause ( )
public async Task < ActionResult > SyncPlayPause ( )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new PauseGroupRequest ( ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -242,9 +243,9 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Stop")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayStop ( )
public async Task < ActionResult > SyncPlayStop ( )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new StopGroupRequest ( ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -259,10 +260,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Seek")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlaySeek (
public async Task < ActionResult > SyncPlaySeek (
[FromBody, Required] SeekRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new SeekGroupRequest ( requestData . PositionTicks ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -277,10 +278,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Buffering")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayBuffering (
public async Task < ActionResult > SyncPlayBuffering (
[FromBody, Required] BufferRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new BufferGroupRequest (
requestData . When ,
requestData . PositionTicks ,
@ -299,10 +300,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("Ready")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayReady (
public async Task < ActionResult > SyncPlayReady (
[FromBody, Required] ReadyRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new ReadyGroupRequest (
requestData . When ,
requestData . PositionTicks ,
@ -321,10 +322,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("SetIgnoreWait")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlaySetIgnoreWait (
public async Task < ActionResult > SyncPlaySetIgnoreWait (
[FromBody, Required] IgnoreWaitRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new IgnoreWaitGroupRequest ( requestData . IgnoreWait ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -339,10 +340,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("NextItem")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayNextItem (
public async Task < ActionResult > SyncPlayNextItem (
[FromBody, Required] NextItemRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new NextItemGroupRequest ( requestData . PlaylistItemId ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -357,10 +358,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("PreviousItem")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlayPreviousItem (
public async Task < ActionResult > SyncPlayPreviousItem (
[FromBody, Required] PreviousItemRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new PreviousItemGroupRequest ( requestData . PlaylistItemId ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -375,10 +376,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("SetRepeatMode")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlaySetRepeatMode (
public async Task < ActionResult > SyncPlaySetRepeatMode (
[FromBody, Required] SetRepeatModeRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new SetRepeatModeGroupRequest ( requestData . Mode ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -393,10 +394,10 @@ namespace Jellyfin.Api.Controllers
[HttpPost("SetShuffleMode")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[Authorize(Policy = Policies.SyncPlayIsInGroup)]
public ActionResult SyncPlaySetShuffleMode (
public async Task < ActionResult > SyncPlaySetShuffleMode (
[FromBody, Required] SetShuffleModeRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new SetShuffleModeGroupRequest ( requestData . Mode ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;
@ -410,10 +411,10 @@ namespace Jellyfin.Api.Controllers
/// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
[HttpPost("Ping")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
public ActionResult SyncPlayPing (
public async Task < ActionResult > SyncPlayPing (
[FromBody, Required] PingRequestDto requestData )
{
var currentSession = RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) ;
var currentSession = await RequestHelpers . GetSession ( _sessionManager , _authorizationContext , Request ) . ConfigureAwait ( false ) ;
var syncPlayRequest = new PingGroupRequest ( requestData . Ping ) ;
_syncPlayManager . HandleRequest ( currentSession , syncPlayRequest , CancellationToken . None ) ;
return NoContent ( ) ;