From aa2520f5cd435d6f98ada94753e3d39fe3c7ef45 Mon Sep 17 00:00:00 2001 From: ck_yeun9 Date: Fri, 2 May 2025 19:50:38 +0800 Subject: [PATCH 1/2] update application version. --- .../AppInterface/FrmLoading.cs | 135 +++++++++++------- .../AppInterface/FrmLogin.cs | 2 - .../EOM.TSHotelManagement.FormUI.csproj | 2 +- 3 files changed, 86 insertions(+), 53 deletions(-) diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs index 777c051..efc41f8 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs @@ -26,6 +26,7 @@ using EOM.TSHotelManagement.Common; using Newtonsoft.Json; using Sunny.UI; using System.Diagnostics; +using System.Text; namespace EOM.TSHotelManagement.FormUI { @@ -33,6 +34,7 @@ namespace EOM.TSHotelManagement.FormUI { private string CurrentVersion => ApplicationUtil.GetApplicationVersion().ToString(); private string GithubRepoUrl = "https://api.github.com/repos/easy-open-meta/TopskyHotelManagerSystem/releases/latest"; + private string GiteeRepoUrl = "https://gitee.com/api/v5/repos/java-and-net/TopskyHotelManagerSystem/releases/latest"; private string FileName { get; set; } private string CurrentExecutablePath => Application.ExecutablePath; private string CurrentExecutableName => Path.GetFileName(CurrentExecutablePath); @@ -54,68 +56,58 @@ namespace EOM.TSHotelManagement.FormUI private async void CheckForUpdate() { + using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) }; + client.DefaultRequestHeaders.Add("User-Agent", await GetDefaultUserAgentAsync()); try { - using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) }; - client.DefaultRequestHeaders.Add("User-Agent", await GetDefaultUserAgentAsync()); - var response = await client.GetAsync(GithubRepoUrl); - - if (response.IsSuccessStatusCode) + // Gitee 优先检查 + var giteeResponse = await client.GetAsync(GiteeRepoUrl); + if (giteeResponse.IsSuccessStatusCode) { - var result = await response.Content.ReadAsStringAsync(); - var release = JsonConvert.DeserializeObject(result); - - var latestVersion = release!.TagName.Replace("v", "", StringComparison.OrdinalIgnoreCase); - var currentVersion = CurrentVersion.Replace("v", "", StringComparison.OrdinalIgnoreCase); - - var versionCompareResult = string.Compare(latestVersion, currentVersion, StringComparison.OrdinalIgnoreCase); - - if (versionCompareResult > 0) - { - var updateAsset = release.Assets.FirstOrDefault(a => a.Name.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)); - if (updateAsset != null) - { - FileName = $"{updateAsset.Name}_{DateTime.Now.ToString("yyyyMMddHHmmsss")}"; - var isUpdated = await DownloadAndInstallUpdate(updateAsset.BrowserDownloadUrl, updateAsset.Name, new Progress(ReportProgress)); - if (isUpdated) - { - AntdUI.Modal.open(this, "系统提示", "旧版已停止使用,稍后将自动下载最新发行版!", TType.Warn); - ExitApplication(); - } - else - { - AntdUI.Modal.open(this, "系统提示", "更新失败,请手动下载最新版本。", TType.Warn); - } - } - else - { - AntdUI.Modal.open(this, "系统提示", "最新版本中未找到可更新的 .exe 文件。", TType.Warn); - } - } - else - { - AntdUI.Modal.open(this, "系统提示", "当前已为最新版本,无需更新!", TType.Success); - await Task.Run(() => threadPro()); - } + var giteeResult = await giteeResponse.Content.ReadAsStringAsync(); + var giteeRelease = JsonConvert.DeserializeObject(giteeResult); + HandleReleaseInfo(giteeRelease.TagName, giteeRelease.Assets, isGitee: true); + return; } - else + + // GitHub 回退检查 + var githubResponse = await client.GetAsync(GithubRepoUrl); + if (githubResponse.IsSuccessStatusCode) { - AntdUI.Modal.open(this, "系统提示", "无法获取最新版本信息,请检查网络连接。", TType.Info); - ExitApplication(); + var githubResult = await githubResponse.Content.ReadAsStringAsync(); + var githubRelease = JsonConvert.DeserializeObject(githubResult); + HandleReleaseInfo(githubRelease.TagName, githubRelease.Assets, isGitee: false); + return; } } - catch (OperationCanceledException) - { - AntdUI.Modal.open(this, "系统提示", "网络连接超时,无法检查更新。即将跳转到网盘版本库", TType.Info); - OpenFallbackUrl(); - ExitApplication(); - } catch (Exception ex) { AntdUI.Modal.open(this, "系统提示", $"检查更新时发生错误: {ex.Message}", TType.Info); OpenFallbackUrl(); - ExitApplication(); } + finally + { + progressBar.Visible = false; + } + } + + private void HandleReleaseInfo( + string tagName, + List assets, + bool isGitee) where TAsset : class + { + dynamic executableAsset = assets.FirstOrDefault(a => + ((dynamic)a).Name?.EndsWith(".exe") == true || + ((dynamic)a).FileName?.EndsWith(".exe") == true + ); + + if (executableAsset == null) return; + + string downloadUrl = isGitee ? + executableAsset.DownloadUrl : + executableAsset.BrowserDownloadUrl; + + DownloadAndInstallUpdate(downloadUrl, "TS酒店管理系统", new Progress(ReportProgress)); } private async Task GetDefaultUserAgentAsync() @@ -150,6 +142,10 @@ namespace EOM.TSHotelManagement.FormUI var buffer = new byte[8192]; int bytesRead; + AntdUI.Modal.open(this, "下载提示", + $"已通过浏览器发起下载,请查看浏览器的下载列表。\n文件名称: {fileName}", + TType.Info); + while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0) { await fileStream.WriteAsync(buffer, 0, bytesRead); @@ -260,5 +256,44 @@ namespace EOM.TSHotelManagement.FormUI [JsonProperty("browser_download_url")] public string BrowserDownloadUrl { get; set; } } + + public class GiteeRelease + { + [JsonProperty("tag_name")] + public string TagName { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("body")] + public string Body { get; set; } + + [JsonProperty("assets")] + public List Assets { get; set; } + + [JsonProperty("author")] + public GiteeAuthor Author { get; set; } + + [JsonProperty("created_at")] + public DateTime CreatedAt { get; set; } + } + + public class GiteeAsset + { + [JsonProperty("browser_download_url")] + public string DownloadUrl { get; set; } + + [JsonProperty("name")] + public string FileName { get; set; } + } + + public class GiteeAuthor + { + [JsonProperty("login")] + public string Login { get; set; } + + [JsonProperty("avatar_url")] + public string AvatarUrl { get; set; } + } } } diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs index dc30471..8c39b36 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs @@ -117,8 +117,6 @@ namespace EOM.TSHotelManagement.FormUI private void FrmLogin_Load(object sender, EventArgs e) { this.Owner.Hide(); - txtWorkerId.Text = "W428989222912"; - txtWorkerPwd.Text = "U.aX]Wj}U4Aw"; } #endregion diff --git a/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj b/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj index 012b4d9..623b0dd 100644 --- a/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj +++ b/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj @@ -11,7 +11,7 @@ true enable true - 2.8.1.0 + 2.8.5.0 EOM.TSHotelManagement.FormUI.Program x64 TS酒店管理系统 -- Gitee From aacd58eae0ed86309edb448e00d97b533e9bba41 Mon Sep 17 00:00:00 2001 From: ck_yeun9 Date: Fri, 2 May 2025 20:52:32 +0800 Subject: [PATCH 2/2] fix checkupdate error. --- .../AppInterface/FrmLoading.Designer.cs | 53 ++++++++++++++----- .../AppInterface/FrmLoading.cs | 48 +++++++++++------ 2 files changed, 73 insertions(+), 28 deletions(-) diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs index 7819869..08415f3 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs @@ -30,7 +30,9 @@ { lblTips = new Sunny.UI.UILabel(); uiTitlePanel1 = new Sunny.UI.UITitlePanel(); - lblSoftwareVersion = new Sunny.UI.UILabel(); + lbInternetSoftwareVersion = new Sunny.UI.UILabel(); + uiLabel4 = new Sunny.UI.UILabel(); + lblLocalSoftwareVersion = new Sunny.UI.UILabel(); uiLabel2 = new Sunny.UI.UILabel(); uiTitlePanel1.SuspendLayout(); SuspendLayout(); @@ -48,7 +50,9 @@ // // uiTitlePanel1 // - uiTitlePanel1.Controls.Add(lblSoftwareVersion); + uiTitlePanel1.Controls.Add(lbInternetSoftwareVersion); + uiTitlePanel1.Controls.Add(uiLabel4); + uiTitlePanel1.Controls.Add(lblLocalSoftwareVersion); uiTitlePanel1.Controls.Add(uiLabel2); uiTitlePanel1.Font = new Font("微软雅黑", 12F); uiTitlePanel1.ForeColor = Color.White; @@ -59,21 +63,42 @@ uiTitlePanel1.Padding = new Padding(0, 25, 0, 0); uiTitlePanel1.ShowCollapse = true; uiTitlePanel1.ShowText = false; - uiTitlePanel1.Size = new Size(247, 66); + uiTitlePanel1.Size = new Size(247, 86); uiTitlePanel1.TabIndex = 2; uiTitlePanel1.Text = "软件版本信息"; uiTitlePanel1.TextAlignment = ContentAlignment.MiddleCenter; uiTitlePanel1.TitleHeight = 25; // - // lblSoftwareVersion + // lbInternetSoftwareVersion // - lblSoftwareVersion.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); - lblSoftwareVersion.ForeColor = Color.FromArgb(48, 48, 48); - lblSoftwareVersion.Location = new Point(123, 33); - lblSoftwareVersion.Name = "lblSoftwareVersion"; - lblSoftwareVersion.Size = new Size(110, 23); - lblSoftwareVersion.TabIndex = 6; - lblSoftwareVersion.TextAlign = ContentAlignment.MiddleLeft; + lbInternetSoftwareVersion.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + lbInternetSoftwareVersion.ForeColor = Color.FromArgb(48, 48, 48); + lbInternetSoftwareVersion.Location = new Point(122, 57); + lbInternetSoftwareVersion.Name = "lbInternetSoftwareVersion"; + lbInternetSoftwareVersion.Size = new Size(110, 23); + lbInternetSoftwareVersion.TabIndex = 8; + lbInternetSoftwareVersion.TextAlign = ContentAlignment.MiddleLeft; + // + // uiLabel4 + // + uiLabel4.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + uiLabel4.ForeColor = Color.FromArgb(48, 48, 48); + uiLabel4.Location = new Point(14, 57); + uiLabel4.Name = "uiLabel4"; + uiLabel4.Size = new Size(110, 23); + uiLabel4.TabIndex = 7; + uiLabel4.Text = "联网程序版本号:"; + uiLabel4.TextAlign = ContentAlignment.MiddleCenter; + // + // lblLocalSoftwareVersion + // + lblLocalSoftwareVersion.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + lblLocalSoftwareVersion.ForeColor = Color.FromArgb(48, 48, 48); + lblLocalSoftwareVersion.Location = new Point(123, 33); + lblLocalSoftwareVersion.Name = "lblLocalSoftwareVersion"; + lblLocalSoftwareVersion.Size = new Size(110, 23); + lblLocalSoftwareVersion.TabIndex = 6; + lblLocalSoftwareVersion.TextAlign = ContentAlignment.MiddleLeft; // // uiLabel2 // @@ -90,7 +115,7 @@ // AllowShowTitle = false; AutoScaleMode = AutoScaleMode.None; - ClientSize = new Size(335, 180); + ClientSize = new Size(335, 186); Controls.Add(uiTitlePanel1); Controls.Add(lblTips); Name = "FrmLoading"; @@ -107,8 +132,10 @@ private Sunny.UI.UILabel lblTips; private Sunny.UI.UITitlePanel uiTitlePanel1; private Sunny.UI.UILabel lblDllVersion; - private Sunny.UI.UILabel lblSoftwareVersion; + private Sunny.UI.UILabel lblLocalSoftwareVersion; private Sunny.UI.UILabel uiLabel3; private Sunny.UI.UILabel uiLabel2; + private Sunny.UI.UILabel lbInternetSoftwareVersion; + private Sunny.UI.UILabel uiLabel4; } } \ No newline at end of file diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs index efc41f8..773dd91 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs @@ -60,7 +60,6 @@ namespace EOM.TSHotelManagement.FormUI client.DefaultRequestHeaders.Add("User-Agent", await GetDefaultUserAgentAsync()); try { - // Gitee 优先检查 var giteeResponse = await client.GetAsync(GiteeRepoUrl); if (giteeResponse.IsSuccessStatusCode) { @@ -70,7 +69,6 @@ namespace EOM.TSHotelManagement.FormUI return; } - // GitHub 回退检查 var githubResponse = await client.GetAsync(GithubRepoUrl); if (githubResponse.IsSuccessStatusCode) { @@ -87,7 +85,7 @@ namespace EOM.TSHotelManagement.FormUI } finally { - progressBar.Visible = false; + progressBar.Visible = true; } } @@ -96,18 +94,38 @@ namespace EOM.TSHotelManagement.FormUI List assets, bool isGitee) where TAsset : class { - dynamic executableAsset = assets.FirstOrDefault(a => - ((dynamic)a).Name?.EndsWith(".exe") == true || - ((dynamic)a).FileName?.EndsWith(".exe") == true - ); + var version = tagName.Replace("v", string.Empty); + lbInternetSoftwareVersion.Text = version; + lbInternetSoftwareVersion.Refresh(); + if (version.Equals(lblLocalSoftwareVersion.Text.Trim())) + { + AntdUI.Modal.open(this, "系统提示", "当前已是最新版本,无需更新!", TType.Info); + Task.Run(() => threadPro()); + return; + } + + string downloadUrl = string.Empty; + if (isGitee) + { + dynamic executableAsset = assets.SingleOrDefault(a => ((dynamic)a).FileName?.EndsWith(".exe") == true); - if (executableAsset == null) return; + if (executableAsset == null) return; - string downloadUrl = isGitee ? - executableAsset.DownloadUrl : - executableAsset.BrowserDownloadUrl; + downloadUrl = executableAsset.DownloadUrl; + } + else + { + dynamic executableAsset = assets.SingleOrDefault(a => ((dynamic)a).Name?.EndsWith(".exe") == true); - DownloadAndInstallUpdate(downloadUrl, "TS酒店管理系统", new Progress(ReportProgress)); + if (executableAsset == null) return; + + downloadUrl = executableAsset.BrowserDownloadUrl; + } + + + + DownloadAndInstallUpdate(downloadUrl, "TS酒店管理系统.exe", new Progress(ReportProgress)); + lblTips.Text = "安装包正在下载中,请稍等..."; } private async Task GetDefaultUserAgentAsync() @@ -143,7 +161,7 @@ namespace EOM.TSHotelManagement.FormUI int bytesRead; AntdUI.Modal.open(this, "下载提示", - $"已通过浏览器发起下载,请查看浏览器的下载列表。\n文件名称: {fileName}", + $"已开始下载,请稍等。\n文件名称: {fileName}", TType.Info); while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0) @@ -213,7 +231,7 @@ namespace EOM.TSHotelManagement.FormUI private void FrmLoading_Load(object sender, EventArgs e) { - lblSoftwareVersion.Text = ApplicationUtil.GetApplicationVersion().ToString(); + lblLocalSoftwareVersion.Text = ApplicationUtil.GetApplicationVersion().ToString(); CheckForUpdate(); } @@ -263,7 +281,7 @@ namespace EOM.TSHotelManagement.FormUI public string TagName { get; set; } [JsonProperty("name")] - public string Name { get; set; } + public string FileName { get; set; } [JsonProperty("body")] public string Body { get; set; } -- Gitee