From f24d1321a806a8ede2655e67e6cd395089474c0a Mon Sep 17 00:00:00 2001 From: Frozd Date: Tue, 10 Mar 2026 16:17:04 +0100 Subject: [PATCH 1/2] feat(autoupdate): remove trailing zeros, show prerelease tag --- CarManagerV3/CarManagerV3.csproj | 4 +-- CarManagerV3/Forms/MainForm.cs | 6 ++-- CarManagerV3/Forms/UpdatePromptForm.cs | 6 +++- CarManagerV3/Manager/Updater.cs | 39 +++++++++++++++++++------- 4 files changed, 39 insertions(+), 16 deletions(-) diff --git a/CarManagerV3/CarManagerV3.csproj b/CarManagerV3/CarManagerV3.csproj index 4f45086..2f26333 100644 --- a/CarManagerV3/CarManagerV3.csproj +++ b/CarManagerV3/CarManagerV3.csproj @@ -15,7 +15,7 @@ false true 0 - 1.4.0 + 1.4.1 false false true @@ -25,7 +25,7 @@ CarMgm_Icon.ico Car Manager 3 Car Manager 3 - 1.4.0 + 1.4.1 diff --git a/CarManagerV3/Forms/MainForm.cs b/CarManagerV3/Forms/MainForm.cs index 45f23d5..5b097ad 100644 --- a/CarManagerV3/Forms/MainForm.cs +++ b/CarManagerV3/Forms/MainForm.cs @@ -65,7 +65,7 @@ namespace CarManagerV3 { if (Updater.IsUpdateAvailable(Properties.Settings.Default.AllowPrerelease)) { - UpdatePromptForm updatePrompt = new UpdatePromptForm(Updater.GetCurrentVersion(), Updater.GetLatestVersion()); + UpdatePromptForm updatePrompt = new UpdatePromptForm(Updater.GetCurrentVersion(true), Updater.GetLatestVersion(Properties.Settings.Default.AllowPrerelease)); updatePrompt.ShowDialog(); } } @@ -571,12 +571,12 @@ namespace CarManagerV3 { if (Updater.IsUpdateAvailable(Properties.Settings.Default.AllowPrerelease)) { - UpdatePromptForm updatePrompt = new UpdatePromptForm(Updater.GetCurrentVersion(), Updater.GetLatestVersion()); + UpdatePromptForm updatePrompt = new UpdatePromptForm(Updater.GetCurrentVersion(true), Updater.GetLatestVersion(Properties.Settings.Default.AllowPrerelease)); updatePrompt.ShowDialog(); } else { - MessageBox.Show($"You are already using the latest version. ({Updater.GetCurrentVersion()})", "No Updates Available", MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show($"You are already using the latest version. \nYour Version: {Updater.GetCurrentVersion(true)} \nLatest Version: {Updater.GetLatestVersion(Properties.Settings.Default.AllowPrerelease)}", "No Updates Available", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) diff --git a/CarManagerV3/Forms/UpdatePromptForm.cs b/CarManagerV3/Forms/UpdatePromptForm.cs index cf95a73..976c253 100644 --- a/CarManagerV3/Forms/UpdatePromptForm.cs +++ b/CarManagerV3/Forms/UpdatePromptForm.cs @@ -18,6 +18,10 @@ namespace CarManagerV3.Forms InitializeComponent(); lblInstalledVersion.Text = lblInstalledVersion.Text.Replace("?.?.?", currentVersion); lblLatestVersion.Text = lblLatestVersion.Text.Replace("?.?.?", latestVersion); + if (Updater.IsLatestVersionPrerelease()) + { + lblLatestVersion.Text += " (Pre-release)"; + } } @@ -58,7 +62,7 @@ namespace CarManagerV3.Forms private void btnReadChangelog_Click(object sender, EventArgs e) { - Updater.openReleasePage(); + Updater.OpenReleasePage(); } } } diff --git a/CarManagerV3/Manager/Updater.cs b/CarManagerV3/Manager/Updater.cs index 019744c..72133a9 100644 --- a/CarManagerV3/Manager/Updater.cs +++ b/CarManagerV3/Manager/Updater.cs @@ -22,18 +22,29 @@ namespace CarManagerV3.Manager private static readonly int CacheDurationMinutes = 60; private static bool cacheIncludesPrerelease = false; private static readonly string debugVersion = null;//"1.2.0"; + private static bool isLatestVersionPrerelease = false; - public static string GetCurrentVersion() + public static string GetCurrentVersion(bool cutTrailingZeros = false) { //DEBUG:: - if(debugVersion != null) + if (debugVersion != null) { return debugVersion; } var asm = Assembly.GetEntryAssembly()!; Version v = asm.GetName().Version ?? new Version(0, 0, 0, 0); - return v.ToString(); + string VersionString = v.ToString(); + if(cutTrailingZeros) + { + // Remove trailing .0 parts + while (VersionString.EndsWith(".0")) + { + VersionString = VersionString.Substring(0, VersionString.Length - 2); + } + return VersionString; + } + return VersionString; } private static bool IsCacheValid(bool includePreRelease = false) @@ -72,6 +83,7 @@ namespace CarManagerV3.Manager var content = response.Content.ReadAsStringAsync().Result; dynamic release = Newtonsoft.Json.JsonConvert.DeserializeObject(content); latestVersion = release.tag_name; + isLatestVersionPrerelease = false; } } // If pre-release is requested, check for the latest pre-release version @@ -91,6 +103,7 @@ namespace CarManagerV3.Manager if (IsNewerVersion(preReleaseVersion, latestVersion)) { latestVersion = preReleaseVersion; + isLatestVersionPrerelease = true; } } } @@ -137,11 +150,11 @@ namespace CarManagerV3.Manager break; } } - + if (downloadUrl != null) { - - + + // Download the installer to the users set Data dir, run it, and then exit the application. string tempFilePath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"CarManagerInstaller_{latestVersion}.msi"); using (var downloadClient = new System.Net.WebClient()) @@ -155,8 +168,8 @@ namespace CarManagerV3.Manager UseShellExecute = true }; System.Diagnostics.Process.Start(processStartInfo); - - + + Application.Exit(); } else @@ -180,9 +193,9 @@ namespace CarManagerV3.Manager return IsNewerVersion(latestVersion, currentVersion); } - public static void openReleasePage(string version = null) + public static void OpenReleasePage(string version = null) { - if(version == null) + if (version == null) { version = GetLatestVersion(true); } @@ -193,5 +206,11 @@ namespace CarManagerV3.Manager UseShellExecute = true }); } + + public static bool IsLatestVersionPrerelease() + { + // Ensure we have the latest version info in cache + return isLatestVersionPrerelease; + } } } -- 2.49.1 From 86e6be2bd33c3c37a82ddd64ea295d17813b8725 Mon Sep 17 00:00:00 2001 From: Frozd Date: Tue, 10 Mar 2026 16:38:18 +0100 Subject: [PATCH 2/2] fix: autoupdater failing to fetch prerelease versions --- CarManager3Setup/CarManager3Setup.vdproj | 6 +++--- CarManagerV3.sln | 1 + CarManagerV3/Forms/UpdatePromptForm.cs | 9 --------- CarManagerV3/Manager/Updater.cs | 12 +++++++++++- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/CarManager3Setup/CarManager3Setup.vdproj b/CarManager3Setup/CarManager3Setup.vdproj index 8e2ab6d..8e4d452 100644 --- a/CarManager3Setup/CarManager3Setup.vdproj +++ b/CarManager3Setup/CarManager3Setup.vdproj @@ -332,15 +332,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Car Manager 3" - "ProductCode" = "8:{8FDFF7ED-D464-4F87-BA8F-BDC1000520E4}" - "PackageCode" = "8:{83DA7553-805F-4A70-921B-9A6FB0787780}" + "ProductCode" = "8:{24769DBA-B806-4E47-9F4C-17BC8AD0528E}" + "PackageCode" = "8:{741BAAEC-3EE7-46C4-94AB-575C677186BB}" "UpgradeCode" = "8:{6FF57925-465E-4DB9-85DA-CE933191A3DD}" "AspNetVersion" = "8:2.0.50727.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" - "ProductVersion" = "8:1.4.0" + "ProductVersion" = "8:1.4.1" "Manufacturer" = "8:Jaro Digital" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" diff --git a/CarManagerV3.sln b/CarManagerV3.sln index aaa1e9f..0c872ef 100644 --- a/CarManagerV3.sln +++ b/CarManagerV3.sln @@ -19,6 +19,7 @@ Global {93CA258B-A645-41A8-A24F-59036ABC173F}.Release|Any CPU.Build.0 = Release|Any CPU {47ED51EB-1DD0-B8F0-88C8-92C6E3E06030}.Debug|Any CPU.ActiveCfg = Debug {47ED51EB-1DD0-B8F0-88C8-92C6E3E06030}.Release|Any CPU.ActiveCfg = Release + {47ED51EB-1DD0-B8F0-88C8-92C6E3E06030}.Release|Any CPU.Build.0 = Release EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/CarManagerV3/Forms/UpdatePromptForm.cs b/CarManagerV3/Forms/UpdatePromptForm.cs index 976c253..574b13c 100644 --- a/CarManagerV3/Forms/UpdatePromptForm.cs +++ b/CarManagerV3/Forms/UpdatePromptForm.cs @@ -32,15 +32,6 @@ namespace CarManagerV3.Forms private void btnInstallUpdate_Click(object sender, EventArgs e) { - /* - var msgbox = new PleaseWait(); - msgbox.Show(); - Application.DoEvents(); - StateManager.UpdateCar(car); - Image fooimg = ImageManager.GetImage(car); - msgbox.Close(); - this.Close(); - */ PleaseWait loadForm = new PleaseWait("Downloading the newest version..."); try { diff --git a/CarManagerV3/Manager/Updater.cs b/CarManagerV3/Manager/Updater.cs index 72133a9..336b376 100644 --- a/CarManagerV3/Manager/Updater.cs +++ b/CarManagerV3/Manager/Updater.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; +using System.Text.Encodings.Web; using System.Threading.Tasks; using System.Windows.Forms; @@ -91,14 +92,19 @@ namespace CarManagerV3.Manager { using (var client = new System.Net.Http.HttpClient()) { + UrlEncoder encoder = System.Text.Encodings.Web.UrlEncoder.Default; var response = client.GetAsync(PreReleaseEndpoint).Result; if (response.IsSuccessStatusCode) { + var content = response.Content.ReadAsStringAsync().Result; dynamic releases = Newtonsoft.Json.JsonConvert.DeserializeObject(content); + //System.Diagnostics.Debug.WriteLine("Fetched pre-release versions, count: " + releases.Count); if (releases.Count > 0) { - var preReleaseVersion = releases[0].tag_name; + var preReleaseVersion = releases[0].tag_name.ToString(); + //System.Diagnostics.Debug.WriteLine("Latest unstable version: " + preReleaseVersion); + // Compare versions and return the newer one if (IsNewerVersion(preReleaseVersion, latestVersion)) { @@ -107,6 +113,10 @@ namespace CarManagerV3.Manager } } } + else + { + System.Diagnostics.Debug.WriteLine("Failed to fetch pre-release versions, status code: " + response.StatusCode + " at: " + PreReleaseEndpoint); + } } } SetCache(latestVersion, includePreRelease); -- 2.49.1