You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Api/NzbDroneRestModuleWithSigna...

66 lines
2.1 KiB

11 years ago
using NzbDrone.Api.REST;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Datastore.Events;
11 years ago
using NzbDrone.Core.Messaging.Events;
11 years ago
using NzbDrone.SignalR;
namespace NzbDrone.Api
{
public abstract class NzbDroneRestModuleWithSignalR<TResource, TModel> : NzbDroneRestModule<TResource>, IHandle<ModelEvent<TModel>>
where TResource : RestResource, new()
where TModel : ModelBase, new()
11 years ago
{
private readonly IBroadcastSignalRMessage _signalRBroadcaster;
11 years ago
protected NzbDroneRestModuleWithSignalR(IBroadcastSignalRMessage signalRBroadcaster)
11 years ago
{
_signalRBroadcaster = signalRBroadcaster;
11 years ago
}
protected NzbDroneRestModuleWithSignalR(IBroadcastSignalRMessage signalRBroadcaster, string resource)
11 years ago
: base(resource)
{
_signalRBroadcaster = signalRBroadcaster;
11 years ago
}
11 years ago
public void Handle(ModelEvent<TModel> message)
{
if (message.Action == ModelAction.Deleted || message.Action == ModelAction.Sync)
{
BroadcastResourceChange(message.Action);
}
BroadcastResourceChange(message.Action, message.Model.Id);
}
protected void BroadcastResourceChange(ModelAction action, int id)
{
var resource = GetResourceById(id);
BroadcastResourceChange(action, resource);
}
11 years ago
protected void BroadcastResourceChange(ModelAction action, TResource resource)
{
11 years ago
var signalRMessage = new SignalRMessage
{
Name = Resource,
Body = new ResourceChangeMessage<TResource>(resource, action)
};
_signalRBroadcaster.BroadcastMessage(signalRMessage);
11 years ago
}
11 years ago
protected void BroadcastResourceChange(ModelAction action)
{
var signalRMessage = new SignalRMessage
{
Name = Resource,
Body = new ResourceChangeMessage<TResource>(action)
};
_signalRBroadcaster.BroadcastMessage(signalRMessage);
11 years ago
}
}
}