diff --git a/extra/exe-builder/DownloadForm.cs b/extra/exe-builder/DownloadForm.cs index aed8bd29..28a57c52 100644 --- a/extra/exe-builder/DownloadForm.cs +++ b/extra/exe-builder/DownloadForm.cs @@ -27,11 +27,12 @@ namespace UptimeKuma { label.Text = "Reading latest version..."; // Read json from https://uptime.kuma.pet/version - var versionObj = JsonConvert.DeserializeObject(new WebClient().DownloadString("https://uptime.kuma.pet/version")); - + var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version"); + var versionObj = JsonConvert.DeserializeObject(versionJson); var nodeVersion = versionObj.nodejs; var uptimeKumaVersion = versionObj.latest; + var hasUpdateFile = File.Exists("update"); if (!Directory.Exists("node")) { downloadQueue.Enqueue(new DownloadItem { @@ -41,12 +42,30 @@ namespace UptimeKuma { }); } - if (!Directory.Exists("node")) { + if (!Directory.Exists("core") || hasUpdateFile) { + + // It is update, rename the core folder to core.old + if (Directory.Exists("core")) { + // Remove the old core.old folder + if (Directory.Exists("core.old")) { + Directory.Delete("core.old", true); + } + + Directory.Move("core", "core.old"); + } + downloadQueue.Enqueue(new DownloadItem { URL = $"https://github.com/louislam/uptime-kuma/archive/refs/tags/{uptimeKumaVersion}.zip", Filename = "core.zip", TargetFolder = "core" }); + + File.WriteAllText("version.json", versionJson); + + // Delete the update file + if (hasUpdateFile) { + File.Delete("update"); + } } DownloadNextFile(); @@ -75,9 +94,12 @@ namespace UptimeKuma { void npmSetup() { labelData.Text = ""; + var npm = "..\\node\\npm.cmd"; + var cmd = $"{npm} ci --production & {npm} run download-dist & exit"; + var startInfo = new ProcessStartInfo { FileName = "cmd.exe", - Arguments = "run setup", + Arguments = $"/k \"{cmd}\"", RedirectStandardOutput = false, RedirectStandardError = false, RedirectStandardInput = true, @@ -89,11 +111,11 @@ namespace UptimeKuma { var process = new Process(); process.StartInfo = startInfo; process.EnableRaisingEvents = true; - process.Exited += (object _, EventArgs e) => { + process.Exited += (_, e) => { progressBar.Value = 100; if (process.ExitCode == 0) { - Task.Delay(2000).ContinueWith((task) => { + Task.Delay(2000).ContinueWith(_ => { Application.Restart(); }); label.Text = "Done"; @@ -105,10 +127,7 @@ namespace UptimeKuma { process.Start(); label.Text = "Installing dependencies and download dist files"; progressBar.Value = 50; - - process.StandardInput.WriteLine("\"../node/npm\" ci --production"); - process.StandardInput.WriteLine("\"../node/npm\" run download-dist"); - process.StandardInput.WriteLine("exit"); + process.WaitForExit(); } void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs index 27e345b7..1385e830 100644 --- a/extra/exe-builder/Program.cs +++ b/extra/exe-builder/Program.cs @@ -4,11 +4,13 @@ using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; +using System.Net; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Win32; +using Newtonsoft.Json; using UptimeKuma.Properties; namespace UptimeKuma { @@ -56,7 +58,9 @@ namespace UptimeKuma { trayIcon.MouseDoubleClick += new MouseEventHandler(Open); trayIcon.Visible = true; - if (Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) { + var hasUpdateFile = File.Exists("update"); + + if (!hasUpdateFile && Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) { // Go go go StartProcess(); } else { @@ -110,6 +114,10 @@ namespace UptimeKuma { } } + void StopProcess() { + process?.Kill(); + } + void Open(object sender, EventArgs e) { Process.Start("http://localhost:3001"); } @@ -119,7 +127,35 @@ namespace UptimeKuma { } void CheckForUpdate(object sender, EventArgs e) { - Process.Start("https://github.com/louislam/uptime-kuma/releases"); + var needUpdate = false; + + // Check version.json exists + if (File.Exists("version.json")) { + // Load version.json and compare with the latest version from GitHub + var currentVersionObj = JsonConvert.DeserializeObject(File.ReadAllText("version.json")); + + var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version"); + var latestVersionObj = JsonConvert.DeserializeObject(versionJson); + + // Compare version, if the latest version is newer, then update + if (new System.Version(latestVersionObj.latest).CompareTo(new System.Version(currentVersionObj.latest)) > 0) { + var result = MessageBox.Show("A new version is available. Do you want to update?", "Update", MessageBoxButtons.YesNo); + if (result == DialogResult.Yes) { + // Create a empty file `update`, so the app will download the core files again at startup + File.Create("update").Close(); + + trayIcon.Visible = false; + process?.Kill(); + + // Restart the app, it will download the core files again at startup + Application.Restart(); + } + } else { + MessageBox.Show("You are using the latest version."); + } + } + + } void VisitGitHub(object sender, EventArgs e)