-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
77 lines (70 loc) · 3.79 KB
/
Copy pathProgram.cs
File metadata and controls
77 lines (70 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using RenderNorth.DisplaySwitcher.Domain.Modules;
using RenderNorth.DisplaySwitcher.Modules.Display;
using RenderNorth.DisplaySwitcher.Services;
using RenderNorth.DisplaySwitcher.UI;
using Velopack;
namespace RenderNorth.DisplaySwitcher;
internal static class Program
{
[STAThread]
private static int Main(string[] args)
{
VelopackApp.Build()
.OnAfterInstallFastCallback(_ => InstalledIntegration.InstallOrRefresh())
.OnAfterUpdateFastCallback(_ => InstalledIntegration.InstallOrRefresh())
.OnBeforeUninstallFastCallback(_ => InstalledIntegration.RemoveShortcuts())
.Run();
AppPaths.Initialize();
var log = new AppLogger();
try
{
var repository = new EnvironmentRepository();
new LegacyMigrationService(repository, AppPaths.DataFolder, log).MigrateIfNeeded();
var registry = new EnvironmentModuleRegistry();
var displayService = new DisplayModuleService();
registry.Register(DisplayModule.Type, () => new DisplayModule(displayService));
var manager = new EnvironmentManager(repository, registry, log);
var shortcuts = ShortcutService.CreateDefault();
foreach (var environment in manager.Load().Environments)
{
try { shortcuts.Recreate(environment); }
catch (Exception exception) { log.Error($"Could not restore managed shortcuts for {environment.Name}.", exception); }
}
var command = new CommandLineService(manager, log).ExecuteAsync(args).GetAwaiter().GetResult();
if (!command.ShowGui) return command.ExitCode;
using var singleInstance = new Mutex(true, "RenderNorthDisplaySwitcher", out var ownsMutex);
if (!ownsMutex)
{
const string message = "RenderNorth Environments is already running.";
log.Error(message); MessageBox.Show(message, "RenderNorth Environments"); return 3;
}
ApplicationConfiguration.Initialize();
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += (_, e) => ShowFatal(log, e.Exception);
AppDomain.CurrentDomain.UnhandledException += (_, e) => ShowFatal(log, e.ExceptionObject as Exception ?? new Exception("Unknown fatal error"));
ModuleDocument CaptureDisplays()
{
var module = new DisplayModule(displayService); module.SetConfiguration(displayService.Capture()); return module.Save();
}
Application.Run(new MainForm(manager, new UpdateService(log), log, CaptureDisplays,
() => displayService.DescribeTargets(displayService.Capture()),
() => System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("ms-settings:display") { UseShellExecute = true }),
shortcuts));
return 0;
}
catch (Exception exception)
{
log.Error("Environment initialization or command execution failed", exception);
if (args.Length > 0) return CommandLineService.ActivationFailedExitCode;
MessageBox.Show($"RenderNorth Environments could not initialize.\n\n{exception.Message}\n\nSee: {log.LogFolder}",
"RenderNorth Environments", MessageBoxButtons.OK, MessageBoxIcon.Error);
return CommandLineService.ActivationFailedExitCode;
}
}
private static void ShowFatal(AppLogger log, Exception exception)
{
log.Error("Unhandled error", exception);
MessageBox.Show($"Unexpected failure. No display change was requested.\n\n{exception.Message}\n\nSee: {log.LogFolder}",
"RenderNorth Environments", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}