New: Sync updates to UI for providers (#10550)

pull/10565/head
Bogdan 3 months ago committed by GitHub
parent d90ee3ae11
commit a06792b923
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -192,10 +192,50 @@ class SignalRConnector extends Component {
} }
}; };
handleDownloadclient = ({ action, resource }) => {
const section = 'settings.downloadClients';
if (action === 'created' || action === 'updated') {
this.props.dispatchUpdateItem({ section, ...resource });
} else if (action === 'deleted') {
this.props.dispatchRemoveItem({ section, id: resource.id });
}
};
handleHealth = () => { handleHealth = () => {
this.props.dispatchFetchHealth(); this.props.dispatchFetchHealth();
}; };
handleImportlist = ({ action, resource }) => {
const section = 'settings.importLists';
if (action === 'created' || action === 'updated') {
this.props.dispatchUpdateItem({ section, ...resource });
} else if (action === 'deleted') {
this.props.dispatchRemoveItem({ section, id: resource.id });
}
};
handleIndexer = ({ action, resource }) => {
const section = 'settings.indexers';
if (action === 'created' || action === 'updated') {
this.props.dispatchUpdateItem({ section, ...resource });
} else if (action === 'deleted') {
this.props.dispatchRemoveItem({ section, id: resource.id });
}
};
handleNotification = ({ action, resource }) => {
const section = 'settings.notifications';
if (action === 'created' || action === 'updated') {
this.props.dispatchUpdateItem({ section, ...resource });
} else if (action === 'deleted') {
this.props.dispatchRemoveItem({ section, id: resource.id });
}
};
handleMovie = (body) => { handleMovie = (body) => {
const action = body.action; const action = body.action;
const section = 'movies'; const section = 'movies';

@ -1,4 +1,5 @@
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
using NzbDrone.SignalR;
using Radarr.Http; using Radarr.Http;
namespace Radarr.Api.V3.DownloadClient namespace Radarr.Api.V3.DownloadClient
@ -9,8 +10,8 @@ namespace Radarr.Api.V3.DownloadClient
public static readonly DownloadClientResourceMapper ResourceMapper = new (); public static readonly DownloadClientResourceMapper ResourceMapper = new ();
public static readonly DownloadClientBulkResourceMapper BulkResourceMapper = new (); public static readonly DownloadClientBulkResourceMapper BulkResourceMapper = new ();
public DownloadClientController(IDownloadClientFactory downloadClientFactory) public DownloadClientController(IBroadcastSignalRMessage signalRBroadcaster, IDownloadClientFactory downloadClientFactory)
: base(downloadClientFactory, "downloadclient", ResourceMapper, BulkResourceMapper) : base(signalRBroadcaster, downloadClientFactory, "downloadclient", ResourceMapper, BulkResourceMapper)
{ {
} }
} }

