import type { OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue, } from 'electron'; import { ipcRenderer } from 'electron'; import { BackendResponse } from 'utils/ipc/types'; import { IPC_ACTIONS, IPC_CHANNELS, IPC_MESSAGES } from 'utils/messages'; import type { ConfigFilesWithModified, LanguageMap, SelectFileOptions, SelectFileReturn, TemplateFile, } from 'utils/types'; type IPCRendererListener = Parameters[1]; const ipc = { desktop: true, reloadWindow() { return ipcRenderer.send(IPC_MESSAGES.RELOAD_MAIN_WINDOW); }, async getLanguageMap(code: string) { return (await ipcRenderer.invoke(IPC_ACTIONS.GET_LANGUAGE_MAP, code)) as { languageMap: LanguageMap; success: boolean; message: string; }; }, async getTemplates(): Promise { return (await ipcRenderer.invoke( IPC_ACTIONS.GET_TEMPLATES )) as TemplateFile[]; }, async selectFile(options: SelectFileOptions): Promise { return (await ipcRenderer.invoke( IPC_ACTIONS.SELECT_FILE, options )) as SelectFileReturn; }, async getSaveFilePath(options: SaveDialogOptions) { return (await ipcRenderer.invoke( IPC_ACTIONS.GET_SAVE_FILEPATH, options )) as SaveDialogReturnValue; }, async getOpenFilePath(options: OpenDialogOptions) { return (await ipcRenderer.invoke( IPC_ACTIONS.GET_OPEN_FILEPATH, options )) as OpenDialogReturnValue; }, async checkDbAccess(filePath: string) { return (await ipcRenderer.invoke( IPC_ACTIONS.CHECK_DB_ACCESS, filePath )) as boolean; }, async checkForUpdates() { await ipcRenderer.invoke(IPC_ACTIONS.CHECK_FOR_UPDATES); }, openLink(link: string) { ipcRenderer.send(IPC_MESSAGES.OPEN_EXTERNAL, link); }, async deleteFile(filePath: string) { return (await ipcRenderer.invoke( IPC_ACTIONS.DELETE_FILE, filePath )) as BackendResponse; }, async saveData(data: string, savePath: string) { await ipcRenderer.invoke(IPC_ACTIONS.SAVE_DATA, data, savePath); }, showItemInFolder(filePath: string) { ipcRenderer.send(IPC_MESSAGES.SHOW_ITEM_IN_FOLDER, filePath); }, async makePDF( html: string, savePath: string, width: number, height: number ): Promise { return (await ipcRenderer.invoke( IPC_ACTIONS.SAVE_HTML_AS_PDF, html, savePath, width, height )) as boolean; }, async getDbList() { return (await ipcRenderer.invoke( IPC_ACTIONS.GET_DB_LIST )) as ConfigFilesWithModified[]; }, async getEnv() { return (await ipcRenderer.invoke(IPC_ACTIONS.GET_ENV)) as { isDevelopment: boolean; platform: string; version: string; }; }, openExternalUrl(url: string) { ipcRenderer.send(IPC_MESSAGES.OPEN_EXTERNAL, url); }, async showError(title: string, content: string) { await ipcRenderer.invoke(IPC_ACTIONS.SHOW_ERROR, { title, content }); }, async sendError(body: string) { await ipcRenderer.invoke(IPC_ACTIONS.SEND_ERROR, body); }, registerMainProcessErrorListener(listener: IPCRendererListener) { ipcRenderer.on(IPC_CHANNELS.LOG_MAIN_PROCESS_ERROR, listener); }, registerConsoleLogListener(listener: IPCRendererListener) { ipcRenderer.on(IPC_CHANNELS.CONSOLE_LOG, listener); }, } as const; // contextBridge.exposeInMainWorld('api', ipc); window.ipc = ipc; export type IPC = typeof ipc;