2017-10-16 00:41:48 +00:00
using System ;
2014-10-13 17:51:17 +00:00
using System.Net.Sockets ;
2013-08-30 22:55:01 +00:00
using NLog ;
2013-08-13 05:08:37 +00:00
using NzbDrone.Common.EnvironmentInfo ;
2017-07-28 21:40:12 +00:00
using NzbDrone.Common.Exceptions ;
2013-08-31 01:42:30 +00:00
using NzbDrone.Common.Instrumentation ;
2013-08-16 02:20:54 +00:00
using NzbDrone.Host ;
2017-10-16 00:41:48 +00:00
using NzbDrone.Host.AccessControl ;
2013-03-01 00:50:50 +00:00
namespace NzbDrone.Console
{
2013-08-07 05:32:22 +00:00
public static class ConsoleApp
2013-03-01 00:50:50 +00:00
{
2014-12-17 07:12:26 +00:00
private static readonly Logger Logger = NzbDroneLogger . GetLogger ( typeof ( ConsoleApp ) ) ;
2013-08-31 01:42:30 +00:00
2017-07-28 21:40:12 +00:00
private enum ExitCodes : int
{
Normal = 0 ,
UnknownFailure = 1 ,
RecoverableFailure = 2 ,
NonRecoverableFailure = 3
}
2013-03-01 00:50:50 +00:00
public static void Main ( string [ ] args )
{
try
{
2013-11-26 06:53:36 +00:00
var startupArgs = new StartupContext ( args ) ;
2018-02-27 20:35:32 +00:00
try
{
NzbDroneLogger . Register ( startupArgs , false , true ) ;
}
catch ( Exception ex )
{
System . Console . WriteLine ( "NLog Exception: " + ex . ToString ( ) ) ;
throw ;
}
2013-11-26 06:53:36 +00:00
Bootstrap . Start ( startupArgs , new ConsoleAlerts ( ) ) ;
2013-03-01 00:50:50 +00:00
}
2017-07-28 21:40:12 +00:00
catch ( SonarrStartupException ex )
2014-10-13 17:51:17 +00:00
{
System . Console . WriteLine ( "" ) ;
System . Console . WriteLine ( "" ) ;
2017-07-28 21:40:12 +00:00
Logger . Fatal ( ex , "EPIC FAIL!" ) ;
Exit ( ExitCodes . NonRecoverableFailure ) ;
2014-10-13 17:51:17 +00:00
}
2017-07-28 21:40:12 +00:00
catch ( SocketException ex )
2013-03-01 00:50:50 +00:00
{
2013-11-26 05:36:06 +00:00
System . Console . WriteLine ( "" ) ;
System . Console . WriteLine ( "" ) ;
2017-07-28 21:40:12 +00:00
Logger . Fatal ( ex . Message + ". This can happen if another instance of Sonarr is already running another application is using the same port (default: 8989) or the user has insufficient permissions" ) ;
Exit ( ExitCodes . RecoverableFailure ) ;
}
2017-10-16 00:41:48 +00:00
catch ( RemoteAccessException ex )
{
System . Console . WriteLine ( "" ) ;
System . Console . WriteLine ( "" ) ;
Logger . Fatal ( ex , "EPIC FAIL!" ) ;
Exit ( ExitCodes . Normal ) ;
}
2017-07-28 21:40:12 +00:00
catch ( Exception ex )
{
System . Console . WriteLine ( "" ) ;
System . Console . WriteLine ( "" ) ;
Logger . Fatal ( ex , "EPIC FAIL!" ) ;
Exit ( ExitCodes . UnknownFailure ) ;
2013-03-01 00:50:50 +00:00
}
2017-10-16 00:41:48 +00:00
2014-10-03 05:24:32 +00:00
Logger . Info ( "Exiting main." ) ;
2014-10-03 17:39:06 +00:00
2017-07-28 21:40:12 +00:00
Exit ( ExitCodes . Normal ) ;
}
private static void Exit ( ExitCodes exitCode )
{
2017-10-18 21:15:39 +00:00
LogManager . Shutdown ( ) ;
2017-07-28 21:40:12 +00:00
if ( exitCode ! = ExitCodes . Normal )
{
System . Console . WriteLine ( "Press enter to exit..." ) ;
System . Threading . Thread . Sleep ( 1000 ) ;
if ( exitCode = = ExitCodes . NonRecoverableFailure )
{
System . Console . WriteLine ( "Non-recoverable failure, waiting for user intervention..." ) ;
for ( int i = 0 ; i < 3600 ; i + + )
{
System . Threading . Thread . Sleep ( 1000 ) ;
if ( System . Console . KeyAvailable ) break ;
}
}
// Please note that ReadLine silently succeeds if there is no console, KeyAvailable does not.
System . Console . ReadLine ( ) ;
}
Environment . Exit ( ( int ) exitCode ) ;
2013-03-01 00:50:50 +00:00
}
}
2013-08-31 01:42:30 +00:00
}