From c84fe27386d41d952c973f963198d7f3bf69b8e7 Mon Sep 17 00:00:00 2001 From: George Lima Date: Mon, 26 Nov 2018 17:08:52 -0300 Subject: [PATCH] feature: add electron starter --- config/electron.js | 104 +++++++++++++++++++++++++++++++++++ index.js | 2 + public/images/zcash-icon.png | Bin 0 -> 24849 bytes utils/debugShortcut.js | 9 +++ 4 files changed, 115 insertions(+) create mode 100644 config/electron.js create mode 100644 index.js create mode 100644 public/images/zcash-icon.png create mode 100644 utils/debugShortcut.js diff --git a/config/electron.js b/config/electron.js new file mode 100644 index 0000000..0b5bfec --- /dev/null +++ b/config/electron.js @@ -0,0 +1,104 @@ +// @flow +import path from 'path' + +import { app, BrowserWindow, powerMonitor, Tray } from 'electron' +import { autoUpdater } from 'electron-updater' +import log from 'electron-log' +import Positioner from 'electron-positioner' +import isDev from 'electron-is-dev' + +import { registerDebugShortcut } from '../utils/debugShortcut' + +import type { BrowserWindow as BrowserWindowType, Tray as TrayType } from 'electron' + +let mainWindow: BrowserWindowType +let tray: TrayType +let updateAvailable = false + +const showStatus = text => { + if (text === 'Update downloaded') updateAvailable = true + + mainWindow.webContents.send('update', { + updateAvailable, + updateInfo: text, + }) +} + +function createWindow() { + autoUpdater.checkForUpdatesAndNotify() + + autoUpdater.on('checking-for-update', () => showStatus('Checking for update')) + autoUpdater.on('update-available', () => showStatus('Update available')) + autoUpdater.on('update-not-available', () => showStatus('No updates available')) + autoUpdater.on('error', err => showStatus(`Error while updating: ${err}`)) + autoUpdater.on('download-progress', progress => + showStatus(` + Download speed: ${progress.bytesPerSecond} - Downloaded ${progress.percent}% (${progress.transferred}/${ + progress.total + }) + `), + ) + autoUpdater.on('update-downloaded', () => { + updateAvailable = true + showStatus('Update downloaded') + }) + + mainWindow = new BrowserWindow({ + width: 800, + height: 600, + transparent: true, + frame: false, + resizable: true, + webPreferences: { + devTools: true, + webSecurity: false, + }, + }) + + mainWindow.setVisibleOnAllWorkspaces(true) + + // TODO: Update to right icon location + tray = new Tray(path.join(__dirname, '../public/images', 'zcash-icon.png')) + + registerDebugShortcut(app, mainWindow) + + tray.setToolTip('ZCash') + mainWindow.loadURL(isDev ? 'http://0.0.0.0:8080/' : `file://${path.join(__dirname, '../dist/index.html')}`) + + const positioner = new Positioner(mainWindow) + let bounds = tray.getBounds() + positioner.move('trayCenter', bounds) + + powerMonitor.on('suspend', () => mainWindow.webContents.send('suspend', 'suspended')) + powerMonitor.on('resume', () => mainWindow.webContents.send('resume', 'resumed')) + + mainWindow.once('ready-to-show', () => mainWindow.show()) + mainWindow.on('blur', () => mainWindow.hide()) + mainWindow.on('show', () => tray.setHighlightMode('always')) + mainWindow.on('hide', () => tray.setHighlightMode('never')) + mainWindow.on('closed', () => { + mainWindow = null + }) + + tray.on('click', () => { + bounds = tray.getBounds() + positioner.move('trayCenter', bounds) + + if (mainWindow.isVisible()) { + mainWindow.hide() + } else { + mainWindow.show() + } + }) + + exports.app = app + exports.tray = tray +} + +app.on('ready', createWindow) +app.on('activate', () => { + if (mainWindow === null) createWindow() +}) +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') app.quit() +}) diff --git a/index.js b/index.js new file mode 100644 index 0000000..796a750 --- /dev/null +++ b/index.js @@ -0,0 +1,2 @@ +require('@babel/register') +require('./config/electron') diff --git a/public/images/zcash-icon.png b/public/images/zcash-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..060bd0030c3e31c4da52d88817db34f81c09577f GIT binary patch literal 24849 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 MV@spT)2<2s1Elg|C;$Ke literal 0 HcmV?d00001 diff --git a/utils/debugShortcut.js b/utils/debugShortcut.js new file mode 100644 index 0000000..a84cade --- /dev/null +++ b/utils/debugShortcut.js @@ -0,0 +1,9 @@ +// @flow + +import { globalShortcut } from 'electron' + +export const registerDebugShortcut = (app: Object, mainWindow: Object) => + globalShortcut.register('CommandOrControl+Option+B', () => { + app.dock.show() + mainWindow.webContents.openDevTools() + })