@ -69,7 +69,7 @@ namespace Radarr.Api.V3
[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 Radarr.Api.V3
[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 )
// Comparing via JSON string to eliminate the need for every provider implementation to implement equality checks.
var hasDefinitionChanged = STJson . ToJson ( existingDefinition ) ! = STJson . ToJson ( providerDefinition ) ;
// Only test existing definitions if it is enabled and forceSave isn't set or 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 Radarr.Api.V3
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 ) )
@ -195,7 +201,8 @@ namespace Radarr.Api.V3
[HttpPost("test")]
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 ) ;
@ -229,9 +236,10 @@ namespace Radarr.Api.V3
[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 ( ) ) ;