mirror of https://github.com/lidarr/Lidarr
Skip unknown/removed commands still queued in the database
This commit is contained in:
parent
880170637e
commit
8a68042192
|
@ -6,6 +6,7 @@ using Moq;
|
|||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Datastore.Converters;
|
||||
using NzbDrone.Core.Messaging.Commands;
|
||||
using NzbDrone.Core.Music.Commands;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
|
@ -50,6 +51,22 @@ namespace NzbDrone.Core.Test.Datastore.Converters
|
|||
Subject.FromDB(context).Should().BeOfType<RefreshArtistCommand>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_unknown_command_when_getting_json_from_db()
|
||||
{
|
||||
var dataRecordMock = new Mock<IDataRecord>();
|
||||
dataRecordMock.Setup(s => s.GetOrdinal("Name")).Returns(0);
|
||||
dataRecordMock.Setup(s => s.GetString(0)).Returns("MockRemovedCommand");
|
||||
|
||||
var context = new ConverterContext
|
||||
{
|
||||
DataRecord = dataRecordMock.Object,
|
||||
DbValue = new RefreshArtistCommand(2).ToJson()
|
||||
};
|
||||
|
||||
Subject.FromDB(context).Should().BeOfType<UnknownCommand>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_null_for_null_value_when_getting_from_db()
|
||||
{
|
||||
|
|
|
@ -29,7 +29,11 @@ namespace NzbDrone.Core.Datastore.Converters
|
|||
|
||||
if (impType == null)
|
||||
{
|
||||
throw new CommandNotFoundException(contract);
|
||||
var result = Json.Deserialize<UnknownCommand>(stringValue);
|
||||
|
||||
result.ContractName = contract;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return Json.Deserialize(stringValue, impType);
|
||||
|
|
|
@ -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…
Reference in New Issue