cleaned up app startup logic.

fixed update app issue.
pull/4/head
kay.one 11 years ago
parent b1e5646d7d
commit a4a58c59f1

@ -17,6 +17,14 @@ namespace NzbDrone.Common.EnvironmentInfo
public const string UNINSTALL_SERVICE = "u"; public const string UNINSTALL_SERVICE = "u";
public const string HELP = "?"; public const string HELP = "?";
static StartupArguments()
{
if (RuntimeInfo.IsProduction)
{
Instance = new StartupArguments("");
}
}
public StartupArguments(params string[] args) public StartupArguments(params string[] args)
{ {
Flags = new HashSet<string>(); Flags = new HashSet<string>();

@ -0,0 +1,15 @@
using NzbDrone.Host;
namespace NzbDrone.Console
{
public class ConsoleAlerts : IUserAlert
{
public void Alert(string message)
{
System.Console.WriteLine();
System.Console.WriteLine(message);
System.Console.WriteLine("Press enter to continue");
System.Console.ReadLine();
}
}
}

@ -1,5 +1,6 @@
using System; using System;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Host;
namespace NzbDrone.Console namespace NzbDrone.Console
{ {
@ -9,13 +10,15 @@ namespace NzbDrone.Console
{ {
try try
{ {
Host.Bootstrap.Start(new StartupArguments(args)); Bootstrap.Start(new StartupArguments(args), new ConsoleAlerts());
}
catch (TerminateApplicationException)
{
} }
catch (Exception e) catch (Exception e)
{ {
System.Console.WriteLine(e.ToString()); System.Console.WriteLine(e.ToString());
} }
System.Console.WriteLine("Press enter to exit..."); System.Console.WriteLine("Press enter to exit...");
System.Console.ReadLine(); System.Console.ReadLine();
} }

@ -83,6 +83,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="NLog, Version=2.0.1.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NLog.2.0.1.2\lib\net40\NLog.dll</HintPath>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL"> <Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath> <HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
@ -94,6 +98,7 @@
<Compile Include="..\NzbDrone.Common\Properties\SharedAssemblyInfo.cs"> <Compile Include="..\NzbDrone.Common\Properties\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link> <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="ConsoleAlerts.cs" />
<Compile Include="ConsoleApp.cs" /> <Compile Include="ConsoleApp.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>

@ -5,5 +5,6 @@
<package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net40" /> <package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net40" />
<package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net40" /> <package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net40" />
<package id="Newtonsoft.Json" version="5.0.6" targetFramework="net40" /> <package id="Newtonsoft.Json" version="5.0.6" targetFramework="net40" />
<package id="NLog" version="2.0.1.2" targetFramework="net40" />
<package id="Owin" version="1.0" targetFramework="net40" /> <package id="Owin" version="1.0" targetFramework="net40" />
</packages> </packages>

@ -1,6 +1,4 @@
using System; using System.Reflection;
using System.Diagnostics;
using System.Reflection;
using NLog; using NLog;
using NzbDrone.Common.Composition; using NzbDrone.Common.Composition;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
@ -12,54 +10,27 @@ namespace NzbDrone.Host
{ {
public static class Bootstrap public static class Bootstrap
{ {
public static IContainer Start(StartupArguments args) public static IContainer Start(StartupArguments args, IUserAlert userAlert)
{ {
var logger = LogManager.GetLogger("AppMain"); var logger = LogManager.GetLogger("AppMain");
try GlobalExceptionHandlers.Register();
{ IgnoreCertErrorPolicy.Register();
GlobalExceptionHandlers.Register();
IgnoreCertErrorPolicy.Register();
logger.Info("Starting NzbDrone Console. Version {0}", Assembly.GetExecutingAssembly().GetName().Version);
//Check if full version .NET is installed.
try
{
Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
}
catch (Exception)
{
logger.Error("It looks like you don't have full version of .NET Framework installed. Press any key and you will be directed to the download page.");
Console.Read();
try logger.Info("Starting NzbDrone Console. Version {0}", Assembly.GetExecutingAssembly().GetName().Version);
{
Process.Start("http://www.microsoft.com/download/en/details.aspx?id=17851");
}
catch (Exception e)
{
logger.Warn("Oops. can't start default browser. Please visit http://www.microsoft.com/download/en/details.aspx?id=17851 to download .NET Framework 4.");
Console.ReadLine();
}
return null;
}
var container = MainAppContainerBuilder.BuildContainer(args); if (!PlatformValidation.IsValidate(userAlert))
{
DbFactory.RegisterDatabase(container); throw new TerminateApplicationException();
container.Resolve<Router>().Route(); }
var container = MainAppContainerBuilder.BuildContainer(args);
DbFactory.RegisterDatabase(container);
container.Resolve<Router>().Route();
return container; return container;
}
catch (Exception e)
{
logger.FatalException("Epic Fail " + e.Message, e);
throw;
}
} }
} }
} }

@ -0,0 +1,7 @@
namespace NzbDrone.Host
{
public interface IUserAlert
{
void Alert(string message);
}
}

@ -121,6 +121,8 @@
</Compile> </Compile>
<Compile Include="AccessControl\FirewallAdapter.cs" /> <Compile Include="AccessControl\FirewallAdapter.cs" />
<Compile Include="AccessControl\UrlAclAdapter.cs" /> <Compile Include="AccessControl\UrlAclAdapter.cs" />
<Compile Include="IUserAlert.cs" />
<Compile Include="PlatformValidation.cs" />
<Compile Include="MainAppContainerBuilder.cs" /> <Compile Include="MainAppContainerBuilder.cs" />
<Compile Include="ApplicationModes.cs" /> <Compile Include="ApplicationModes.cs" />
<Compile Include="Bootstrap.cs" /> <Compile Include="Bootstrap.cs" />
@ -132,6 +134,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="PriorityMonitor.cs" /> <Compile Include="PriorityMonitor.cs" />
<Compile Include="Router.cs" /> <Compile Include="Router.cs" />
<Compile Include="TerminateApplicationException.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="app.config" /> <None Include="app.config" />

@ -0,0 +1,55 @@
using System;
using System.Diagnostics;
using System.Reflection;
using NLog;
using NzbDrone.Common.EnvironmentInfo;
namespace NzbDrone.Host
{
public static class PlatformValidation
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public static bool IsValidate(IUserAlert userAlert)
{
if (OsInfo.IsMono)
{
return true;
}
if (!IsAssemblyAvailable("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"))
{
userAlert.Alert("It looks like you don't have full version of .NET Framework installed. You will now be directed the download page.");
try
{
Process.Start("http://www.microsoft.com/en-ca/download/details.aspx?id=30653");
}
catch (Exception e)
{
userAlert.Alert("Oops. can't start default browser. Please visit http://www.microsoft.com/en-ca/download/details.aspx?id=30653 to download .NET Framework 4.5.");
}
return false;
}
return true;
}
private static bool IsAssemblyAvailable(string assemblyString)
{
try
{
Assembly.Load(assemblyString);
return true;
}
catch (Exception e)
{
Logger.Warn("Couldn't load {0}", e.Message);
return false;
}
}
}
}

@ -0,0 +1,8 @@
using System;
namespace NzbDrone.Host
{
public class TerminateApplicationException : ApplicationException
{
}
}

@ -9,7 +9,7 @@ using NzbDrone.Update.UpdateEngine;
namespace NzbDrone.Update.Test namespace NzbDrone.Update.Test
{ {
[TestFixture] [TestFixture]
public class ProgramFixture : TestBase<Program> public class ProgramFixture : TestBase<UpdateApp>
{ {

@ -52,7 +52,7 @@
<Link>Properties\SharedAssemblyInfo.cs</Link> <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="AppType.cs" /> <Compile Include="AppType.cs" />
<Compile Include="Program.cs" /> <Compile Include="UpdateApp.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UpdateContainerBuilder.cs" /> <Compile Include="UpdateContainerBuilder.cs" />
<Compile Include="UpdateEngine\BackupAndRestore.cs" /> <Compile Include="UpdateEngine\BackupAndRestore.cs" />

@ -10,7 +10,7 @@ using NzbDrone.Update.UpdateEngine;
namespace NzbDrone.Update namespace NzbDrone.Update
{ {
public class Program public class UpdateApp
{ {
private readonly IInstallUpdateService _installUpdateService; private readonly IInstallUpdateService _installUpdateService;
private readonly IProcessProvider _processProvider; private readonly IProcessProvider _processProvider;
@ -18,7 +18,7 @@ namespace NzbDrone.Update
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public Program(IInstallUpdateService installUpdateService, IProcessProvider processProvider) public UpdateApp(IInstallUpdateService installUpdateService, IProcessProvider processProvider)
{ {
_installUpdateService = installUpdateService; _installUpdateService = installUpdateService;
_processProvider = processProvider; _processProvider = processProvider;
@ -38,7 +38,7 @@ namespace NzbDrone.Update
_container = UpdateContainerBuilder.Build(); _container = UpdateContainerBuilder.Build();
logger.Info("Updating NzbDrone to version {0}", BuildInfo.Version); logger.Info("Updating NzbDrone to version {0}", BuildInfo.Version);
_container.Resolve<Program>().Start(args); _container.Resolve<UpdateApp>().Start(args);
} }
catch (Exception e) catch (Exception e)
{ {

@ -0,0 +1,13 @@
using System.Windows.Forms;
using NzbDrone.Host;
namespace NzbDrone
{
public class MessageBoxUserAlert : IUserAlert
{
public void Alert(string message)
{
MessageBox.Show(text: message, buttons: MessageBoxButtons.OK, icon: MessageBoxIcon.Warning, caption: "NzbDrone");
}
}
}

@ -96,6 +96,7 @@
<Compile Include="..\NzbDrone.Common\Properties\SharedAssemblyInfo.cs"> <Compile Include="..\NzbDrone.Common\Properties\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link> <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="MessageBoxUserAlert.cs" />
<Compile Include="Properties\Resources.Designer.cs"> <Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>

@ -1,6 +1,7 @@
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Host;
using NzbDrone.SysTray; using NzbDrone.SysTray;
namespace NzbDrone namespace NzbDrone
@ -11,10 +12,13 @@ namespace NzbDrone
{ {
try try
{ {
var container = Host.Bootstrap.Start(new StartupArguments(args)); var container = Bootstrap.Start(new StartupArguments(args), new MessageBoxUserAlert());
container.Register<ISystemTrayApp, SystemTrayApp>(); container.Register<ISystemTrayApp, SystemTrayApp>();
container.Resolve<ISystemTrayApp>().Start(); container.Resolve<ISystemTrayApp>().Start();
} }
catch (TerminateApplicationException)
{
}
catch (Exception e) catch (Exception e)
{ {
var message = string.Format("{0}: {1}", e.GetType().Name, e.Message); var message = string.Format("{0}: {1}", e.GetType().Name, e.Message);

Loading…
Cancel
Save