armcord/src/preload/bridge.ts

46 lines
1.9 KiB
TypeScript

import {contextBridge, ipcRenderer} from "electron";
import {getDisplayMediaSelector} from "./capturer";
import {injectTitlebar} from "./titlebar";
contextBridge.exposeInMainWorld("armcord", {
window: {
show: () => ipcRenderer.send("win-show"),
hide: () => ipcRenderer.send("win-hide"),
minimize: () => ipcRenderer.send("win-minimize"),
maximize: () => ipcRenderer.send("win-maximize")
},
titlebar: {
injectTitlebar: () => injectTitlebar(),
isTitlebar: ipcRenderer.sendSync("titlebar")
},
electron: process.versions.electron,
channel: ipcRenderer.sendSync("channel"),
setPingCount: (pingCount: number) => ipcRenderer.send("setPing", pingCount),
setTrayIcon: (favicon: string) => ipcRenderer.send("sendTrayIcon", favicon),
getLang: (toGet: string) =>
ipcRenderer.invoke("getLang", toGet).then((result) => {
return result;
}),
version: ipcRenderer.sendSync("get-app-version", "app-version"),
mods: ipcRenderer.sendSync("clientmod"),
packageVersion: ipcRenderer.sendSync("get-package-version", "app-version"),
getDisplayMediaSelector: getDisplayMediaSelector,
splashEnd: () => ipcRenderer.send("splashEnd"),
openSettingsWindow: () => ipcRenderer.send("openSettingsWindow")
});
let windowCallback: (arg0: object) => void;
contextBridge.exposeInMainWorld("ArmCordRPC", {
listen: (callback: any) => (windowCallback = callback)
});
ipcRenderer.on("rpc", (event, data: object) => {
windowCallback(data);
});
//to be only used inside armcord internal setup/splash etc
if (window.location.href.indexOf("splash.html") > -1 || window.location.href.indexOf("setup.html") > -1) {
contextBridge.exposeInMainWorld("armcordinternal", {
restart: () => ipcRenderer.send("restart"),
installState: ipcRenderer.sendSync("modInstallState"),
saveSettings: (...args: any) => ipcRenderer.send("saveSettings", ...args)
});
}