@ -2,6 +2,7 @@ using FluentValidation;
using NzbDrone.Core.ImportLists; using NzbDrone.Core.ImportLists;
using NzbDrone.Core.Validation; using NzbDrone.Core.Validation;
using NzbDrone.Core.Validation.Paths; using NzbDrone.Core.Validation.Paths;
using NzbDrone.SignalR;
using Radarr.Http; using Radarr.Http;
namespace Radarr.Api.V3.ImportLists namespace Radarr.Api.V3.ImportLists
@ -12,8 +13,11 @@ namespace Radarr.Api.V3.ImportLists
public static readonly ImportListResourceMapper ResourceMapper = new (); public static readonly ImportListResourceMapper ResourceMapper = new ();
public static readonly ImportListBulkResourceMapper BulkResourceMapper = new (); public static readonly ImportListBulkResourceMapper BulkResourceMapper = new ();
public ImportListController(IImportListFactory importListFactory, RootFolderExistsValidator rootFolderExistsValidator, QualityProfileExistsValidator qualityProfileExistsValidator) public ImportListController(IBroadcastSignalRMessage signalRBroadcaster,
: base(importListFactory, "importlist", ResourceMapper, BulkResourceMapper) IImportListFactory importListFactory,
RootFolderExistsValidator rootFolderExistsValidator,
QualityProfileExistsValidator qualityProfileExistsValidator)
: base(signalRBroadcaster, importListFactory, "importlist", ResourceMapper, BulkResourceMapper)
{ {
SharedValidator.RuleFor(c => c.MinimumAvailability).NotNull(); SharedValidator.RuleFor(c => c.MinimumAvailability).NotNull();

@ -1,5 +1,6 @@
using NzbDrone.Core.Indexers; using NzbDrone.Core.Indexers;
using NzbDrone.Core.Validation; using NzbDrone.Core.Validation;
using NzbDrone.SignalR;
using Radarr.Http; using Radarr.Http;
namespace Radarr.Api.V3.Indexers namespace Radarr.Api.V3.Indexers
@ -10,8 +11,10 @@ namespace Radarr.Api.V3.Indexers
public static readonly IndexerResourceMapper ResourceMapper = new (); public static readonly IndexerResourceMapper ResourceMapper = new ();
public static readonly IndexerBulkResourceMapper BulkResourceMapper = new (); public static readonly IndexerBulkResourceMapper BulkResourceMapper = new ();
public IndexerController(IndexerFactory indexerFactory, DownloadClientExistsValidator downloadClientExistsValidator) public IndexerController(IBroadcastSignalRMessage signalRBroadcaster,
: base(indexerFactory, "indexer", ResourceMapper, BulkResourceMapper) IndexerFactory indexerFactory,
DownloadClientExistsValidator downloadClientExistsValidator)
: base(signalRBroadcaster, indexerFactory, "indexer", ResourceMapper, BulkResourceMapper)
{ {
SharedValidator.RuleFor(c => c.DownloadClientId).SetValidator(downloadClientExistsValidator); SharedValidator.RuleFor(c => c.DownloadClientId).SetValidator(downloadClientExistsValidator);
} }

@ -1,6 +1,8 @@
using System; using System;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NzbDrone.Core.Extras.Metadata; using NzbDrone.Core.Extras.Metadata;
using NzbDrone.Core.ThingiProvider.Events;
using NzbDrone.SignalR;
using Radarr.Http; using Radarr.Http;
namespace Radarr.Api.V3.Metadata namespace Radarr.Api.V3.Metadata
@ -11,8 +13,8 @@ namespace Radarr.Api.V3.Metadata
public static readonly MetadataResourceMapper ResourceMapper = new (); public static readonly MetadataResourceMapper ResourceMapper = new ();
public static readonly MetadataBulkResourceMapper BulkResourceMapper = new (); public static readonly MetadataBulkResourceMapper BulkResourceMapper = new ();
public MetadataController(IMetadataFactory metadataFactory) public MetadataController(IBroadcastSignalRMessage signalRBroadcaster, IMetadataFactory metadataFactory)
: base(metadataFactory, "metadata", ResourceMapper, BulkResourceMapper) : base(signalRBroadcaster, metadataFactory, "metadata", ResourceMapper, BulkResourceMapper)
{ {
} }
@ -27,5 +29,23 @@ namespace Radarr.Api.V3.Metadata
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
[NonAction]
public override void Handle(ProviderAddedEvent<IMetadata> message)
{
throw new NotImplementedException();
}
[NonAction]
public override void Handle(ProviderUpdatedEvent<IMetadata> message)
{
throw new NotImplementedException();
}
[NonAction]
public override void Handle(ProviderDeletedEvent<IMetadata> message)
{
throw new NotImplementedException();
}
} }
} }

@ -1,6 +1,7 @@
using System; using System;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NzbDrone.Core.Notifications; using NzbDrone.Core.Notifications;
using NzbDrone.SignalR;
using Radarr.Http; using Radarr.Http;
namespace Radarr.Api.V3.Notifications namespace Radarr.Api.V3.Notifications
@ -11,8 +12,8 @@ namespace Radarr.Api.V3.Notifications
public static readonly NotificationResourceMapper ResourceMapper = new (); public static readonly NotificationResourceMapper ResourceMapper = new ();
public static readonly NotificationBulkResourceMapper BulkResourceMapper = new (); public static readonly NotificationBulkResourceMapper BulkResourceMapper = new ();
public NotificationController(NotificationFactory notificationFactory) public NotificationController(IBroadcastSignalRMessage signalRBroadcaster, NotificationFactory notificationFactory)
: base(notificationFactory, "notification", ResourceMapper, BulkResourceMapper) : base(signalRBroadcaster, notificationFactory, "notification", ResourceMapper, BulkResourceMapper)
{ {
} }

