- Extract main-process IPC registration into src/ipc.ts for window controls, system info, tray status, updater checks, and native dialogs - Refactor main.ts startup into initializeApp/run and wire menu, tray, deep-link, updater, and window-state restore/quit cleanup - Rework preload bridge to expose typed window.fusionAPI subscriptions and replace preload.d.ts with shared src/types.d.ts global declarations - Add comprehensive tests for IPC handlers, preload contracts, and main-process integration behavior - Document IPC channels, preload API, and lifecycle sequencing in packages/desktop/README.md
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { app, type BrowserWindow, ipcMain, type Tray } from "electron";
|
|
import { setupAutoUpdater, showExportSettingsDialog, showImportSettingsDialog } from "./native.js";
|
|
import { type EngineStatus, updateTrayStatus } from "./tray.js";
|
|
|
|
export function registerIpcHandlers(mainWindow: BrowserWindow, tray: Tray): void {
|
|
ipcMain.handle("window:minimize", () => {
|
|
mainWindow.minimize();
|
|
});
|
|
|
|
ipcMain.handle("window:maximize", () => {
|
|
const isCurrentlyMaximized = mainWindow.isMaximized();
|
|
if (isCurrentlyMaximized) {
|
|
mainWindow.unmaximize();
|
|
return false;
|
|
}
|
|
|
|
mainWindow.maximize();
|
|
return true;
|
|
});
|
|
|
|
ipcMain.handle("window:close", () => {
|
|
mainWindow.close();
|
|
});
|
|
|
|
ipcMain.handle("window:isMaximized", () => mainWindow.isMaximized());
|
|
|
|
ipcMain.handle("app:getSystemInfo", () => ({
|
|
platform: process.platform,
|
|
arch: process.arch,
|
|
electronVersion: process.versions.electron,
|
|
nodeVersion: process.versions.node,
|
|
appVersion: app.getVersion(),
|
|
}));
|
|
|
|
ipcMain.handle("app:checkForUpdates", () => {
|
|
try {
|
|
setupAutoUpdater(mainWindow);
|
|
return { status: "checking" as const };
|
|
} catch (error) {
|
|
return {
|
|
status: "error" as const,
|
|
error: error instanceof Error ? error.message : String(error),
|
|
};
|
|
}
|
|
});
|
|
|
|
ipcMain.handle("tray:updateStatus", (_event, status: EngineStatus) => {
|
|
updateTrayStatus(tray, status);
|
|
});
|
|
|
|
ipcMain.handle("native:showExportDialog", () => showExportSettingsDialog(mainWindow));
|
|
ipcMain.handle("native:showImportDialog", () => showImportSettingsDialog(mainWindow));
|
|
}
|