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 "模拟判断失败";
- }
- }
-
///
/// 数据自检和修复
///