Radarr/src/Radarr.Http/RadarrRestModuleWithSignalR.cs

100 lines
2.9 KiB
C#
Raw Normal View History

2018-11-23 07:03:32 +00:00
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Datastore.Events;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.SignalR;
using Radarr.Http.REST;
namespace Radarr.Http
{
public abstract class RadarrRestModuleWithSignalR<TResource, TModel> : RadarrRestModule<TResource>, IHandle<ModelEvent<TModel>>
where TResource : RestResource, new()
where TModel : ModelBase, new()
{
private readonly IBroadcastSignalRMessage _signalRBroadcaster;
protected RadarrRestModuleWithSignalR(IBroadcastSignalRMessage signalRBroadcaster)
{
_signalRBroadcaster = signalRBroadcaster;
}
protected RadarrRestModuleWithSignalR(IBroadcastSignalRMessage signalRBroadcaster, string resource)
: base(resource)
{
_signalRBroadcaster = signalRBroadcaster;
}
public void Handle(ModelEvent<TModel> message)
{
2019-12-22 22:08:53 +00:00
if (!_signalRBroadcaster.IsConnected)
{
return;
}
2018-11-23 07:03:32 +00:00
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)
{
2019-12-22 22:08:53 +00:00
if (!_signalRBroadcaster.IsConnected)
{
return;
}
2018-11-23 07:03:32 +00:00
if (action == ModelAction.Deleted)
{
2019-12-22 22:08:53 +00:00
BroadcastResourceChange(action, new TResource { Id = id });
2018-11-23 07:03:32 +00:00
}
else
{
var resource = GetResourceById(id);
BroadcastResourceChange(action, resource);
}
}
protected void BroadcastResourceChange(ModelAction action, TResource resource)
{
2019-12-22 22:08:53 +00:00
if (!_signalRBroadcaster.IsConnected)
{
return;
}
if (GetType().Namespace.Contains("V3"))
2018-11-23 07:03:32 +00:00
{
var signalRMessage = new SignalRMessage
2019-12-22 22:08:53 +00:00
{
Name = Resource,
Body = new ResourceChangeMessage<TResource>(resource, action),
Action = action
};
2018-11-23 07:03:32 +00:00
_signalRBroadcaster.BroadcastMessage(signalRMessage);
}
}
2019-12-22 21:24:11 +00:00
2018-11-23 07:03:32 +00:00
protected void BroadcastResourceChange(ModelAction action)
{
2019-12-22 22:08:53 +00:00
if (!_signalRBroadcaster.IsConnected)
{
return;
}
if (GetType().Namespace.Contains("V3"))
2018-11-23 07:03:32 +00:00
{
var signalRMessage = new SignalRMessage
2019-12-22 22:08:53 +00:00
{
Name = Resource,
Body = new ResourceChangeMessage<TResource>(action),
Action = action
};
2018-11-23 07:03:32 +00:00
_signalRBroadcaster.BroadcastMessage(signalRMessage);
}
}
}
}