新增: 自动升级体系 + WorkerW重建检测 + 知识卡片优化

自动升级:
- 版本变量注入 (-ldflags -X main.version)
- 远程 version.json 检查 + 弹窗提示(非强制右下角/强制居中)
- updater.exe 嵌入主程序, 运行时释放到临时目录
- 下载+SHA256校验+备份+替换+回滚 全流程
- 托盘菜单"检查更新"

稳定性:
- WorkerW 重建自动检测(每10s)并重新嵌入
- 左键托盘点击防抖
- 设置窗口已打开时正确前置

优化:
- 知识卡片prompt改为面向开发者的硬核内容
- 配置目录统一到 ~/.u-desktop/
- 设置窗口WebView2数据目录改为configDir下
This commit is contained in:
2026-05-28 19:06:26 +08:00
parent aee7997195
commit f5a473c4b8
23 changed files with 859 additions and 90 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

126
web/update.html Normal file
View File

@@ -0,0 +1,126 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: "Microsoft YaHei", sans-serif;
background: transparent;
color: #e0e0e0;
overflow: hidden;
user-select: none;
}
.container {
background: rgba(30, 30, 46, 0.95);
backdrop-filter: blur(20px);
border-radius: 12px;
border: 1px solid rgba(255,255,255,0.08);
padding: 20px 24px;
min-height: 100vh;
display: flex;
flex-direction: column;
}
.version-tag {
color: #89b4fa;
font-size: 15px;
font-weight: 600;
margin-bottom: 12px;
}
.notes {
font-size: 13px;
color: #a0a0b8;
line-height: 1.8;
white-space: pre-line;
flex: 1;
margin-bottom: 16px;
}
.meta {
font-size: 12px;
color: #666;
margin-bottom: 14px;
}
.btn-row {
display: flex;
gap: 10px;
justify-content: flex-end;
}
.btn {
padding: 7px 20px;
border-radius: 8px;
border: none;
font-size: 13px;
cursor: pointer;
transition: all 0.2s;
font-family: inherit;
}
.btn-primary {
background: #89b4fa;
color: #1e1e2e;
font-weight: 600;
}
.btn-primary:hover { background: #74c7ec; }
.btn-secondary {
background: rgba(255,255,255,0.06);
color: #a0a0b8;
border: 1px solid rgba(255,255,255,0.1);
}
.btn-secondary:hover { background: rgba(255,255,255,0.1); }
.force-layout {
justify-content: center;
text-align: center;
}
.force-layout .version-tag { font-size: 18px; }
.force-layout .btn-row { justify-content: center; }
</style>
</head>
<body>
<div class="container" id="app">
<div class="version-tag" id="versionTag"></div>
<div class="notes" id="notes"></div>
<div class="meta" id="meta"></div>
<div class="btn-row" id="btnRow"></div>
</div>
<script>
const info = JSON.parse(window.getUpdateInfo());
const container = document.getElementById('app');
const versionTag = document.getElementById('versionTag');
const notes = document.getElementById('notes');
const meta = document.getElementById('meta');
const btnRow = document.getElementById('btnRow');
versionTag.textContent = '发现新版本 v' + info.version;
notes.textContent = info.releaseNotes || '';
function formatSize(bytes) {
if (!bytes) return '';
if (bytes >= 1048576) return (bytes / 1048576).toFixed(1) + 'MB';
if (bytes >= 1024) return (bytes / 1024).toFixed(1) + 'KB';
return bytes + 'B';
}
if (info.force) {
container.classList.add('force-layout');
if (info.size) {
const sec = info.size > 5242880 ? '~30秒' : '~10秒';
meta.textContent = '大小: ' + formatSize(info.size) + ' | 预计用时: ' + sec;
}
btnRow.innerHTML = '<button class="btn btn-primary" onclick="doUpdate()">立即升级</button>';
} else {
btnRow.innerHTML =
'<button class="btn btn-secondary" onclick="skip()">稍后</button>' +
'<button class="btn btn-primary" onclick="doUpdate()">立即升级</button>';
}
function doUpdate() {
window.startUpdate();
window.close();
}
function skip() {
window.skipUpdate();
window.close();
}
</script>
</body>
</html>