Files
koring-launcher/electron/handlers/update.ts
T
dream_pep 4d3e43394c feat(auto-update): 实现全流程自动更新功能与配套界面
- 新增主进程更新服务,支持GitHub官方源与加速源兜底的检查、下载、安装全流程
- 新增独立更新日志页面,支持查看更新说明与更新全流程管理
- 实现更新状态持久化,重启应用可恢复上次未完成的下载进度
- 完善版本管理与构建元数据脚本,优化CI发布流水线
- 补充VersionCard的构建信息展示与更新页跳转逻辑
- 新增更新相关IPC接口、类型定义与全局状态管理
- 清理旧的无用配置项,升级相关依赖包
2026-08-30 20:19:15 +08:00

92 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import electron from 'electron';
import { updateService } from '../updater';
const { ipcMain } = electron;
/**
* 更新 IPC handler。
* - 主进程更新服务初始化后,状态变化广播到所有窗口(update:status
* - 渲染进程通过 update:check / update:download / update:quitAndInstall / update:getState 交互
*/
export function registerUpdateHandlers() {
updateService.init((payload) => {
for (const win of electron.BrowserWindow.getAllWindows()) {
if (!win.isDestroyed()) {
win.webContents.send('update:status', payload);
}
}
});
ipcMain.handle('update:check', async (_event, payload?: { manual?: boolean }) => {
try {
const state = await updateService.check(payload?.manual === true);
return { success: true, data: state, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('update:download', async () => {
try {
await updateService.download();
return { success: true, data: null, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('update:pause', () => {
try {
updateService.pause();
return { success: true, data: null, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('update:resume', async () => {
try {
await updateService.download(); // paused → download() 即继续
return { success: true, data: null, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('update:cancel', () => {
try {
updateService.cancel();
return { success: true, data: null, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('update:quitAndInstall', () => {
try {
updateService.quitAndInstall();
return { success: true, data: null, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
ipcMain.handle('update:getState', () => {
try {
return { success: true, data: updateService.getState(), error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
// 读取发布说明(release-notes.md 附件,原始 MarkdownGitHub 优先 + 加速源兜底)
ipcMain.handle('update:getReleaseNotes', async (_event, payload?: { tag?: string }) => {
try {
const data = await updateService.getReleaseNotes(payload?.tag);
return { success: true, data, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
}