From f9f7d653e3b16fc54bf7e7e7463c949315b2648f Mon Sep 17 00:00:00 2001 From: rjindael Date: Mon, 31 Jul 2023 01:27:02 -0700 Subject: [PATCH] feat: code for installation --- Kiseki.Launcher.Windows/Launcher.cs | 9 ++++-- Kiseki.Launcher.Windows/MainWindow.cs | 15 ++++------ Kiseki.Launcher/Controller.cs | 40 ++++++++++++++++--------- Kiseki.Launcher/Interfaces/ILauncher.cs | 5 ++-- 4 files changed, 42 insertions(+), 27 deletions(-) diff --git a/Kiseki.Launcher.Windows/Launcher.cs b/Kiseki.Launcher.Windows/Launcher.cs index 1ca46ff..0cde7b4 100644 --- a/Kiseki.Launcher.Windows/Launcher.cs +++ b/Kiseki.Launcher.Windows/Launcher.cs @@ -12,7 +12,12 @@ namespace Kiseki.Launcher.Windows public readonly static string BaseUrl = "test.kiseki.lol"; // TODO: This should be set dynamically somehow public readonly static string Version = Assembly.GetExecutingAssembly().GetName().Version!.ToString()[..^2]; - public void Register() + public static void Install() + { + + } + + public static void Register() { using (RegistryKey applicationKey = Registry.CurrentUser.CreateSubKey($@"Software\{ProjectName}")) { @@ -38,7 +43,7 @@ namespace Kiseki.Launcher.Windows uninstallKey.SetValue("URLUpdateInfo", $"https://github.com/{ProjectRepository}/releases/latest"); } - public void Unregister() + public static void Unregister() { Registry.CurrentUser.DeleteSubKey($@"Software\{ProjectName}"); } diff --git a/Kiseki.Launcher.Windows/MainWindow.cs b/Kiseki.Launcher.Windows/MainWindow.cs index fd5b720..e4cfb0a 100644 --- a/Kiseki.Launcher.Windows/MainWindow.cs +++ b/Kiseki.Launcher.Windows/MainWindow.cs @@ -27,10 +27,12 @@ namespace Kiseki.Launcher.Windows }; Controller = new Controller(Launcher.BaseUrl, args); - Controller.OnPageHeadingChanged += Controller_PageHeadingChanged; - Controller.OnProgressBarChanged += Controller_ProgressBarChanged; - Controller.OnProgressBarStateChanged += Controller_ProgressBarStateChanged; - Controller.OnLaunched += Controller_Launched; + Controller.OnPageHeadingChange += Controller_PageHeadingChanged; + Controller.OnProgressBarChange += Controller_ProgressBarChanged; + Controller.OnProgressBarStateChange += Controller_ProgressBarStateChanged; + + Controller.OnInstall += (s, e) => Launcher.Install(); + Controller.OnLaunch += (s, e) => Environment.Exit(0); Page.Destroyed += (s, e) => { @@ -66,11 +68,6 @@ namespace Kiseki.Launcher.Windows }; } - private void Controller_Launched(object? sender, EventArgs e) - { - Environment.Exit(0); - } - private void ShowProgressDialog() { TaskDialogIcon logo = new(Resources.IconKiseki); diff --git a/Kiseki.Launcher/Controller.cs b/Kiseki.Launcher/Controller.cs index 0a18137..f1539bb 100644 --- a/Kiseki.Launcher/Controller.cs +++ b/Kiseki.Launcher/Controller.cs @@ -13,10 +13,11 @@ namespace Kiseki.Launcher private readonly string BaseURL; private readonly Dictionary Arguments = new(); - public event EventHandler? OnPageHeadingChanged; - public event EventHandler? OnProgressBarChanged; - public event EventHandler? OnProgressBarStateChanged; - public event EventHandler? OnLaunched; + public event EventHandler? OnPageHeadingChange; + public event EventHandler? OnProgressBarChange; + public event EventHandler? OnProgressBarStateChange; + public event EventHandler? OnInstall; + public event EventHandler? OnLaunch; public static readonly HttpClient HttpClient = new(); @@ -24,7 +25,12 @@ namespace Kiseki.Launcher { BaseURL = baseURL; - if (args.Length > 0) + if (args.Length == 0) + { + // We are launching for the first time. This means that we should trigger the launcher install process. + Install(); + } + else { // TODO: handle these more gracefully if (!Base64.IsBase64String(args[0])) @@ -61,7 +67,7 @@ namespace Kiseki.Launcher if (marquee) { PageHeadingChange("Downloading Kiseki..."); - ProgressBarStateChanged(ProgressBarState.Normal); + ProgressBarStateChange(ProgressBarState.Normal); marquee = false; } @@ -80,7 +86,7 @@ namespace Kiseki.Launcher } PageHeadingChange("Installing Kiseki..."); - ProgressBarStateChanged(ProgressBarState.Marquee); + ProgressBarStateChange(ProgressBarState.Marquee); await Task.Delay(2200); PageHeadingChange("Configuring Kiseki..."); @@ -89,7 +95,7 @@ namespace Kiseki.Launcher PageHeadingChange("Launching Kiseki..."); await Task.Delay(3000); - Launched(); + Launch(); } public async void Dispose() @@ -99,22 +105,28 @@ namespace Kiseki.Launcher protected virtual void PageHeadingChange(string Heading) { - OnPageHeadingChanged!.Invoke(this, Heading); + OnPageHeadingChange!.Invoke(this, Heading); } protected virtual void ProgressBarChange(int Value) { - OnProgressBarChanged!.Invoke(this, Value); + OnProgressBarChange!.Invoke(this, Value); } - protected virtual void ProgressBarStateChanged(ProgressBarState State) + protected virtual void ProgressBarStateChange(ProgressBarState State) { - OnProgressBarStateChanged!.Invoke(this, State); + OnProgressBarStateChange!.Invoke(this, State); } - protected virtual void Launched() + protected virtual void Install() { - OnLaunched!.Invoke(this, EventArgs.Empty); + OnInstall!.Invoke(this, EventArgs.Empty); + } + + + protected virtual void Launch() + { + OnLaunch!.Invoke(this, EventArgs.Empty); } } } \ No newline at end of file diff --git a/Kiseki.Launcher/Interfaces/ILauncher.cs b/Kiseki.Launcher/Interfaces/ILauncher.cs index a7a15b1..91cb9f6 100644 --- a/Kiseki.Launcher/Interfaces/ILauncher.cs +++ b/Kiseki.Launcher/Interfaces/ILauncher.cs @@ -2,7 +2,8 @@ namespace Kiseki.Launcher { public interface ILauncher { - void Register(); - void Unregister(); + static abstract void Install(); + static abstract void Register(); + static abstract void Unregister(); } } \ No newline at end of file