@ -36,6 +36,7 @@ using Nancy;
using Nancy.ModelBinding ;
using Nancy.Responses.Negotiation ;
using Nancy.Validation ;
using Ombi.Api.Interfaces ;
using Ombi.Core ;
using Ombi.Core.SettingModels ;
using Ombi.Core.StatusChecker ;
@ -52,21 +53,34 @@ namespace Ombi.UI.Modules.Admin
public class IntegrationModule : BaseModule
{
public IntegrationModule ( ISettingsService < PlexRequestSettings > settingsService , ISettingsService < WatcherSettings > watcher ,
ISettingsService < CouchPotatoSettings > cp , ISecurityExtensions security , IAnalytics a ) : base ( "admin" , settingsService , security )
ISettingsService < CouchPotatoSettings > cp , ISecurityExtensions security , IAnalytics a , ISettingsService < RadarrSettings > radarrSettings ,
ICacheProvider cache , IRadarrApi radarrApi ) : base ( "admin" , settingsService , security )
{
WatcherSettings = watcher ;
Analytics = a ;
CpSettings = cp ;
Cache = cache ;
RadarrApi = radarrApi ;
RadarrSettings = radarrSettings ;
Before + = ( ctx ) = > Security . AdminLoginRedirect ( Permissions . Administrator , ctx ) ;
Get [ "/watcher" , true ] = async ( x , ct ) = > await Watcher ( ) ;
Post [ "/watcher" , true ] = async ( x , ct ) = > await SaveWatcher ( ) ;
Get [ "/radarr" , true ] = async ( x , ct ) = > await Radarr ( ) ;
Post [ "/radarr" , true ] = async ( x , ct ) = > await SaveRadarr ( ) ;
Post [ "/radarrprofiles" ] = _ = > GetRadarrQualityProfiles ( ) ;
}
private ISettingsService < WatcherSettings > WatcherSettings { get ; }
private ISettingsService < CouchPotatoSettings > CpSettings { get ; }
private ISettingsService < RadarrSettings > RadarrSettings { get ; }
private IRadarrApi RadarrApi { get ; }
private ICacheProvider Cache { get ; }
private IAnalytics Analytics { get ; }
private async Task < Negotiator > Watcher ( )
@ -97,15 +111,15 @@ namespace Ombi.UI.Modules.Admin
} ) ;
}
var watcherSettings = await Watche rSettings. GetSettingsAsync ( ) ;
var radarrSettings = await Radar rSettings. GetSettingsAsync ( ) ;
if ( watche rSettings. Enabled )
if ( radar rSettings. Enabled )
{
return
Response . AsJson ( new JsonResponseModel
{
Result = false ,
Message = "Cannot have Watche r and CouchPotato both enabled."
Message = "Cannot have Radar r and CouchPotato both enabled."
} ) ;
}
@ -116,5 +130,57 @@ namespace Ombi.UI.Modules.Admin
: new JsonResponseModel { Result = false , Message = "Could not update the settings, take a look at the logs." } ) ;
}
private async Task < Negotiator > Radarr ( )
{
var settings = await RadarrSettings . GetSettingsAsync ( ) ;
return View [ "Radarr" , settings ] ;
}
private async Task < Response > SaveRadarr ( )
{
var radarrSettings = this . Bind < RadarrSettings > ( ) ;
//Check Watcher and CP make sure they are not enabled
var watcher = await WatcherSettings . GetSettingsAsync ( ) ;
if ( watcher . Enabled )
{
return Response . AsJson ( new JsonResponseModel { Result = false , Message = "Watcher is enabled, we cannot enable Watcher and Radarr" } ) ;
}
var cp = await CpSettings . GetSettingsAsync ( ) ;
if ( cp . Enabled )
{
return Response . AsJson ( new JsonResponseModel { Result = false , Message = "CouchPotato is enabled, we cannot enable Watcher and CouchPotato" } ) ;
}
var valid = this . Validate ( radarrSettings ) ;
if ( ! valid . IsValid )
{
return Response . AsJson ( valid . SendJsonError ( ) ) ;
}
radarrSettings . ApiKey = radarrSettings . ApiKey . Trim ( ) ;
var result = await RadarrSettings . SaveSettingsAsync ( radarrSettings ) ;
return Response . AsJson ( result
? new JsonResponseModel { Result = true , Message = "Successfully Updated the Settings for Radarr!" }
: new JsonResponseModel { Result = false , Message = "Could not update the settings, take a look at the logs." } ) ;
}
private Response GetRadarrQualityProfiles ( )
{
var settings = this . Bind < RadarrSettings > ( ) ;
var profiles = RadarrApi . GetProfiles ( settings . ApiKey , settings . FullUri ) ;
// set the cache
if ( profiles ! = null )
{
Cache . Set ( CacheKeys . RadarrQualityProfiles , profiles ) ;
}
return Response . AsJson ( profiles ) ;
}
}
}