فهرست منبع

Clear playlist in SyncPlay group

Ionut Andrei Oanca 4 سال پیش
والد
کامیت
68969c9530

+ 10 - 0
Emby.Server.Implementations/SyncPlay/Group.cs

@@ -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)
         {

+ 1 - 1
Jellyfin.Api/Controllers/SyncPlayController.cs

@@ -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();
         }

+ 13 - 1
Jellyfin.Api/Models/SyncPlayDtos/RemoveFromPlaylistRequestDto.cs

@@ -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; }
     }
 }

+ 10 - 1
MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs

@@ -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);

+ 6 - 0
MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs

@@ -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>

+ 18 - 1
MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs

@@ -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;