mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-20 21:55:03 -04:00
Fixed: Significantly improved api performance.
This commit is contained in:
@@ -6,11 +6,9 @@ using FluentValidation.Results;
|
||||
using Nancy;
|
||||
using NzbDrone.Api.ClientSchema;
|
||||
using NzbDrone.Api.Extensions;
|
||||
using NzbDrone.Api.Mapping;
|
||||
using NzbDrone.Common.Reflection;
|
||||
using NzbDrone.Core.ThingiProvider;
|
||||
using NzbDrone.Core.Validation;
|
||||
using Omu.ValueInjecter;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NzbDrone.Api
|
||||
@@ -48,9 +46,10 @@ namespace NzbDrone.Api
|
||||
private TProviderResource GetProviderById(int id)
|
||||
{
|
||||
var definition = _providerFactory.Get(id);
|
||||
var resource = definition.InjectTo<TProviderResource>();
|
||||
_providerFactory.SetProviderCharacteristics(definition);
|
||||
|
||||
resource.InjectFrom(_providerFactory.GetProviderCharacteristics(_providerFactory.GetInstance(definition), definition));
|
||||
var resource = new TProviderResource();
|
||||
MapToResource(resource, definition);
|
||||
|
||||
return resource;
|
||||
}
|
||||
@@ -63,10 +62,10 @@ namespace NzbDrone.Api
|
||||
|
||||
foreach (var definition in providerDefinitions)
|
||||
{
|
||||
_providerFactory.SetProviderCharacteristics(definition);
|
||||
|
||||
var providerResource = new TProviderResource();
|
||||
providerResource.InjectFrom(definition);
|
||||
providerResource.InjectFrom(_providerFactory.GetProviderCharacteristics(_providerFactory.GetInstance(definition), definition));
|
||||
providerResource.Fields = SchemaBuilder.ToSchema(definition.Settings);
|
||||
MapToResource(providerResource, definition);
|
||||
|
||||
result.Add(providerResource);
|
||||
}
|
||||
@@ -99,15 +98,8 @@ namespace NzbDrone.Api
|
||||
{
|
||||
var definition = new TProviderDefinition();
|
||||
|
||||
definition.InjectFrom(providerResource);
|
||||
MapToModel(definition, providerResource);
|
||||
|
||||
var preset = _providerFactory.GetPresetDefinitions(definition)
|
||||
.Where(v => v.Name == definition.Name)
|
||||
.Select(v => v.Settings)
|
||||
.FirstOrDefault();
|
||||
|
||||
var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract);
|
||||
definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(providerResource.Fields, configContract, preset);
|
||||
if (validate)
|
||||
{
|
||||
Validate(definition, includeWarnings);
|
||||
@@ -116,6 +108,37 @@ namespace NzbDrone.Api
|
||||
return definition;
|
||||
}
|
||||
|
||||
protected virtual void MapToResource(TProviderResource resource, TProviderDefinition definition)
|
||||
{
|
||||
resource.Id = definition.Id;
|
||||
|
||||
resource.Name = definition.Name;
|
||||
resource.ImplementationName = definition.ImplementationName;
|
||||
resource.Implementation = definition.Implementation;
|
||||
resource.ConfigContract = definition.ConfigContract;
|
||||
resource.Message = definition.Message;
|
||||
|
||||
resource.Fields = SchemaBuilder.ToSchema(definition.Settings);
|
||||
|
||||
resource.InfoLink = string.Format("https://github.com/Sonarr/Sonarr/wiki/Supported-{0}#{1}",
|
||||
typeof(TProviderResource).Name.Replace("Resource", "s"),
|
||||
definition.Implementation.ToLower());
|
||||
}
|
||||
|
||||
protected virtual void MapToModel(TProviderDefinition definition, TProviderResource resource)
|
||||
{
|
||||
definition.Id = resource.Id;
|
||||
|
||||
definition.Name = resource.Name;
|
||||
definition.ImplementationName = resource.ImplementationName;
|
||||
definition.Implementation = resource.Implementation;
|
||||
definition.ConfigContract = resource.ConfigContract;
|
||||
definition.Message = resource.Message;
|
||||
|
||||
var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract);
|
||||
definition.Settings = (IProviderConfig)SchemaBuilder.ReadFromSchema(resource.Fields, configContract);
|
||||
}
|
||||
|
||||
private void DeleteProvider(int id)
|
||||
{
|
||||
_providerFactory.Delete(id);
|
||||
@@ -130,19 +153,14 @@ namespace NzbDrone.Api
|
||||
foreach (var providerDefinition in defaultDefinitions)
|
||||
{
|
||||
var providerResource = new TProviderResource();
|
||||
providerResource.InjectFrom(providerDefinition);
|
||||
providerResource.Fields = SchemaBuilder.ToSchema(providerDefinition.Settings);
|
||||
providerResource.InfoLink = string.Format("https://github.com/NzbDrone/NzbDrone/wiki/Supported-{0}#{1}",
|
||||
typeof(TProviderResource).Name.Replace("Resource", "s"),
|
||||
providerDefinition.Implementation.ToLower());
|
||||
MapToResource(providerResource, providerDefinition);
|
||||
|
||||
var presetDefinitions = _providerFactory.GetPresetDefinitions(providerDefinition);
|
||||
|
||||
providerResource.Presets = presetDefinitions.Select(v =>
|
||||
{
|
||||
var presetResource = new TProviderResource();
|
||||
presetResource.InjectFrom(v);
|
||||
presetResource.Fields = SchemaBuilder.ToSchema(v.Settings);
|
||||
MapToResource(presetResource, v);
|
||||
|
||||
return presetResource as ProviderResource;
|
||||
}).ToList();
|
||||
@@ -167,7 +185,7 @@ namespace NzbDrone.Api
|
||||
|
||||
private Response ConnectData(string stage, TProviderResource providerResource)
|
||||
{
|
||||
TProviderDefinition providerDefinition = GetDefinition(providerResource, true, false);
|
||||
var providerDefinition = GetDefinition(providerResource, true, false);
|
||||
|
||||
if (!providerDefinition.Enable) return "{}";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user