using System; using System.Linq; using Nancy; using NzbDrone.Api.Extensions; using NzbDrone.Api.Mapping; using NzbDrone.Common.Composition; using NzbDrone.Common.Messaging; using NzbDrone.Common.Messaging.Tracking; namespace NzbDrone.Api.Commands { public class CommandModule : NzbDroneRestModule { private readonly IMessageAggregator _messageAggregator; private readonly IContainer _container; private readonly ITrackCommands _trackCommands; public CommandModule(IMessageAggregator messageAggregator, IContainer container, ITrackCommands trackCommands) { _messageAggregator = messageAggregator; _container = container; _trackCommands = trackCommands; Post["/"] = x => RunCommand(ReadResourceFromRequest()); Get["/"] = x => GetAllCommands(); } private Response RunCommand(CommandResource resource) { var commandType = _container.GetImplementations(typeof(ICommand)) .Single(c => c.Name.Replace("Command", "") .Equals(resource.Command, StringComparison.InvariantCultureIgnoreCase)); dynamic command = Request.Body.FromJson(commandType); var response = (TrackedCommand) _messageAggregator.PublishCommandAsync(command); return response.AsResponse(HttpStatusCode.Created); } private Response GetAllCommands() { return _trackCommands.AllTracked().AsResponse(); } } }