improve:自动更新

This commit is contained in:
2026-05-01 19:11:59 +08:00
parent 8c37b91b5b
commit 8383002b5c
2 changed files with 53 additions and 13 deletions
+32 -2
View File
@@ -1050,8 +1050,19 @@ namespace Ink_Canvas.Helpers
}
// 依次尝试每个线路组
CancellationToken groupLoopToken;
lock (_activeDownloadLock)
{
groupLoopToken = _activeDownloadCts?.Token ?? CancellationToken.None;
}
foreach (var group in groups)
{
if (groupLoopToken.IsCancellationRequested)
{
LogHelper.WriteLogToFile("AutoUpdate | 用户已取消,停止尝试后续线路组");
break;
}
string url = string.Format(group.DownloadUrlFormat, version);
url = AppendX64SuffixBeforeZipExtension(url);
// 智教联盟需要先获取真实下载地址
@@ -1077,6 +1088,12 @@ namespace Ink_Canvas.Helpers
bool downloadSuccess = await DownloadFile(url, zipFilePath, progressCallback);
if (groupLoopToken.IsCancellationRequested)
{
LogHelper.WriteLogToFile("AutoUpdate | 用户已取消,停止尝试后续线路组");
break;
}
if (downloadSuccess)
{
SaveDownloadStatus(true);
@@ -1294,8 +1311,20 @@ namespace Ink_Canvas.Helpers
success = true;
LogHelper.WriteLogToFile($"AutoUpdate | 分块{block.Index}下载成功");
}
catch (Exception ex) when (ex is HttpRequestException || ex is IOException || ex is TaskCanceledException)
catch (Exception ex) when (ex is HttpRequestException || ex is IOException || ex is TaskCanceledException || ex is OperationCanceledException)
{
// 用户主动取消:不再重试
if (externalToken.IsCancellationRequested)
{
LogHelper.WriteLogToFile($"AutoUpdate | 分块{block.Index}下载已被用户取消", LogHelper.LogType.Warning);
if (File.Exists(tempPath))
{
try { File.Delete(tempPath); } catch { }
}
cts.Cancel();
return;
}
LogHelper.WriteLogToFile($"AutoUpdate | 分块{block.Index}下载失败,第{retry + 1}次: {ex.Message}", LogHelper.LogType.Warning);
progressCallback?.Invoke(0, $"分块{block.Index}下载失败,第{retry + 1}次: {ex.Message}");
@@ -1306,7 +1335,8 @@ namespace Ink_Canvas.Helpers
}
// 增加重试间隔,避免频繁重试
await Task.Delay(2000 * (retry + 1));
try { await Task.Delay(2000 * (retry + 1), externalToken); }
catch (OperationCanceledException) { cts.Cancel(); return; }
}
}
if (success)