/** * Dialog IPC Handlers * 处理系统对话框 */ import { ipcMain, IpcMainInvokeEvent, dialog } from 'electron' // IPC channel names export const DIALOG_CHANNELS = { SHOW_SAVE: 'dialog:showSaveDialog', SHOW_OPEN: 'dialog:showOpenDialog', } as const export interface DialogIPCOptions { mainWindowGetter: () => Electron.BrowserWindow | null } export function registerDialogIPCHandlers(options: DialogIPCOptions): void { const { mainWindowGetter } = options // Show save dialog ipcMain.handle(DIALOG_CHANNELS.SHOW_SAVE, async (_event: IpcMainInvokeEvent, options: Electron.SaveDialogOptions) => { const mainWindow = mainWindowGetter() if (!mainWindow) { return { canceled: true } } return dialog.showSaveDialog(mainWindow, options) }) // Show open dialog ipcMain.handle(DIALOG_CHANNELS.SHOW_OPEN, async (_event: IpcMainInvokeEvent, options: Electron.OpenDialogOptions) => { const mainWindow = mainWindowGetter() if (!mainWindow) { return { canceled: true } } return dialog.showOpenDialog(mainWindow, options) }) }