@ -69,7 +69,7 @@ namespace Prowlarr.Api.V1
[Produces("application/json")]
public ActionResult < TProviderResource > CreateProvider ( [ FromBody ] TProviderResource providerResource , [ FromQuery ] bool forceSave = false )
{
var providerDefinition = GetDefinition ( providerResource , true, ! forceSave , false ) ;
var providerDefinition = GetDefinition ( providerResource , null, true, ! forceSave , false ) ;
if ( providerDefinition . Enable )
{
@ -86,15 +86,22 @@ namespace Prowlarr.Api.V1
[Produces("application/json")]
public ActionResult < TProviderResource > UpdateProvider ( [ FromBody ] TProviderResource providerResource , [ FromQuery ] bool forceSave = false )
{
var providerDefinition = GetDefinition ( providerResource , true , ! forceSave , false ) ;
var existingDefinition = _providerFactory . Find ( providerResource . Id ) ;
var providerDefinition = GetDefinition ( providerResource , existingDefinition , true , ! forceSave , false ) ;
// Only test existing definitions if it is enabled and forceSave isn't set.
if ( providerDefinition . Enable & & ! forceSave )
// Compare settings separately because they are not serialized with the definition.
var hasDefinitionChanged = ! existingDefinition . Equals ( providerDefinition ) | | ! existingDefinition . Settings . Equals ( providerDefinition . Settings ) ;
// Only test existing definitions if it is enabled and forceSave isn't set and the definition has changed.
if ( providerDefinition . Enable & & ! forceSave & & hasDefinitionChanged )
{
Test ( providerDefinition , true ) ;
}
_providerFactory . Update ( providerDefinition ) ;
if ( hasDefinitionChanged )
{
_providerFactory . Update ( providerDefinition ) ;
}
return Accepted ( providerResource . Id ) ;
}
@ -140,9 +147,8 @@ namespace Prowlarr.Api.V1
return Accepted ( _providerFactory . Update ( definitionsToUpdate ) . Select ( x = > _resourceMapper . ToResource ( x ) ) ) ;
}
private TProviderDefinition GetDefinition ( TProviderResource providerResource , bool validate , bool includeWarnings , bool forceValidate )
private TProviderDefinition GetDefinition ( TProviderResource providerResource , TProviderDefinition existingDefinition , bool validate , bool includeWarnings , bool forceValidate )
{
var existingDefinition = providerResource . Id > 0 ? _providerFactory . Find ( providerResource . Id ) : null ;
var definition = _resourceMapper . ToModel ( providerResource , existingDefinition ) ;
if ( validate & & ( definition . Enable | | forceValidate ) )
@ -199,7 +205,8 @@ namespace Prowlarr.Api.V1
[Consumes("application/json")]
public object Test ( [ FromBody ] TProviderResource providerResource )
{
var providerDefinition = GetDefinition ( providerResource , true , true , true ) ;
var existingDefinition = providerResource . Id > 0 ? _providerFactory . Find ( providerResource . Id ) : null ;
var providerDefinition = GetDefinition ( providerResource , existingDefinition , true , true , true ) ;
Test ( providerDefinition , true ) ;
@ -232,9 +239,10 @@ namespace Prowlarr.Api.V1
[HttpPost("action/{name}")]
[Consumes("application/json")]
[Produces("application/json")]
public IActionResult RequestAction ( string name , [ FromBody ] TProviderResource resource)
public IActionResult RequestAction ( string name , [ FromBody ] TProviderResource p roviderR esource)
{
var providerDefinition = GetDefinition ( resource , false , false , false ) ;
var existingDefinition = providerResource . Id > 0 ? _providerFactory . Find ( providerResource . Id ) : null ;
var providerDefinition = GetDefinition ( providerResource , existingDefinition , false , false , false ) ;
var query = Request . Query . ToDictionary ( x = > x . Key , x = > x . Value . ToString ( ) ) ;