const path = require("path"); const { app, BrowserWindow, ipcMain } = require("electron"); const isDev = require("electron-is-dev"); const settings = require("electron-settings"); const ipcTypes = require("../src/ipc.types"); const { StartWatcher } = require("./file-watcher/file-watcher"); require("./ipc-main-handler"); // Conditionally include the dev tools installer to load React Dev Tools let installExtension, REACT_DEVELOPER_TOOLS; if (isDev) { const devTools = require("electron-devtools-installer"); installExtension = devTools.default; REACT_DEVELOPER_TOOLS = devTools.REACT_DEVELOPER_TOOLS; } // Handle creating/removing shortcuts on Windows when installing/uninstalling if (require("electron-squirrel-startup")) { app.quit(); } console.log(`${__dirname}/preload.js`); let mainWindow; function createWindow() { makeSingleInstance(); // Create the browser window. mainWindow = new BrowserWindow({ width: 800, height: 600, title: "ImEX RPS", webPreferences: { nodeIntegration: false, enableRemoteModule: false, worldSafeExecuteJavaScript: true, contextIsolation: true, preload: path.join(__dirname, "preload.js"), // use a preload script }, }); // and load the index.html of the app. // win.loadFile("index.html"); mainWindow.loadURL( isDev ? "http://localhost:3000" : `file://${path.join(__dirname, "../build/index.html")}` ); // Open the DevTools. if (isDev) { mainWindow.webContents.openDevTools({ // mode: "detach" }); } } exports.mainWindow = mainWindow; // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.whenReady().then(() => { createWindow(); if (isDev) { console.log(`Path to Settings File: ${settings.file()}`); installExtension(REACT_DEVELOPER_TOOLS) .then((name) => console.log(`Added Extension: ${name}`)) .catch((error) => console.log(`An error occurred: , ${error}`)); } StartWatcher(); // ipcMain.on(ipcTypes.default.webcontent, (event, ...obj) => { // console.log("event", event); // mainWindow.webContents.send(event, obj); // }); }); if (isDev) app.setAppUserModelId(process.execPath); // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. app.on("window-all-closed", () => { if (process.platform !== "darwin") { app.quit(); } }); app.on("activate", () => { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); // In this file you can include the rest of your app's specific main process // code. You can also put them in separate files and require them here. function makeSingleInstance() { if (process.mas) return; app.requestSingleInstanceLock(); app.on("second-instance", () => { if (mainWindow) { if (mainWindow.isMinimized()) mainWindow.restore(); mainWindow.focus(); } }); }