/**
* The preload script runs before `index.html` is loaded
* in the renderer. It has access to web APIs as well as
* Electron's renderer process modules and some polyfilled
* Node.js functions.
*
* https://www.electronjs.org/docs/latest/tutorial/sandbox
*/
const { contextBridge, ipcRenderer, app } = require('electron');
contextBridge.exposeInMainWorld('interopApi', {
callDotNetMethod: (className, methodName, args) => {
return ipcRenderer.invoke(
'callDotNetMethod',
className,
methodName,
args
);
}
});
const validChannels = ['launch-command'];
contextBridge.exposeInMainWorld('electron', {
getArch: () => ipcRenderer.invoke('app:getArch'),
getClipboardText: () => ipcRenderer.invoke('app:getClipboardText'),
getNoUpdater: () => ipcRenderer.invoke('app:getNoUpdater'),
setTrayIconNotification: (notify) =>
ipcRenderer.invoke('app:setTrayIconNotification', notify),
openFileDialog: () => ipcRenderer.invoke('dialog:openFile'),
openDirectoryDialog: () => ipcRenderer.invoke('dialog:openDirectory'),
onWindowPositionChanged: (callback) =>
ipcRenderer.on('setWindowPosition', callback),
onWindowSizeChanged: (callback) =>
ipcRenderer.on('setWindowSize', callback),
onWindowStateChange: (callback) =>
ipcRenderer.on('setWindowState', callback),
onBrowserFocus: (callback) => ipcRenderer.on('onBrowserFocus', callback),
desktopNotification: (title, body, icon) =>
ipcRenderer.invoke('notification:showNotification', title, body, icon),
restartApp: () => ipcRenderer.invoke('app:restart'),
getOverlayWindow: () => ipcRenderer.invoke('app:getOverlayWindow'),
updateVr: (active, hmdOverlay, wristOverlay, menuButton, overlayHand) =>
ipcRenderer.invoke(
'app:updateVr',
active,
hmdOverlay,
wristOverlay,
menuButton,
overlayHand
),
ipcRenderer: {
on(channel, func) {
if (validChannels.includes(channel)) {
ipcRenderer.on(channel, (event, ...args) => func(...args));
}
}
}
});