mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-20 21:43:33 -07:00
New: Cancel tasks in command queue
This commit is contained in:
parent
61387b3d44
commit
9d2fbddc7d
5 changed files with 33 additions and 3 deletions
|
@ -68,8 +68,7 @@ namespace Lidarr.Api.V1.Commands
|
|||
|
||||
private void CancelCommand(int id)
|
||||
{
|
||||
// TODO: Cancel the existing command
|
||||
// Executing tasks should preferably exit gracefully
|
||||
_commandQueueManager.Cancel(id);
|
||||
}
|
||||
|
||||
public void Handle(CommandUpdatedEvent message)
|
||||
|
|
|
@ -71,6 +71,24 @@ namespace NzbDrone.Core.Messaging.Commands
|
|||
}
|
||||
}
|
||||
|
||||
public bool RemoveIfQueued(int id)
|
||||
{
|
||||
var rval = false;
|
||||
|
||||
lock (_mutex)
|
||||
{
|
||||
var command = _items.FirstOrDefault(q => q.Id == id);
|
||||
|
||||
if (command?.Status == CommandStatus.Queued)
|
||||
{
|
||||
_items.Remove(command);
|
||||
rval = true;
|
||||
}
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
public List<CommandModel> QueuedOrStarted()
|
||||
{
|
||||
return All().Where(q => q.Status == CommandStatus.Queued || q.Status == CommandStatus.Started)
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Common.EnsureThat;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Lifecycle;
|
||||
using NzbDrone.Core.Exceptions;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
|
||||
namespace NzbDrone.Core.Messaging.Commands
|
||||
|
@ -25,6 +27,7 @@ namespace NzbDrone.Core.Messaging.Commands
|
|||
void Complete(CommandModel command, string message);
|
||||
void Fail(CommandModel command, string message, Exception e);
|
||||
void Requeue();
|
||||
void Cancel(int id);
|
||||
void CleanCommands();
|
||||
}
|
||||
|
||||
|
@ -193,6 +196,14 @@ namespace NzbDrone.Core.Messaging.Commands
|
|||
}
|
||||
}
|
||||
|
||||
public void Cancel(int id)
|
||||
{
|
||||
if (!_commandQueue.RemoveIfQueued(id))
|
||||
{
|
||||
throw new NzbDroneClientException(HttpStatusCode.Conflict, "Unable to cancel task");
|
||||
}
|
||||
}
|
||||
|
||||
public void CleanCommands()
|
||||
{
|
||||
_logger.Trace("Cleaning up old commands");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue