Files
koring-launcher/electron/handlers/update.ts
T

92 lines
2.8 KiB
TypeScript
Raw Normal View History

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) };
}
});
}