mirror of https://github.com/lidarr/Lidarr
New: Cancel tasks in command queue
This commit is contained in:
parent
61387b3d44
commit
9d2fbddc7d
|
@ -176,6 +176,7 @@ export const actionHandlers = handleThunks({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
dispatch(updateItem({ section: 'commands', ...payload }));
|
||||||
scheduleRemoveCommand(payload, dispatch);
|
scheduleRemoveCommand(payload, dispatch);
|
||||||
showCommandMessage(payload, dispatch);
|
showCommandMessage(payload, dispatch);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,8 @@ function createCommandExecutingSelector(name, contraints = {}) {
|
||||||
return createSelector(
|
return createSelector(
|
||||||
createCommandsSelector(),
|
createCommandsSelector(),
|
||||||
(commands) => {
|
(commands) => {
|
||||||
return isCommandExecuting(findCommand(commands, { name, ...contraints }));
|
const command = findCommand(commands, { name, ...contraints });
|
||||||
|
return isCommandExecuting(command);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,8 +68,7 @@ namespace Lidarr.Api.V1.Commands
|
||||||
|
|
||||||
private void CancelCommand(int id)
|
private void CancelCommand(int id)
|
||||||
{
|
{
|
||||||
// TODO: Cancel the existing command
|
_commandQueueManager.Cancel(id);
|
||||||
// Executing tasks should preferably exit gracefully
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(CommandUpdatedEvent message)
|
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()
|
public List<CommandModel> QueuedOrStarted()
|
||||||
{
|
{
|
||||||
return All().Where(q => q.Status == CommandStatus.Queued || q.Status == CommandStatus.Started)
|
return All().Where(q => q.Status == CommandStatus.Queued || q.Status == CommandStatus.Started)
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Common;
|
using NzbDrone.Common;
|
||||||
using NzbDrone.Common.EnsureThat;
|
using NzbDrone.Common.EnsureThat;
|
||||||
using NzbDrone.Common.Serializer;
|
using NzbDrone.Common.Serializer;
|
||||||
using NzbDrone.Core.Lifecycle;
|
using NzbDrone.Core.Lifecycle;
|
||||||
|
using NzbDrone.Core.Exceptions;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Messaging.Commands
|
namespace NzbDrone.Core.Messaging.Commands
|
||||||
|
@ -25,6 +27,7 @@ namespace NzbDrone.Core.Messaging.Commands
|
||||||
void Complete(CommandModel command, string message);
|
void Complete(CommandModel command, string message);
|
||||||
void Fail(CommandModel command, string message, Exception e);
|
void Fail(CommandModel command, string message, Exception e);
|
||||||
void Requeue();
|
void Requeue();
|
||||||
|
void Cancel(int id);
|
||||||
void CleanCommands();
|
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()
|
public void CleanCommands()
|
||||||
{
|
{
|
||||||
_logger.Trace("Cleaning up old commands");
|
_logger.Trace("Cleaning up old commands");
|
||||||
|
|
Loading…
Reference in New Issue