2013-07-19 05:47:55 +02:00
|
|
|
|
using NLog;
|
2011-10-23 07:26:43 +02:00
|
|
|
|
using NzbDrone.Common;
|
2013-06-28 02:04:52 +02:00
|
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2013-05-04 23:09:25 +02:00
|
|
|
|
using NzbDrone.SysTray;
|
2013-05-11 01:53:50 +02:00
|
|
|
|
using IServiceProvider = NzbDrone.Common.IServiceProvider;
|
2011-10-09 04:16:11 +02:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone
|
|
|
|
|
{
|
2011-10-13 04:24:30 +02:00
|
|
|
|
public class Router
|
2011-10-09 04:16:11 +02:00
|
|
|
|
{
|
2013-04-16 06:52:41 +02:00
|
|
|
|
private readonly INzbDroneServiceFactory _nzbDroneServiceFactory;
|
2013-05-11 01:53:50 +02:00
|
|
|
|
private readonly IServiceProvider _serviceProvider;
|
2013-07-09 02:47:09 +02:00
|
|
|
|
private readonly StartupArguments _startupArguments;
|
2013-04-16 06:52:41 +02:00
|
|
|
|
private readonly IConsoleService _consoleService;
|
2013-06-28 02:04:52 +02:00
|
|
|
|
private readonly IRuntimeInfo _runtimeInfo;
|
2013-05-11 01:53:50 +02:00
|
|
|
|
private readonly ISystemTrayApp _systemTrayProvider;
|
2013-03-01 01:50:50 +01:00
|
|
|
|
private readonly Logger _logger;
|
2011-10-09 04:16:11 +02:00
|
|
|
|
|
2013-07-09 02:47:09 +02:00
|
|
|
|
public Router(INzbDroneServiceFactory nzbDroneServiceFactory, IServiceProvider serviceProvider, StartupArguments startupArguments,
|
2013-06-28 02:04:52 +02:00
|
|
|
|
IConsoleService consoleService, IRuntimeInfo runtimeInfo, ISystemTrayApp systemTrayProvider, Logger logger)
|
2011-10-09 04:16:11 +02:00
|
|
|
|
{
|
2013-04-16 06:52:41 +02:00
|
|
|
|
_nzbDroneServiceFactory = nzbDroneServiceFactory;
|
2011-10-09 04:16:11 +02:00
|
|
|
|
_serviceProvider = serviceProvider;
|
2013-07-09 02:47:09 +02:00
|
|
|
|
_startupArguments = startupArguments;
|
2013-04-16 06:52:41 +02:00
|
|
|
|
_consoleService = consoleService;
|
2013-06-28 02:04:52 +02:00
|
|
|
|
_runtimeInfo = runtimeInfo;
|
2013-05-11 01:53:50 +02:00
|
|
|
|
_systemTrayProvider = systemTrayProvider;
|
2013-03-01 01:50:50 +01:00
|
|
|
|
_logger = logger;
|
2011-10-09 04:16:11 +02:00
|
|
|
|
}
|
|
|
|
|
|
2013-07-09 02:47:09 +02:00
|
|
|
|
public void Route()
|
2011-10-09 04:16:11 +02:00
|
|
|
|
{
|
2013-07-09 02:47:09 +02:00
|
|
|
|
var appMode = GetApplicationMode();
|
|
|
|
|
Route(appMode);
|
2011-10-14 03:22:51 +02:00
|
|
|
|
}
|
|
|
|
|
|
2013-03-01 01:50:50 +01:00
|
|
|
|
public void Route(ApplicationModes applicationModes)
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-06-19 23:08:56 +02:00
|
|
|
|
if (!_runtimeInfo.IsUserInteractive && !OsInfo.IsLinux)
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-03-01 01:50:50 +01:00
|
|
|
|
applicationModes = ApplicationModes.Service;
|
2011-10-09 04:16:11 +02:00
|
|
|
|
}
|
2013-01-06 09:11:14 +01:00
|
|
|
|
|
2013-03-01 01:50:50 +01:00
|
|
|
|
_logger.Info("Application mode: {0}", applicationModes);
|
2013-01-16 00:17:12 +01:00
|
|
|
|
|
2013-03-01 01:50:50 +01:00
|
|
|
|
switch (applicationModes)
|
2013-01-06 09:11:14 +01:00
|
|
|
|
{
|
2013-03-01 01:50:50 +01:00
|
|
|
|
case ApplicationModes.Service:
|
2013-01-06 09:11:14 +01:00
|
|
|
|
{
|
2013-03-01 01:50:50 +01:00
|
|
|
|
_logger.Trace("Service selected");
|
2013-04-16 06:52:41 +02:00
|
|
|
|
_serviceProvider.Run(_nzbDroneServiceFactory.Build());
|
2013-01-06 09:11:14 +01:00
|
|
|
|
break;
|
|
|
|
|
}
|
2011-10-14 03:22:51 +02:00
|
|
|
|
|
2013-03-01 01:50:50 +01:00
|
|
|
|
case ApplicationModes.Console:
|
2013-01-06 09:11:14 +01:00
|
|
|
|
{
|
2013-03-01 01:50:50 +01:00
|
|
|
|
_logger.Trace("Console selected");
|
2013-04-16 06:52:41 +02:00
|
|
|
|
_nzbDroneServiceFactory.Start();
|
|
|
|
|
if (_consoleService.IsConsoleApplication)
|
|
|
|
|
{
|
|
|
|
|
_consoleService.WaitForClose();
|
|
|
|
|
}
|
2013-01-30 03:21:45 +01:00
|
|
|
|
else
|
|
|
|
|
{
|
2013-05-11 01:53:50 +02:00
|
|
|
|
_systemTrayProvider.Start();
|
2013-01-30 03:21:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
2013-01-06 09:11:14 +01:00
|
|
|
|
break;
|
|
|
|
|
}
|
2013-03-01 01:50:50 +01:00
|
|
|
|
case ApplicationModes.InstallService:
|
2013-01-06 09:11:14 +01:00
|
|
|
|
{
|
2013-03-01 01:50:50 +01:00
|
|
|
|
_logger.Trace("Install Service selected");
|
2013-01-06 09:11:14 +01:00
|
|
|
|
if (_serviceProvider.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME))
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-04-16 06:52:41 +02:00
|
|
|
|
_consoleService.PrintServiceAlreadyExist();
|
2011-10-14 03:22:51 +02:00
|
|
|
|
}
|
2013-01-06 09:11:14 +01:00
|
|
|
|
else
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-01-06 09:11:14 +01:00
|
|
|
|
_serviceProvider.Install(ServiceProvider.NZBDRONE_SERVICE_NAME);
|
|
|
|
|
_serviceProvider.Start(ServiceProvider.NZBDRONE_SERVICE_NAME);
|
2011-10-14 03:22:51 +02:00
|
|
|
|
}
|
2013-01-06 09:11:14 +01:00
|
|
|
|
break;
|
|
|
|
|
}
|
2013-03-01 01:50:50 +01:00
|
|
|
|
case ApplicationModes.UninstallService:
|
2013-01-06 09:11:14 +01:00
|
|
|
|
{
|
2013-03-01 01:50:50 +01:00
|
|
|
|
_logger.Trace("Uninstall Service selected");
|
2013-01-06 09:11:14 +01:00
|
|
|
|
if (!_serviceProvider.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME))
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-07-09 02:47:09 +02:00
|
|
|
|
_consoleService.PrintServiceDoesNotExist();
|
2011-10-14 03:22:51 +02:00
|
|
|
|
}
|
2013-01-06 09:11:14 +01:00
|
|
|
|
else
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-01-06 09:11:14 +01:00
|
|
|
|
_serviceProvider.UnInstall(ServiceProvider.NZBDRONE_SERVICE_NAME);
|
2011-10-14 03:22:51 +02:00
|
|
|
|
}
|
2013-01-06 09:11:14 +01:00
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
{
|
2013-04-16 06:52:41 +02:00
|
|
|
|
_consoleService.PrintHelp();
|
2013-01-06 09:11:14 +01:00
|
|
|
|
break;
|
|
|
|
|
}
|
2011-10-14 03:22:51 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-07-09 02:47:09 +02:00
|
|
|
|
private ApplicationModes GetApplicationMode()
|
2011-10-14 03:22:51 +02:00
|
|
|
|
{
|
2013-07-09 02:47:09 +02:00
|
|
|
|
if (_startupArguments.Flags.Contains(StartupArguments.HELP))
|
|
|
|
|
{
|
|
|
|
|
return ApplicationModes.Help;
|
|
|
|
|
}
|
2011-10-14 03:22:51 +02:00
|
|
|
|
|
2013-07-27 03:25:45 +02:00
|
|
|
|
if (!OsInfo.IsLinux && _startupArguments.Flags.Contains(StartupArguments.INSTALL_SERVICE))
|
2013-07-09 02:47:09 +02:00
|
|
|
|
{
|
|
|
|
|
return ApplicationModes.InstallService;
|
|
|
|
|
}
|
2011-10-14 03:22:51 +02:00
|
|
|
|
|
2013-07-27 03:25:45 +02:00
|
|
|
|
if (!OsInfo.IsLinux && _startupArguments.Flags.Contains(StartupArguments.UNINSTALL_SERVICE))
|
2013-07-09 02:47:09 +02:00
|
|
|
|
{
|
|
|
|
|
return ApplicationModes.UninstallService;
|
|
|
|
|
}
|
2011-10-14 03:22:51 +02:00
|
|
|
|
|
2013-07-09 02:47:09 +02:00
|
|
|
|
return ApplicationModes.Console;
|
2011-10-09 04:16:11 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|