@ -5,14 +5,21 @@ using FluentValidation.Results;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
using NzbDrone.Common.Serializer; using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Events;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.ThingiProvider; using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.ThingiProvider.Events;
using NzbDrone.Core.Validation; using NzbDrone.Core.Validation;
using NzbDrone.SignalR;
using Radarr.Http.REST; using Radarr.Http.REST;
using Radarr.Http.REST.Attributes; using Radarr.Http.REST.Attributes;
namespace Radarr.Api.V3 namespace Radarr.Api.V3
{ {
public abstract class ProviderControllerBase<TProviderResource, TBulkProviderResource, TProvider, TProviderDefinition> : RestController<TProviderResource> public abstract class ProviderControllerBase<TProviderResource, TBulkProviderResource, TProvider, TProviderDefinition> : RestControllerWithSignalR<TProviderResource, TProviderDefinition>,
IHandle<ProviderAddedEvent<TProvider>>,
IHandle<ProviderUpdatedEvent<TProvider>>,
IHandle<ProviderDeletedEvent<TProvider>>
where TProviderDefinition : ProviderDefinition, new() where TProviderDefinition : ProviderDefinition, new()
where TProvider : IProvider where TProvider : IProvider
where TProviderResource : ProviderResource<TProviderResource>, new() where TProviderResource : ProviderResource<TProviderResource>, new()
@ -22,11 +29,13 @@ namespace Radarr.Api.V3
private readonly ProviderResourceMapper<TProviderResource, TProviderDefinition> _resourceMapper; private readonly ProviderResourceMapper<TProviderResource, TProviderDefinition> _resourceMapper;
private readonly ProviderBulkResourceMapper<TBulkProviderResource, TProviderDefinition> _bulkResourceMapper; private readonly ProviderBulkResourceMapper<TBulkProviderResource, TProviderDefinition> _bulkResourceMapper;
protected ProviderControllerBase(IProviderFactory<TProvider, protected ProviderControllerBase(IBroadcastSignalRMessage signalRBroadcaster,
IProviderFactory<TProvider,
TProviderDefinition> providerFactory, TProviderDefinition> providerFactory,
string resource, string resource,
ProviderResourceMapper<TProviderResource, TProviderDefinition> resourceMapper, ProviderResourceMapper<TProviderResource, TProviderDefinition> resourceMapper,
ProviderBulkResourceMapper<TBulkProviderResource, TProviderDefinition> bulkResourceMapper) ProviderBulkResourceMapper<TBulkProviderResource, TProviderDefinition> bulkResourceMapper)
: base(signalRBroadcaster)
{ {
_providerFactory = providerFactory; _providerFactory = providerFactory;
_resourceMapper = resourceMapper; _resourceMapper = resourceMapper;
@ -263,6 +272,24 @@ namespace Radarr.Api.V3
return Content(data.ToJson(), "application/json"); return Content(data.ToJson(), "application/json");
} }
[NonAction]
public virtual void Handle(ProviderAddedEvent<TProvider> message)
{
BroadcastResourceChange(ModelAction.Created, message.Definition.Id);
}
[NonAction]
public virtual void Handle(ProviderUpdatedEvent<TProvider> message)
{
BroadcastResourceChange(ModelAction.Updated, message.Definition.Id);
}
[NonAction]
public virtual void Handle(ProviderDeletedEvent<TProvider> message)
{
BroadcastResourceChange(ModelAction.Deleted, message.ProviderId);
}
private void Validate(TProviderDefinition definition, bool includeWarnings) private void Validate(TProviderDefinition definition, bool includeWarnings)
{ {
var validationResult = definition.Settings.Validate(); var validationResult = definition.Settings.Validate();

Loading…
Cancel
Save