mirror of
https://github.com/dream-pep/koring-launcher.git
synced 2026-09-12 05:45:18 +08:00
本次提交完成以下变更: 1. 实现完整的更新通道管理功能,支持慢走/跑步两种更新模式,可在设置页切换且配置持久化生效 2. 新增更新调试页面,集成检查更新、版本比对、设置测试版本等调试工具 3. 新增快速打开Chromium DevTools的按钮,方便开发调试 4. 完善自动更新后端逻辑,新增版本比对、测试版本覆盖、通道动态获取等IPC接口 5. 调整GitHub Release构建脚本,修复prerelease版本的命名与发布问题 6. 添加semver依赖与类型定义,完善全量类型声明 7. 更新自动更新文档,补充更新通道相关的设计说明 8. 微调默认配置,添加主题暗黑模式的初始配置
131 lines
4.3 KiB
TypeScript
131 lines
4.3 KiB
TypeScript
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 附件,原始 Markdown;GitHub 优先 + 加速源兜底)
|
||
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) };
|
||
}
|
||
});
|
||
|
||
// 更新通道定义列表(woker/runner…,UI 动态渲染)
|
||
ipcMain.handle('update:getChannels', () => {
|
||
try {
|
||
return { success: true, data: updateService.getChannels(), error: null };
|
||
} catch (e: unknown) {
|
||
return { success: false, data: null, error: String(e) };
|
||
}
|
||
});
|
||
|
||
// 切换更新通道(持久化并立即生效)
|
||
ipcMain.handle('update:setChannel', (_event, payload?: { channel?: string }) => {
|
||
try {
|
||
const state = updateService.setChannel(payload?.channel ?? '');
|
||
return { success: true, data: state, error: null };
|
||
} catch (e: unknown) {
|
||
return { success: false, data: null, error: String(e) };
|
||
}
|
||
});
|
||
|
||
// 开发者工具:设置测试版本号(覆盖当前识别版本)
|
||
ipcMain.handle('update:setTestVersion', (_event, payload?: { version?: string }) => {
|
||
try {
|
||
const state = updateService.setTestVersion(payload?.version ?? '');
|
||
return { success: true, data: state, error: null };
|
||
} catch (e: unknown) {
|
||
return { success: false, data: null, error: String(e) };
|
||
}
|
||
});
|
||
|
||
// 开发者工具:版本比对(semver)
|
||
ipcMain.handle('update:compareVersions', (_event, payload?: { a?: string; b?: string }) => {
|
||
try {
|
||
const data = updateService.compareVersions(payload?.a ?? '', payload?.b ?? '');
|
||
return { success: true, data, error: null };
|
||
} catch (e: unknown) {
|
||
return { success: false, data: null, error: String(e) };
|
||
}
|
||
});
|
||
}
|