diff options
Diffstat (limited to 'MediaBrowser.Controller/SyncPlay')
3 files changed, 33 insertions, 2 deletions
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs index 91a13fb28..51c95a1bb 100644 --- a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs +++ b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs @@ -68,7 +68,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); diff --git a/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs b/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs index de26c7d9e..d2de22450 100644 --- a/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs +++ b/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs @@ -163,6 +163,12 @@ namespace MediaBrowser.Controller.SyncPlay 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> /// <param name="playlistItemIds">The items to remove.</param> diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs index 689145293..2f38d6adc 100644 --- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs +++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs @@ -17,9 +17,13 @@ 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> @@ -28,6 +32,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; |
