From 58c399dcbe18a763f445423e2502bbc14d41fab1 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 26 Jul 2025 16:08:22 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E5=88=86=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Helpers/AutoUpdateHelper.cs | 50 +++++++++------ Ink Canvas/Helpers/DeviceIdentifier.cs | 85 ++------------------------ 2 files changed, 38 insertions(+), 97 deletions(-) diff --git a/Ink Canvas/Helpers/AutoUpdateHelper.cs b/Ink Canvas/Helpers/AutoUpdateHelper.cs index 578651c9..5ba45e18 100644 --- a/Ink Canvas/Helpers/AutoUpdateHelper.cs +++ b/Ink Canvas/Helpers/AutoUpdateHelper.cs @@ -432,7 +432,7 @@ namespace Ink_Canvas.Helpers // 主要的更新检测方法(优先检测延迟,失败时自动切换线路组) // 仅检测新版本时用GitHub API,实际下载时只用线路组 - public static async Task<(string remoteVersion, UpdateLineGroup lineGroup, string releaseNotes)> CheckForUpdates(UpdateChannel channel = UpdateChannel.Release, bool alwaysGetRemote = false) + public static async Task<(string remoteVersion, UpdateLineGroup lineGroup, string releaseNotes)> CheckForUpdates(UpdateChannel channel = UpdateChannel.Release, bool alwaysGetRemote = false, bool isVersionFix = false) { try { @@ -455,16 +455,23 @@ namespace Ink_Canvas.Helpers { LogHelper.WriteLogToFile($"AutoUpdate | 通过GitHub Releases API发现新版本: {apiVersion}"); - // 检查是否应该根据用户优先级推送更新 - DateTime releaseTime = apiReleaseTime ?? DateTime.Now; - bool shouldPush = DeviceIdentifier.ShouldPushUpdate(apiVersion, releaseTime); - if (!shouldPush) + // 检查是否应该根据用户优先级推送更新(版本修复功能不受限制) + if (!isVersionFix) { - var priority = DeviceIdentifier.GetUpdatePriority(); - var daysSinceRelease = (DateTime.Now - releaseTime).TotalDays; - LogHelper.WriteLogToFile($"AutoUpdate | 根据用户优先级({priority}),暂不推送更新 {apiVersion},发布时间: {releaseTime:yyyy-MM-dd HH:mm:ss},已过 {daysSinceRelease:F1} 天"); - var group = (await GetAvailableLineGroupsOrdered(channel)).FirstOrDefault(); - return (null, group, apiReleaseNotes); // 返回null表示不推送 + DateTime releaseTime = apiReleaseTime ?? DateTime.Now; + bool shouldPush = DeviceIdentifier.ShouldPushUpdate(apiVersion, releaseTime, true); // 明确标记为自动更新 + if (!shouldPush) + { + var priority = DeviceIdentifier.GetUpdatePriority(); + var daysSinceRelease = (DateTime.Now - releaseTime).TotalDays; + LogHelper.WriteLogToFile($"AutoUpdate | 根据用户优先级({priority}),暂不推送更新 {apiVersion},发布时间: {releaseTime:yyyy-MM-dd HH:mm:ss},已过 {daysSinceRelease:F1} 天"); + var group = (await GetAvailableLineGroupsOrdered(channel)).FirstOrDefault(); + return (null, group, apiReleaseNotes); // 返回null表示不推送 + } + } + else + { + LogHelper.WriteLogToFile($"AutoUpdate | 版本修复模式,跳过分级策略检查"); } LogHelper.WriteLogToFile($"AutoUpdate | 根据用户优先级,推送更新 {apiVersion}"); @@ -500,13 +507,20 @@ namespace Ink_Canvas.Helpers { LogHelper.WriteLogToFile($"AutoUpdate | 发现新版本或强制获取: {remoteVersion}"); - // 检查是否应该根据用户优先级推送更新 - bool shouldPush = DeviceIdentifier.ShouldPushUpdate(remoteVersion, DateTime.Now); - if (!shouldPush) + // 检查是否应该根据用户优先级推送更新(版本修复功能不受限制) + if (!isVersionFix) { - var priority = DeviceIdentifier.GetUpdatePriority(); - LogHelper.WriteLogToFile($"AutoUpdate | 根据用户优先级({priority}),暂不推送更新 {remoteVersion}"); - return (null, group, null); // 返回null表示不推送 + bool shouldPush = DeviceIdentifier.ShouldPushUpdate(remoteVersion, DateTime.Now, true); // 明确标记为自动更新 + if (!shouldPush) + { + var priority = DeviceIdentifier.GetUpdatePriority(); + LogHelper.WriteLogToFile($"AutoUpdate | 根据用户优先级({priority}),暂不推送更新 {remoteVersion}"); + return (null, group, null); // 返回null表示不推送 + } + } + else + { + LogHelper.WriteLogToFile($"AutoUpdate | 版本修复模式,跳过分级策略检查"); } LogHelper.WriteLogToFile($"AutoUpdate | 根据用户优先级,推送更新 {remoteVersion}"); @@ -1374,8 +1388,8 @@ namespace Ink_Canvas.Helpers { LogHelper.WriteLogToFile($"AutoUpdate | 开始修复版本,通道: {channel}"); - // 获取远程版本号(自动选择最快线路组,始终下载远程版本) - var (remoteVersion, group, _) = await CheckForUpdates(channel, true); + // 获取远程版本号(自动选择最快线路组,始终下载远程版本,版本修复模式) + var (remoteVersion, group, _) = await CheckForUpdates(channel, true, true); if (string.IsNullOrEmpty(remoteVersion) || group == null) { LogHelper.WriteLogToFile("AutoUpdate | 修复版本时获取远程版本失败", LogHelper.LogType.Error); diff --git a/Ink Canvas/Helpers/DeviceIdentifier.cs b/Ink Canvas/Helpers/DeviceIdentifier.cs index 93fe71b8..4f47f7e6 100644 --- a/Ink Canvas/Helpers/DeviceIdentifier.cs +++ b/Ink Canvas/Helpers/DeviceIdentifier.cs @@ -1744,11 +1744,11 @@ namespace Ink_Canvas.Helpers } /// - /// 根据优先级决定是否应该推送更新(仅适用于自动更新,不影响版本修复功能) + /// 根据优先级决定是否应该推送更新(仅适用于自动更新,版本修复功能不受影响) /// /// 更新版本号 /// 发布时间 - /// 是否为自动更新检查(默认true) + /// 是否为自动更新检查(默认true,false表示版本修复) /// 是否应该推送更新 public static bool ShouldPushUpdate(string updateVersion, DateTime releaseTime, bool isAutoUpdate = true) { @@ -1757,11 +1757,11 @@ namespace Ink_Canvas.Helpers // 判断更新类型(基于版本号) var updateType = DetermineUpdateType(updateVersion); - // 如果不是自动更新(即手动检查或版本修复),则应用不同的策略 + // 如果不是自动更新(即版本修复),则应用不同的策略 if (!isAutoUpdate) { - // 手动更新检查或版本修复:立即允许,不受分级策略影响 - LogHelper.WriteLogToFile($"DeviceIdentifier | 手动更新检查 - 版本: {updateVersion}, 类型: {updateType}, 结果: 允许"); + // 版本修复:立即允许,不受分级策略影响 + LogHelper.WriteLogToFile($"DeviceIdentifier | 版本修复 - 版本: {updateVersion}, 类型: {updateType}, 结果: 允许"); return true; } @@ -1842,7 +1842,7 @@ namespace Ink_Canvas.Helpers } /// - /// 综合时间和使用频率的自动更新推送判断逻辑(不影响手动更新和版本修复) + /// 综合时间和使用频率的自动更新推送判断逻辑(不影响版本修复) /// private static bool ShouldPushUpdateComprehensive(UpdatePriority priority, UsageFrequency frequency, double daysSinceRelease, double daysSinceLastUse, UsageStats stats, UpdateType updateType) @@ -1987,26 +1987,6 @@ namespace Ink_Canvas.Helpers } } - /// - /// 检查是否应该进行手动更新检查(不受分级策略影响) - /// - /// 更新版本号 - /// 是否应该允许手动更新 - public static bool ShouldAllowManualUpdate(string updateVersion) - { - try - { - // 手动更新检查不受使用频率分级策略影响,始终允许 - var updateType = DetermineUpdateType(updateVersion); - LogHelper.WriteLogToFile($"DeviceIdentifier | 手动更新检查 - 版本: {updateVersion}, 类型: {updateType}, 结果: 允许"); - return true; - } - catch (Exception ex) - { - LogHelper.WriteLogToFile($"DeviceIdentifier | 手动更新检查失败: {ex.Message}", LogHelper.LogType.Error); - return true; // 出错时默认允许 - } - } /// /// 获取设备信息摘要(用于调试) @@ -2058,59 +2038,6 @@ namespace Ink_Canvas.Helpers return descriptions.Count > 0 ? string.Join(", ", descriptions) : "普通用户"; } - /// - /// 模拟更新推送判断(用于测试) - /// - /// 更新版本号 - /// 发布时间 - /// 是否为自动更新(默认true) - /// 推送判断详情 - public static string SimulateUpdatePushDecision(string updateVersion, DateTime releaseTime, bool isAutoUpdate = true) - { - try - { - var updateType = DetermineUpdateType(updateVersion); - var shouldPush = ShouldPushUpdate(updateVersion, releaseTime, isAutoUpdate); - - var result = $"更新推送判断详情:\n" + - $"版本号: {updateVersion}\n" + - $"更新类型: {updateType}\n" + - $"发布时间: {releaseTime:yyyy-MM-dd HH:mm}\n" + - $"更新方式: {(isAutoUpdate ? "自动更新" : "手动更新/版本修复")}\n"; - - if (isAutoUpdate) - { - // 只有自动更新才显示分级策略相关信息 - var priority = GetUpdatePriority(); - var frequency = GetUsageFrequency(); - var stats = LoadUsageStats(); - var daysSinceRelease = (DateTime.Now - releaseTime).TotalDays; - var daysSinceLastUse = (DateTime.Now - stats.LastLaunchTime).TotalDays; - var urgencyMultiplier = GetUpdateUrgencyMultiplier(updateType); - - result += $"发布天数: {daysSinceRelease:F1}天\n" + - $"最后使用: {daysSinceLastUse:F1}天前\n" + - $"使用频率: {frequency}\n" + - $"更新优先级: {priority}\n" + - $"紧急程度倍数: {urgencyMultiplier:F1}x\n" + - $"用户类型: {GetUserTypeDescription(stats)}\n"; - } - else - { - result += "分级策略: 不适用(手动更新/版本修复始终允许)\n"; - } - - result += $"推送决定: {(shouldPush ? "是" : "否")}"; - - return result; - } - catch (Exception ex) - { - LogHelper.WriteLogToFile($"DeviceIdentifier | 模拟更新推送判断失败: {ex.Message}", LogHelper.LogType.Error); - return "模拟判断失败"; - } - } - /// /// 数据自检和修复 ///