diff --git a/app-el.js b/app-el.js index 513f9afe..57de12d7 100644 --- a/app-el.js +++ b/app-el.js @@ -9,8 +9,8 @@ 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'); +const debug = process.argv.slice(2).map(v => v.replaceAll('-', '')).indexOf('debugg') >= 0; +const devel = process.argv.slice(2).map(v => v.replaceAll('-', '')).indexOf('devel') >= 0; process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = true; @@ -40,23 +40,31 @@ function createWindow() { width: 1600, height: 900, webPreferences: { + // contextIsolation: true, + // nodeIntegration: false, + // sandbox: true, + // preload: undefined + // nodeIntegration: true, + // contextIsolation: false // preload: path.join(__dirname, 'preload.js') } }); + const { webContents } = mainWindow; + mainWindow.loadURL('http://localhost:5309/kiri'); // default normal url navigation or page opens to happen outside Electron - mainWindow.webContents.setWindowOpenHandler((details) => { + 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) => { + webContents.on('will-navigate', (event, url) => { // console.log('DIVERT', url); - if (url.endsWith('/kiri') || url.endsWith('/kiri/')) { + if (url.endsWith('/kiri') || url.endsWith('/kiri/')) { return; } if (url.endsWith('/mesh') || url.endsWith('/mesh/')) { @@ -66,9 +74,13 @@ function createWindow() { shell.openExternal(url); }); + webContents.on('did-finish-load', () => { + mainWindow.webContents.executeJavaScript(`{ let x = document.getElementById('app-quit'); if (x) { x.onclick = () => window.close() } }; null;`); + }); + if (devel) { console.log("opening developer tools"); - mainWindow.webContents.openDevTools(); + webContents.openDevTools(); } } @@ -77,9 +89,7 @@ app.on('ready', () => { }); app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit(); - } + app.quit(); }); app.on('activate', () => { diff --git a/bin/electron-notarize.js b/bin/electron-notarize.js index fbfc7eb4..63af71a2 100644 --- a/bin/electron-notarize.js +++ b/bin/electron-notarize.js @@ -5,6 +5,7 @@ exports.default = async function notarizing(context) { const { electronPlatformName, appOutDir } = context; if (process.env.SKIPNOT || electronPlatformName !== 'darwin') { + console.log('SKIP NOTARIZING'); return; } diff --git a/bin/electron-pre.js b/bin/electron-pre.js index d25e6f8c..f4ff8e0b 100644 --- a/bin/electron-pre.js +++ b/bin/electron-pre.js @@ -4,28 +4,25 @@ const server = require('@gridspace/app-server'); // deref src, web, mod for windows const srcTmp = path.join('tmp','src'); -fs.copySync("src", srcTmp, { dereference: true }); +fs.copySync("src", srcTmp, { dereference: true, filter:(src) => { + return src.indexOf('web/pack') < 0; +} }); const webTmp = path.join('tmp','web'); -fs.copySync("web", webTmp, { dereference: true }); +fs.copySync("web", webTmp, { dereference: true, filter:(src) => { + return src.indexOf('web/boot') < 0; +} }); const modTmp = path.join('tmp','mod'); if (fs.existsSync("mod")) fs.copySync("mod", modTmp, { dereference: true, filter:(src,dst) => { - const ok = - src === 'mod' || - src.indexOf('mod/standalone') === 0 || - src.indexOf('mod/node_modules') === 0; + const ok = src === 'mod' || src.indexOf('mod/standalone') === 0; return ok; } }); const modsTmp = path.join('tmp','mods'); fs.copySync("mods", modsTmp, { dereference: true, filter:(src,dst) => { - const ok = - src === 'mods' || - src.indexOf('mods/bambu') === 0 || - src.indexOf('mods/electron') === 0 || - src.indexOf('mods/node_modules') === 0; + const ok = src === 'mods' || src.indexOf('mods/bambu') === 0; return ok; } }); diff --git a/mods/electron/.electron b/mods/electron/.electron deleted file mode 100644 index e69de29b..00000000 diff --git a/mods/electron/electron.js b/mods/electron/electron.js deleted file mode 100644 index 30e93f2d..00000000 --- a/mods/electron/electron.js +++ /dev/null @@ -1,15 +0,0 @@ -if (self.kiri && !self.kiri.electron) { - self.kiri.electron = {}; - self.kiri.load(api => { - console.log('ELECTRON MODULE LOADED'); - api.event.on('init-done', () => { - $('app-name-text').innerText = "More Info"; - $('top-sep').style.display = 'flex'; - }); - api.stats.set('kiri', api.version + 'e'); - }); -} - -if (self.mesh && self.mesh) { - self.mesh.electron = {}; -} diff --git a/mods/electron/init.js b/mods/electron/init.js deleted file mode 100644 index 9a8fc6e7..00000000 --- a/mods/electron/init.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * for electron standalone build support - */ -module.exports = function(server) { - // insert script before all others in kiri client - server.inject("kiri", "electron.js"); - // insert scripts into mesh client - server.inject("mesh", "electron.js"); -}; diff --git a/package.json b/package.json index e13988fc..bedc9966 100644 --- a/package.json +++ b/package.json @@ -82,39 +82,39 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", - "setup-mods": "cd mods && npm i", - "build": "npm run prebuild && electron-builder", - "build-nopublish": "npm run prebuild && electron-builder --publish never", "build-debug": "npm run prebuild && DEBUG=electron-builder electron-builder", - "build-linux": "npm run build -- --linux --x64", "build-linux-arm": "npm run build -- --linux --arm64", - "build-win": "npm run build -- --win --x64", - "build-win-arm": "npm run build -- --win --arm64", - "build-mac": "npm run build -- --mac --arm64", + "build-linux": "npm run build -- --linux --x64", "build-mac-intel": "npm run build -- --mac --x64", - "bundle": "COMPRESS=1 npm run bundle:prod", - "bundle:dev": "node bin/bundler.mjs", + "build-mac": "npm run build -- --mac --arm64", + "build-nopublish": "npm run prebuild && electron-builder --publish never", + "build-win-arm": "npm run build -- --win --arm64", + "build-win": "npm run build -- --win --x64", + "build": "npm run prebuild && electron-builder", + "bundle:dev": "node bin/bundler.mjs bin/bundle.config.json", "bundle:prod": "node bin/bundler.mjs bin/bundle-prod.config.json", + "bundle": "COMPRESS=1 npm run bundle:prod", "clean": "rm -rf alt build data dist src/pack src.old tmp web.old .bcache", - "docs-dev": "docusaurus start --config conf/docusaurus.config.js", - "docs-build": "docusaurus build --config conf/docusaurus.config.js", - "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", - "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", - "dryrun": "gs-app-server --debug --single --alt --dryrun", "dev": "npm run pack-dev && gs-app-server --debug --single", - "prod": "npm run pack-prod && gs-app-server", - "start": "npm run prebuild prod && electron .", - "start-dev": "npm run prebuild prod && electron . --devel", - "start-dbg": "npm run prebuild && electron . --debugg", - "start-ddb": "npm run prebuild && electron . --devel --debugg", - "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", + "docs-build": "docusaurus build --config conf/docusaurus.config.js", + "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", + "docs-dev": "docusaurus start --config conf/docusaurus.config.js", + "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", + "dryrun": "gs-app-server --debug --single --alt --dryrun", "mac-verify": "spctl --assess -vv --type install dist/*/*.app", - "prebuild": "npm run setup && npm run webpack-src prod && node bin/electron-pre.js", - "postbuild": "node bin/electron-post.js", - "preinstall": "node bin/install-pre.js", + "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", "pack-dev": "npm run dryrun && npm run webpack-src && npm run dryrun && npm run bundle:dev", "pack-prod": "npm run dryrun && npm run webpack-src prod && npm run dryrun && npm run bundle", + "postbuild": "node bin/electron-post.js", + "prebuild": "npm run setup && npm run pack-dev prod && node bin/electron-pre.js", + "preinstall": "node bin/install-pre.js", + "prod": "npm run pack-prod && gs-app-server", + "setup-mods": "cd mods && npm i", + "setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", + "start-dbg": "npm run prebuild && electron . --debugg", + "start-ddb": "npm run prebuild && electron . --devel --debugg", + "start-dev": "npm run prebuild prod && electron . --devel", + "start": "npm run prebuild prod && electron .", "webpack-ext": "npm run webpack-three && npm run webpack-zip", "webpack-src": "node bin/esbuild.config.mjs", "webpack-three": "npx webpack --config bin/webpack-three-esm.js", @@ -128,52 +128,17 @@ "artifactName": "KiriMoto-${os}-${arch}.${ext}", "files": [ { - "from": "tmp/src", - "to": "src", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/web", - "to": "web", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mod", - "to": "mod", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mod/node_modules", - "to": "mod/node_modules", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mods", - "to": "mods", - "filter": [ - "**/*" - ] - }, - { - "from": "tmp/mods/node_modules", - "to": "mods/node_modules", + "from": "tmp", + "to": "", "filter": [ "**/*" ] }, + "app-el.js", + "app.js", "bin/*", "conf/**/*", "data/cache/**/*", - "app-el.js", - "app.js", "package.json" ], "extraFiles": [], diff --git a/src/kiri/core/api.js b/src/kiri/core/api.js index eb41dccb..76f00517 100644 --- a/src/kiri/core/api.js +++ b/src/kiri/core/api.js @@ -143,6 +143,7 @@ export const api = { dialog, doit, event, + electron: navigator.userAgent.includes('Electron'), feature, function: functions, group, diff --git a/src/main/kiri.js b/src/main/kiri.js index 185a9cf3..918898a5 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -39,14 +39,19 @@ function checkReady() { if (document.readyState === 'complete') { let bootctrl = navigator.serviceWorker.controller; console.log(`kiri | boot ctrl | ` + (bootctrl ? true : false)); - kiri.api = run(); - self.$ = kiri.api.web.$; + let api = kiri.api = run(); + self.$ = api.web.$; for (let fn of load) { safeExec(fn); } load = undefined; - kiri.api.event.emit('load-done', stats); - if (bootctrl) { + api.event.emit('load-done', stats); + if (api.electron) { + $('install').classList.add('hide'); + $('app-quit').classList.remove('hide'); + $('app-name-text').innerText = "More Info"; + $('top-sep').style.display = 'flex'; + } else if (bootctrl) { $('install').classList.add('hide'); $('uninstall').classList.remove('hide'); $('uninstall').onclick = () => { diff --git a/src/main/mesh.js b/src/main/mesh.js index 5be86f84..f0cbf138 100644 --- a/src/main/mesh.js +++ b/src/main/mesh.js @@ -99,6 +99,7 @@ function init() { // for electron self.mesh = { api }; + self.electron = navigator.userAgent.includes('Electron'); } // restore space layout and view from previous session diff --git a/src/main/service.js b/src/main/service.js deleted file mode 100644 index 80db6047..00000000 --- a/src/main/service.js +++ /dev/null @@ -1,37 +0,0 @@ -const service_worker = navigator.serviceWorker; - -import { version } from '../moto/license.js'; - -async function start_service_worker() { - function debug() { - console.log(`[${version}]`, ...arguments); - } - - // install service worker - debug('service worker registration'); - - try { - const reg = await navigator - .serviceWorker - .register(`/code/service.js?${version}`, { scope: "/" }); - if (reg.installing) { - debug('service worker installing'); - } else if (reg.waiting) { - debug('service worker waiting'); - } else if (reg.active) { - debug('service worker active'); - } else { - debug({ service_worker: reg }); - } - - if (service_worker.controller) { - service_worker.controller.postMessage('ctrl message'); - } - } catch (err) { - debug('service worker registration failed', err); - } -} - -if (service_worker && self.enable_service) { - start_service_worker(); -} diff --git a/web/kiri/index.html b/web/kiri/index.html index d8bc28c3..c9dd5b55 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -238,6 +238,10 @@ +