From e88403c7802159196500f275bb34aec792613ab1 Mon Sep 17 00:00:00 2001 From: Laurence Luo Date: Fri, 13 Sep 2024 22:58:37 +0800 Subject: [PATCH] Fix update checker --- KindleMate2/FrmAboutBox.cs | 49 +++++++++++++++++++++++++--------- KindleMate2/KindleMate2.csproj | 2 +- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/KindleMate2/FrmAboutBox.cs b/KindleMate2/FrmAboutBox.cs index 352d361..213fcf4 100644 --- a/KindleMate2/FrmAboutBox.cs +++ b/KindleMate2/FrmAboutBox.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System; +using System.ComponentModel; using System.Diagnostics; using System.Reflection; using DarkModeForms; @@ -78,15 +79,17 @@ private void FrmAboutBox_Load(object sender, EventArgs e) { bw.DoWork += (_, workEventArgs) => { workEventArgs.Result = GetRepoInfo(); }; bw.RunWorkerAsync(); bw.RunWorkerCompleted += (_, workerCompletedEventArgs) => { - if (workerCompletedEventArgs.Result != null) { - var release = (GitHubRelease)workerCompletedEventArgs.Result; - if (!string.IsNullOrWhiteSpace(assemblyVersion)) { - var tagName = string.IsNullOrWhiteSpace(release.tag_name) ? string.Empty : release.tag_name; - pictureBox1.Visible = !NormalizeVersion(assemblyVersion).StartsWith(NormalizeVersion(tagName)); - var toolTip = new ToolTip(); - toolTip.SetToolTip(pictureBox1, Strings.New_Version + tagName); - } + if (workerCompletedEventArgs.Result == null) { + return; } + var release = (GitHubRelease)workerCompletedEventArgs.Result; + if (string.IsNullOrWhiteSpace(assemblyVersion)) { + return; + } + var tagName = string.IsNullOrWhiteSpace(release.tag_name) ? string.Empty : release.tag_name; + var toolTip = new ToolTip(); + toolTip.SetToolTip(pictureBox1, Strings.New_Version + tagName); + pictureBox1.Visible = IsUpdate(assemblyVersion, tagName); }; } @@ -98,12 +101,32 @@ private static GitHubRelease GetRepoInfo() { return JsonConvert.DeserializeObject(response)?[0] ?? new GitHubRelease(); } - private static string NormalizeVersion(string version) { + private bool IsUpdate(string current, string tagname) { + DateTime normalizeVersion = NormalizeVersion(current); + DateTime normalizeTagName = NormalizeVersion(tagname); + if (normalizeVersion != DateTime.MinValue || normalizeTagName != DateTime.MinValue) { + return normalizeVersion < normalizeTagName; + } + var splitVersion = current.Split('.'); + var splitTagname = current.Split('.'); + for (var i = 0; i < 3; i++) { + if (!int.TryParse(splitVersion[i], out var intVersion) || !int.TryParse(splitTagname[i], out var intTagname)) { + continue; + } + if (intVersion < intTagname) { + return true; + } + } + return false; + } + + private static DateTime NormalizeVersion(string version) { + var date = DateTime.MinValue; var parts = version.Split('.'); - for (var i = 0; i < parts.Length; i++) { - parts[i] = int.Parse(parts[i]).ToString(); + if (int.TryParse(parts[0], out var year) && int.TryParse(parts[1], out var month) && int.TryParse(parts[2], out var day)) { + date = new DateTime(year, month, day); } - return string.Join(".", parts); + return date; } private void pictureBox1_Click(object sender, EventArgs e) { diff --git a/KindleMate2/KindleMate2.csproj b/KindleMate2/KindleMate2.csproj index 58220ad..0798853 100644 --- a/KindleMate2/KindleMate2.csproj +++ b/KindleMate2/KindleMate2.csproj @@ -23,7 +23,7 @@ latest https://github.com/lzcapp/KindleMate2/blob/main/LICENSE - 2024.9.14 + 2024.9.13 false