2018-04-21 04:59:31 +00:00
|
|
|
using NLog;
|
2011-10-23 05:26:43 +00:00
|
|
|
using NzbDrone.Common;
|
2018-04-21 04:59:31 +00:00
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2019-09-03 02:22:25 +00:00
|
|
|
using NzbDrone.Common.Processes;
|
|
|
|
using Radarr.Host.AccessControl;
|
|
|
|
using IServiceProvider = NzbDrone.Common.IServiceProvider;
|
|
|
|
|
2017-01-05 19:42:02 +00:00
|
|
|
namespace Radarr.Host
|
2011-10-09 02:16:11 +00:00
|
|
|
{
|
2011-10-13 02:24:30 +00:00
|
|
|
public class Router
|
2011-10-09 02:16:11 +00:00
|
|
|
{
|
2019-10-14 20:21:00 +00:00
|
|
|
private readonly INzbDroneConsoleFactory _nzbDroneConsoleFactory;
|
2013-04-16 04:52:41 +00:00
|
|
|
private readonly INzbDroneServiceFactory _nzbDroneServiceFactory;
|
2013-05-10 23:53:50 +00:00
|
|
|
private readonly IServiceProvider _serviceProvider;
|
2013-04-16 04:52:41 +00:00
|
|
|
private readonly IConsoleService _consoleService;
|
2018-04-21 04:59:31 +00:00
|
|
|
private readonly IRuntimeInfo _runtimeInfo;
|
2019-09-03 02:22:25 +00:00
|
|
|
private readonly IProcessProvider _processProvider;
|
|
|
|
private readonly IRemoteAccessAdapter _remoteAccessAdapter;
|
2013-03-01 00:50:50 +00:00
|
|
|
private readonly Logger _logger;
|
2011-10-09 02:16:11 +00:00
|
|
|
|
2019-10-14 20:21:00 +00:00
|
|
|
public Router(INzbDroneConsoleFactory nzbDroneConsoleFactory,
|
|
|
|
INzbDroneServiceFactory nzbDroneServiceFactory,
|
2019-09-03 02:22:25 +00:00
|
|
|
IServiceProvider serviceProvider,
|
|
|
|
IConsoleService consoleService,
|
|
|
|
IRuntimeInfo runtimeInfo,
|
|
|
|
IProcessProvider processProvider,
|
|
|
|
IRemoteAccessAdapter remoteAccessAdapter,
|
|
|
|
Logger logger)
|
2011-10-09 02:16:11 +00:00
|
|
|
{
|
2019-10-14 20:21:00 +00:00
|
|
|
_nzbDroneConsoleFactory = nzbDroneConsoleFactory;
|
2013-04-16 04:52:41 +00:00
|
|
|
_nzbDroneServiceFactory = nzbDroneServiceFactory;
|
2011-10-09 02:16:11 +00:00
|
|
|
_serviceProvider = serviceProvider;
|
2013-04-16 04:52:41 +00:00
|
|
|
_consoleService = consoleService;
|
2018-04-21 04:59:31 +00:00
|
|
|
_runtimeInfo = runtimeInfo;
|
2019-09-03 02:22:25 +00:00
|
|
|
_processProvider = processProvider;
|
|
|
|
_remoteAccessAdapter = remoteAccessAdapter;
|
2013-03-01 00:50:50 +00:00
|
|
|
_logger = logger;
|
2011-10-09 02:16:11 +00:00
|
|
|
}
|
|
|
|
|
2013-03-01 00:50:50 +00:00
|
|
|
public void Route(ApplicationModes applicationModes)
|
2011-10-14 01:22:51 +00:00
|
|
|
{
|
2013-03-01 00:50:50 +00:00
|
|
|
_logger.Info("Application mode: {0}", applicationModes);
|
2013-01-15 23:17:12 +00:00
|
|
|
|
2013-03-01 00:50:50 +00:00
|
|
|
switch (applicationModes)
|
2013-01-06 08:11:14 +00:00
|
|
|
{
|
2013-03-01 00:50:50 +00:00
|
|
|
case ApplicationModes.Service:
|
2013-01-06 08:11:14 +00:00
|
|
|
{
|
2014-03-13 20:12:42 +00:00
|
|
|
_logger.Debug("Service selected");
|
2013-04-16 04:52:41 +00:00
|
|
|
_serviceProvider.Run(_nzbDroneServiceFactory.Build());
|
2013-01-06 08:11:14 +00:00
|
|
|
break;
|
|
|
|
}
|
2011-10-14 01:22:51 +00:00
|
|
|
|
2013-08-07 05:32:22 +00:00
|
|
|
case ApplicationModes.Interactive:
|
2013-01-06 08:11:14 +00:00
|
|
|
{
|
2018-04-21 04:59:31 +00:00
|
|
|
_logger.Debug(_runtimeInfo.IsWindowsTray ? "Tray selected" : "Console selected");
|
2019-10-14 20:21:00 +00:00
|
|
|
_nzbDroneConsoleFactory.Start();
|
2013-01-06 08:11:14 +00:00
|
|
|
break;
|
|
|
|
}
|
2019-12-22 22:08:53 +00:00
|
|
|
|
2013-03-01 00:50:50 +00:00
|
|
|
case ApplicationModes.InstallService:
|
2013-01-06 08:11:14 +00:00
|
|
|
{
|
2014-03-13 20:12:42 +00:00
|
|
|
_logger.Debug("Install Service selected");
|
2018-11-23 07:03:32 +00:00
|
|
|
if (_serviceProvider.ServiceExist(ServiceProvider.SERVICE_NAME))
|
2011-10-14 01:22:51 +00:00
|
|
|
{
|
2013-04-16 04:52:41 +00:00
|
|
|
_consoleService.PrintServiceAlreadyExist();
|
2011-10-14 01:22:51 +00:00
|
|
|
}
|
2013-01-06 08:11:14 +00:00
|
|
|
else
|
2011-10-14 01:22:51 +00:00
|
|
|
{
|
2019-09-03 02:22:25 +00:00
|
|
|
_remoteAccessAdapter.MakeAccessible(true);
|
2018-11-23 07:03:32 +00:00
|
|
|
_serviceProvider.Install(ServiceProvider.SERVICE_NAME);
|
2019-09-03 02:22:25 +00:00
|
|
|
_serviceProvider.SetPermissions(ServiceProvider.SERVICE_NAME);
|
|
|
|
|
|
|
|
// Start the service and exit.
|
|
|
|
// Ensures that there isn't an instance of Radarr already running that the service account cannot stop.
|
|
|
|
_processProvider.SpawnNewProcess("sc.exe", $"start {ServiceProvider.SERVICE_NAME}", null, true);
|
2011-10-14 01:22:51 +00:00
|
|
|
}
|
2019-12-22 22:08:53 +00:00
|
|
|
|
2013-01-06 08:11:14 +00:00
|
|
|
break;
|
|
|
|
}
|
2019-12-22 22:08:53 +00:00
|
|
|
|
2013-03-01 00:50:50 +00:00
|
|
|
case ApplicationModes.UninstallService:
|
2013-01-06 08:11:14 +00:00
|
|
|
{
|
2014-03-13 20:12:42 +00:00
|
|
|
_logger.Debug("Uninstall Service selected");
|
2018-11-23 07:03:32 +00:00
|
|
|
if (!_serviceProvider.ServiceExist(ServiceProvider.SERVICE_NAME))
|
2011-10-14 01:22:51 +00:00
|
|
|
{
|
2013-07-09 00:47:09 +00:00
|
|
|
_consoleService.PrintServiceDoesNotExist();
|
2011-10-14 01:22:51 +00:00
|
|
|
}
|
2013-01-06 08:11:14 +00:00
|
|
|
else
|
2011-10-14 01:22:51 +00:00
|
|
|
{
|
2019-06-14 03:54:25 +00:00
|
|
|
_serviceProvider.Uninstall(ServiceProvider.SERVICE_NAME);
|
2011-10-14 01:22:51 +00:00
|
|
|
}
|
2013-01-06 08:11:14 +00:00
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
break;
|
|
|
|
}
|
2019-12-22 22:08:53 +00:00
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
case ApplicationModes.RegisterUrl:
|
|
|
|
{
|
|
|
|
_logger.Debug("Regiser URL selected");
|
|
|
|
_remoteAccessAdapter.MakeAccessible(false);
|
|
|
|
|
2013-01-06 08:11:14 +00:00
|
|
|
break;
|
|
|
|
}
|
2019-12-22 22:08:53 +00:00
|
|
|
|
2013-01-06 08:11:14 +00:00
|
|
|
default:
|
|
|
|
{
|
2013-04-16 04:52:41 +00:00
|
|
|
_consoleService.PrintHelp();
|
2013-01-06 08:11:14 +00:00
|
|
|
break;
|
|
|
|
}
|
2011-10-14 01:22:51 +00:00
|
|
|
}
|
|
|
|
}
|
2011-10-09 02:16:11 +00:00
|
|
|
}
|
2019-12-22 21:24:10 +00:00
|
|
|
}
|