Skip unknown/removed commands still queued in the database

pull/395/head
Taloth Saldono 4 years ago committed by ta264
parent edd278a131
commit e39fee9209

@ -3,6 +3,7 @@ using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Books.Commands;
using NzbDrone.Core.Datastore.Converters;
using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Converters
@ -42,6 +43,14 @@ namespace NzbDrone.Core.Test.Datastore.Converters
Subject.Parse(data).Should().BeOfType<RefreshAuthorCommand>();
}
[Test]
public void should_return_unknown_command_when_getting_json_from_db()
{
var data = "{\"name\": \"EnsureMediaCovers\"}";
Subject.Parse(data).Should().BeOfType<UnknownCommand>();
}
[Test]
public void should_return_null_for_null_value_when_getting_from_db()
{

@ -27,7 +27,11 @@ namespace NzbDrone.Core.Datastore.Converters
if (impType == null)
{
throw new CommandNotFoundException(contract);
var result = JsonSerializer.Deserialize<UnknownCommand>(stringValue, SerializerSettings);
result.ContractName = contract;
return result;
}
return (Command)JsonSerializer.Deserialize(stringValue, impType, SerializerSettings);

@ -69,8 +69,7 @@ namespace NzbDrone.Core.Messaging.Commands
try
{
var handlerContract = typeof(IExecute<>).MakeGenericType(command.GetType());
handler = (IExecute<TCommand>)_serviceFactory.Build(handlerContract);
handler = (IExecute<TCommand>)_serviceFactory.Build(typeof(IExecute<TCommand>));
_logger.Trace("{0} -> {1}", command.GetType().Name, handler.GetType().Name);

@ -0,0 +1,11 @@
namespace NzbDrone.Core.Messaging.Commands
{
public class UnknownCommand : Command
{
public override bool SendUpdatesToClient => false;
public override string CompletionMessage => "Skipped";
public string ContractName { get; set; }
}
}

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog;
namespace NzbDrone.Core.Messaging.Commands
{
public class UnknownCommandExecutor : IExecute<UnknownCommand>
{
private readonly Logger _logger;
public UnknownCommandExecutor(Logger logger)
{
_logger = logger;
}
public void Execute(UnknownCommand message)
{
_logger.Debug("Ignoring unknown command {0}", message.ContractName);
}
}
}
Loading…
Cancel
Save