From bd265e47fa01bd8188a0c54ee3d88fa164df8dd9 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 27 Dec 2022 01:07:15 -0800 Subject: [PATCH] Fixed: Don't try to remove the same item from queue multiple times (cherry picked from commit 2491da067815e129df3a3a79c0cc7221a9d87094) Closes #2087 --- src/Readarr.Api.V1/Queue/QueueController.cs | 66 ++++++++++++++------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/src/Readarr.Api.V1/Queue/QueueController.cs b/src/Readarr.Api.V1/Queue/QueueController.cs index a3fb4312a..df66d23ac 100644 --- a/src/Readarr.Api.V1/Queue/QueueController.cs +++ b/src/Readarr.Api.V1/Queue/QueueController.cs @@ -71,29 +71,62 @@ protected override QueueResource GetResourceById(int id) [RestDeleteById] public void RemoveAction(int id, bool removeFromClient = true, bool blocklist = false, bool skipRedownload = false) { - var trackedDownload = Remove(id, removeFromClient, blocklist, skipRedownload); + var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); - if (trackedDownload != null) + if (pendingRelease != null) { - _trackedDownloadService.StopTracking(trackedDownload.DownloadItem.DownloadId); + Remove(pendingRelease); + + return; } + + var trackedDownload = GetTrackedDownload(id); + + if (trackedDownload == null) + { + throw new NotFoundException(); + } + + Remove(trackedDownload, removeFromClient, blocklist, skipRedownload); + _trackedDownloadService.StopTracking(trackedDownload.DownloadItem.DownloadId); } [HttpDelete("bulk")] public object RemoveMany([FromBody] QueueBulkResource resource, [FromQuery] bool removeFromClient = true, [FromQuery] bool blocklist = false, [FromQuery] bool skipRedownload = false) { var trackedDownloadIds = new List(); + var pendingToRemove = new List(); + var trackedToRemove = new List(); foreach (var id in resource.Ids) { - var trackedDownload = Remove(id, removeFromClient, blocklist, skipRedownload); + var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); + + if (pendingRelease != null) + { + pendingToRemove.Add(pendingRelease); + continue; + } + + var trackedDownload = GetTrackedDownload(id); if (trackedDownload != null) { - trackedDownloadIds.Add(trackedDownload.DownloadItem.DownloadId); + trackedToRemove.Add(trackedDownload); } } + foreach (var pendingRelease in pendingToRemove.DistinctBy(p => p.Id)) + { + Remove(pendingRelease); + } + + foreach (var trackedDownload in trackedToRemove.DistinctBy(t => t.DownloadItem.DownloadId)) + { + Remove(trackedDownload, removeFromClient, blocklist, skipRedownload); + trackedDownloadIds.Add(trackedDownload.DownloadItem.DownloadId); + } + _trackedDownloadService.StopTracking(trackedDownloadIds); return new { }; @@ -206,25 +239,14 @@ private PagingSpec GetQueue(PagingSpec