Clear playlist in SyncPlay group

This commit is contained in:
Ionut Andrei Oanca 2021-01-24 01:05:17 +01:00
parent 828b0be254
commit 68969c9530
6 changed files with 58 additions and 4 deletions

View File

@ -534,6 +534,16 @@ namespace Emby.Server.Implementations.SyncPlay
return itemFound;
}
/// <inheritdoc />
public void ClearPlayQueue(bool clearPlayingItem)
{
PlayQueue.ClearPlaylist(clearPlayingItem);
if (clearPlayingItem)
{
RestartCurrentItem();
}
}
/// <inheritdoc />
public bool RemoveFromPlayQueue(IReadOnlyList<Guid> playlistItemIds)
{

View File

@ -162,7 +162,7 @@ namespace Jellyfin.Api.Controllers
[FromBody, Required] RemoveFromPlaylistRequestDto requestData)
{
var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request);
var syncPlayRequest = new RemoveFromPlaylistGroupRequest(requestData.PlaylistItemIds);
var syncPlayRequest = new RemoveFromPlaylistGroupRequest(requestData.PlaylistItemIds, requestData.ClearPlaylist, requestData.ClearPlayingItem);
_syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None);
return NoContent();
}

View File

@ -17,9 +17,21 @@ namespace Jellyfin.Api.Models.SyncPlayDtos
}
/// <summary>
/// Gets or sets the playlist identifiers ot the items.
/// Gets or sets the playlist identifiers ot the items. Ignored when clearing the playlist.
/// </summary>
/// <value>The playlist identifiers ot the items.</value>
public IReadOnlyList<Guid> PlaylistItemIds { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the entire playlist should be cleared.
/// </summary>
/// <value>Whether the entire playlist should be cleared.</value>
public bool ClearPlaylist { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the playing item should be removed as well. Used only when clearing the playlist.
/// </summary>
/// <value>Whether the playing item should be removed as well.</value>
public bool ClearPlayingItem { get; set; }
}
}

View File

@ -66,7 +66,16 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
/// <inheritdoc />
public virtual void HandleRequest(RemoveFromPlaylistGroupRequest request, IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
{
var playingItemRemoved = context.RemoveFromPlayQueue(request.PlaylistItemIds);
bool playingItemRemoved;
if (request.ClearPlaylist)
{
context.ClearPlayQueue(request.ClearPlayingItem);
playingItemRemoved = request.ClearPlayingItem;
}
else
{
playingItemRemoved = context.RemoveFromPlayQueue(request.PlaylistItemIds);
}
var playQueueUpdate = context.GetPlayQueueUpdate(PlayQueueUpdateReason.RemoveItems);
var update = context.NewSyncPlayGroupUpdate(GroupUpdateType.PlayQueue, playQueueUpdate);

View File

@ -160,6 +160,12 @@ namespace MediaBrowser.Controller.SyncPlay
/// <returns><c>true</c> if the play queue has been changed; <c>false</c> if something went wrong.</returns>
bool SetPlayingItem(Guid playlistItemId);
/// <summary>
/// Clears the play queue.
/// </summary>
/// <param name="clearPlayingItem">Whether to remove the playing item as well.</param>
void ClearPlayQueue(bool clearPlayingItem);
/// <summary>
/// Removes items from the play queue.
/// </summary>

View File

@ -15,9 +15,14 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
/// Initializes a new instance of the <see cref="RemoveFromPlaylistGroupRequest"/> class.
/// </summary>
/// <param name="items">The playlist ids of the items to remove.</param>
public RemoveFromPlaylistGroupRequest(IReadOnlyList<Guid> items)
/// <param name="clearPlaylist">Whether to clear the entire playlist. The items list will be ignored.</param>
/// <param name="clearPlayingItem">Whether to remove the playing item as well. Used only when clearing the playlist.</param>
public RemoveFromPlaylistGroupRequest(IReadOnlyList<Guid> items, bool clearPlaylist = false, bool clearPlayingItem = false)
{
PlaylistItemIds = items ?? Array.Empty<Guid>();
ClearPlaylist = clearPlaylist;
ClearPlayingItem = clearPlayingItem;
}
/// <summary>
@ -26,6 +31,18 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
/// <value>The playlist identifiers ot the items.</value>
public IReadOnlyList<Guid> PlaylistItemIds { get; }
/// <summary>
/// Gets a value indicating whether the entire playlist should be cleared.
/// </summary>
/// <value>Whether the entire playlist should be cleared.</value>
public bool ClearPlaylist { get; }
/// <summary>
/// Gets a value indicating whether the playing item should be removed as well.
/// </summary>
/// <value>Whether the playing item should be removed as well.</value>
public bool ClearPlayingItem { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.RemoveFromPlaylist;