60 lines
1.8 KiB
TypeScript
60 lines
1.8 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));
|
|
|
|
// Return the server port from environment variable (set by CLI)
|
|
ipcMain.handle("app:getServerPort", () => {
|
|
const port = process.env.FUSION_SERVER_PORT;
|
|
return port ? parseInt(port, 10) : undefined;
|
|
});
|
|
}
|