74 lines
2.0 KiB
JavaScript
74 lines
2.0 KiB
JavaScript
import {ipcMain as ipc, BrowserWindow, app, dialog} from "electron";
|
|
|
|
import * as IPCEvents from "common/constants/ipcevents";
|
|
|
|
const getPath = (event, pathReq) => {
|
|
let returnPath;
|
|
switch (pathReq) {
|
|
case "appPath":
|
|
returnPath = app.getAppPath();
|
|
break;
|
|
case "appData":
|
|
case "userData":
|
|
case "home":
|
|
case "cache":
|
|
case "temp":
|
|
case "exe":
|
|
case "module":
|
|
case "desktop":
|
|
case "documents":
|
|
case "downloads":
|
|
case "music":
|
|
case "pictures":
|
|
case "videos":
|
|
case "recent":
|
|
case "logs":
|
|
returnPath = app.getPath(pathReq);
|
|
break;
|
|
default:
|
|
returnPath = "";
|
|
}
|
|
|
|
event.returnValue = returnPath;
|
|
};
|
|
|
|
const relaunch = () => {
|
|
app.quit();
|
|
app.relaunch();
|
|
};
|
|
|
|
const runScript = async (event, script) => {
|
|
try {
|
|
// TODO: compile with vm to prevent escape with clever strings
|
|
await event.sender.executeJavaScript(`(() => {try {${script}} catch {}})();`);
|
|
}
|
|
catch (e) {
|
|
// TODO: cut a log
|
|
}
|
|
};
|
|
|
|
const openDevTools = event => event.sender.openDevTools();
|
|
const closeDevTools = event => event.sender.closeDevTools();
|
|
|
|
const createBrowserWindow = async (event, url, {windowOptions, closeOnUrl} = {}) => {
|
|
return await new Promise(resolve => {
|
|
const windowInstance = new BrowserWindow(windowOptions);
|
|
windowInstance.webContents.on("did-navigate", (_, navUrl) => {
|
|
if (navUrl != closeOnUrl) return;
|
|
windowInstance.close();
|
|
resolve();
|
|
});
|
|
windowInstance.loadURL(url);
|
|
});
|
|
};
|
|
|
|
export default class IPCMain {
|
|
static registerEvents() {
|
|
ipc.on(IPCEvents.GET_PATH, getPath);
|
|
ipc.on(IPCEvents.RELAUNCH, relaunch);
|
|
ipc.on(IPCEvents.OPEN_DEVTOOLS, openDevTools);
|
|
ipc.on(IPCEvents.CLOSE_DEVTOOLS, closeDevTools);
|
|
ipc.handle(IPCEvents.RUN_SCRIPT, runScript);
|
|
ipc.handle(IPCEvents.OPEN_WINDOW, createBrowserWindow);
|
|
}
|
|
} |