"use strict"; const {contextBridge, ipcRenderer, webFrame} = require("electron"); let fileOpenListener = null; let closeFileListener = null; let settingsChangeListener = null; contextBridge.exposeInMainWorld("api", { openFileDialog : () => ipcRenderer.send("WindowManager::openFileDialog"), onFileOpen : callback => { if (fileOpenListener) ipcRenderer.off("Ation::openFile", fileOpenListener); fileOpenListener = (_, presentation) => callback(presentation); ipcRenderer.on("Ation::openFile", fileOpenListener); }, onFileClose : callback => { if (closeFileListener) ipcRenderer.off("Ation::closeFile", closeFileListener); closeFileListener = () => callback(); ipcRenderer.on("Ation::closeFile", closeFileListener); }, openFile : filePath => ipcRenderer.send("WindowManager::openFile", filePath), closeFile : () => ipcRenderer.send("Ation::closeFile"), saveFile : async newContent => await ipcRenderer.invoke("Ation::saveFile", newContent), clearCache : () => webFrame.clearCache(), appVersion : async () => await ipcRenderer.invoke("Ation::appVersion"), fonts : async () => await ipcRenderer.invoke("FontManager::fonts"), resize : size => ipcRenderer.invoke("WindowManager::resize", size), fullscreen : fullscreen => ipcRenderer.invoke("WindowManager::presentFullscreen", fullscreen), maximize : () => ipcRenderer.send("WindowManager::toggleMaximize") }); contextBridge.exposeInMainWorld("appSettings", { get : async (key, defaultValue = null) => await ipcRenderer.invoke("SettingsManager::get", key, defaultValue), set : async (key, value) => await ipcRenderer.invoke("SettingsManager::set", key, value), all : async () => await ipcRenderer.invoke("SettingsManager::all"), onChange : callback => { if (settingsChangeListener) ipcRenderer.off("SettingsManager::change", settingsChangeListener); settingsChangeListener = (_, settings) => callback(settings); ipcRenderer.on("SettingsManager::change", settingsChangeListener); }, reset : () => ipcRenderer.send("SettingsManager::reset") });