mirror of
https://github.com/dream-pep/koring-launcher.git
synced 2026-09-12 05:45:18 +08:00
- 新增主进程更新服务,支持GitHub官方源与加速源兜底的检查、下载、安装全流程 - 新增独立更新日志页面,支持查看更新说明与更新全流程管理 - 实现更新状态持久化,重启应用可恢复上次未完成的下载进度 - 完善版本管理与构建元数据脚本,优化CI发布流水线 - 补充VersionCard的构建信息展示与更新页跳转逻辑 - 新增更新相关IPC接口、类型定义与全局状态管理 - 清理旧的无用配置项,升级相关依赖包
92 lines
2.8 KiB
TypeScript
92 lines
2.8 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) };
|
||
}
|
||
});
|
||
}
|