diff --git a/app/index.js b/app/index.js index 3a66d24e..43a98eeb 100644 --- a/app/index.js +++ b/app/index.js @@ -9,6 +9,7 @@ import App from './components/app' import logger from 'redux-logger' // import persistState from 'redux-localstorage' import thunk from 'redux-thunk' +import { ipcRenderer as ipc } from 'electron' const store = createStore( redatApp, @@ -21,3 +22,5 @@ render( , document.querySelector('div') ) + +ipc.on('log', (_, str) => console.log(str)) diff --git a/index.js b/index.js index 43c99cff..39da844b 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,25 @@ 'use strict' -const { app, BrowserWindow } = require('electron') +const { app, BrowserWindow, shell, Menu } = require('electron') const { neutral } = require('dat-colors') +const defaultMenu = require('electron-default-menu') +const doctor = require('dat-doctor') +const { Writable } = require('stream') + +const menu = defaultMenu(app, shell) +menu[menu.length - 1].submenu.push({ + label: 'Doctor', + click: () => { + win.webContents.openDevTools({ mode: 'detach' }) + const out = Writable({ + write (chunk, env, done) { + if (win) win.webContents.send('log', chunk.toString()) + done() + } + }) + doctor({ out }) + } +}) let win @@ -16,6 +34,7 @@ app.on('ready', () => { }) win.loadURL(`file://${__dirname}/index.html`) win.webContents.openDevTools() + Menu.setApplicationMenu(Menu.buildFromTemplate(menu)) }) app.on('window-all-closed', () => app.quit()) diff --git a/package-lock.json b/package-lock.json index 847a4427..beadc0d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2014,6 +2014,27 @@ "debug": "2.6.9" } }, + "dat-doctor": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dat-doctor/-/dat-doctor-1.3.1.tgz", + "integrity": "sha512-cykONhsZMVOB1/B/WcGCAiibNa1NyzgZYhgKMIKzSUpdCmXrM0JWlro+pXQMunS3zQbKVEu+dquRtK+YsXXHUg==", + "requires": { + "datland-swarm-defaults": "1.0.2", + "debug": "2.6.9", + "discovery-swarm": "4.4.2", + "dns-discovery": "5.6.1", + "minimist": "1.2.0", + "pump": "1.0.3", + "thunky": "1.0.2" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "dat-encoding": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/dat-encoding/-/dat-encoding-5.0.1.tgz", @@ -2145,6 +2166,21 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, + "datland-swarm-defaults": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/datland-swarm-defaults/-/datland-swarm-defaults-1.0.2.tgz", + "integrity": "sha1-J3uJWjnxqn+WpJWgL7NmKl7Z8uA=", + "requires": { + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + } + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2475,6 +2511,11 @@ "extract-zip": "1.6.6" } }, + "electron-default-menu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/electron-default-menu/-/electron-default-menu-1.0.1.tgz", + "integrity": "sha1-MXPFAY61B0BP7GO987eMOO7bqAg=" + }, "electron-download": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", diff --git a/package.json b/package.json index f25104c8..fa702a79 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,11 @@ }, "dependencies": { "dat-colors": "^3.5.1", + "dat-doctor": "^1.3.1", "dat-encoding": "^5.0.1", "dat-icons": "^2.5.1", "dat-node": "^3.5.6", + "electron-default-menu": "^1.0.1", "prettier-bytes": "^1.0.4", "react": "^16.2.0", "react-dom": "^16.2.0",