feat(FN-1076): integrate desktop IPC bridge and lifecycle modules
- 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
This commit is contained in:
53
packages/desktop/src/ipc.ts
Normal file
53
packages/desktop/src/ipc.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user