const { app, shell, session, BrowserWindow } = require('electron'); const path = require('path'); const server = require('@gridspace/app-server'); const basDir = __dirname; const usrDir = app.getPath("userData"); const appDir = path.join(usrDir, 'gapp'); const cnfDir = path.join(appDir, 'conf'); const logDir = path.join(appDir, 'logs'); const datDir = path.join(appDir, 'data'); const debug = process.argv.slice(2).map(v => v.replaceAll('-', '')).contains('debugg'); const devel = process.argv.slice(2).map(v => v.replaceAll('-', '')).contains('devel'); // console.log({ appDir, usrDir, logDir, datDir, basDir }); // console.log({ argv: process.argv, debug, devel }); // console.log({ // cwd: process.cwd(), // dir: require('fs').readdirSync('.'), // out: require('fs').readdirSync(appDir), // ___: require('fs').readdirSync(basDir) // }); server({ port: 5309, apps: basDir, data: datDir, conf: cnfDir, logs: logDir, cache: path.join(basDir, "data", "cache"), single: true, electron: true, debug }); function createWindow() { const mainWindow = new BrowserWindow({ width: 1600, height: 900, webPreferences: { // preload: path.join(__dirname, 'preload.js') } }); mainWindow.loadURL('http://localhost:5309/kiri'); // default normal url navigation or page opens to happen outside Electron mainWindow.webContents.setWindowOpenHandler((details) => { // console.log('EXTERNAL', details); shell.openExternal(details.url); return { action: 'deny' } }); // prevent "other" urls from opening inside Electron (alerts are problematic) mainWindow.webContents.on('will-navigate', (event, url) => { // console.log('DIVERT', url); if (url.endsWith('/kiri') || url.endsWith('/kiri/')) { return; } if (url.endsWith('/mesh') || url.endsWith('/mesh/')) { return; } event.preventDefault(); shell.openExternal(url); }); if (devel) { console.log("opening developer tools"); mainWindow.webContents.openDevTools(); } } app.on('ready', () => { session.defaultSession.clearCache().then(createWindow); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } });