From 88e6bbf254a0527de5a8fc245c87932fb6f5996e Mon Sep 17 00:00:00 2001 From: Zhiting Lin Date: Thu, 12 Apr 2018 13:43:25 +0800 Subject: [PATCH] Add the Mining/UnMining function for the electron --- main-process/interface/i18n/desktop.en.i18n.json | 4 +- main-process/interface/i18n/desktop.zh.i18n.json | 4 +- main-process/menus/application-menu.js | 50 +++++++++++++++--------- main.js | 3 +- src/features/app/components/Container.jsx | 5 +++ src/features/core/reducers.js | 4 ++ 6 files changed, 48 insertions(+), 22 deletions(-) diff --git a/main-process/interface/i18n/desktop.en.i18n.json b/main-process/interface/i18n/desktop.en.i18n.json index 562c582..11514b8 100644 --- a/main-process/interface/i18n/desktop.en.i18n.json +++ b/main-process/interface/i18n/desktop.en.i18n.json @@ -31,7 +31,9 @@ "label": "Develop", "devTools": "Toggle developer tools", "fullScreen": "Toggle full screen", - "logFiles": "Show log files" + "logFiles": "Show log files", + "startMining": "⛏ Start mining", + "stopMining": "⛏ Stop mining" }, "help": { "label": "Help", diff --git a/main-process/interface/i18n/desktop.zh.i18n.json b/main-process/interface/i18n/desktop.zh.i18n.json index ed91f46..5276bc7 100644 --- a/main-process/interface/i18n/desktop.zh.i18n.json +++ b/main-process/interface/i18n/desktop.zh.i18n.json @@ -27,7 +27,9 @@ "label": "开发", "devTools": "切换开发者工具", "fullScreen": "切换全屏", - "logFiles": "显示日志文件" + "logFiles": "显示日志文件", + "startMining": "⛏ 开启挖矿", + "stopMining": "⛏ 停止挖矿" }, "help": { "label": "帮助" diff --git a/main-process/menus/application-menu.js b/main-process/menus/application-menu.js index 905aa61..7649600 100755 --- a/main-process/menus/application-menu.js +++ b/main-process/menus/application-menu.js @@ -1,4 +1,4 @@ -const { Menu, app, shell } = require('electron') +const { Menu, app, shell, ipcMain } = require('electron') const settings = require('electron-settings') global.language = settings.get('browserSetting.core.lang') || app.getLocale() const i18n = require('../i18n.js') @@ -226,6 +226,21 @@ let menuTempl = function () { log.error(error) } }, + },{ + type: 'separator' + },{ + label: (global.mining.isMining) ? i18n.t('desktop.applicationMenu.develop.stopMining') : i18n.t('desktop.applicationMenu.develop.startMining'), + accelerator: 'CommandOrControl+Shift+M', + enabled: true, + click: (item, focusedWindow) => { + if (focusedWindow) { + if (global.mining.isMining) { + stopMining(focusedWindow) + } else { + startMining(focusedWindow) + } + } + } }) menu.push({ @@ -255,24 +270,18 @@ let menuTempl = function () { return menu } -// -// function findReopenMenuItem () { -// const menu = Menu.getApplicationMenu() -// if (!menu) return -// -// let reopenMenuItem -// menu.items.forEach(item => { -// if (item.submenu) { -// item.submenu.items.forEach(item => { -// if (item.key === 'reopenMenuItem') { -// reopenMenuItem = item -// } -// }) -// } -// }) -// return reopenMenuItem -// } +const startMining = (focusedWindow) => { + focusedWindow.webContents.send('mining', 'true') + global.mining.isMining = true + createMenu() +} + +const stopMining = (focusedWindow) => { + focusedWindow.webContents.send('mining', 'false') + global.mining.isMining = false + createMenu() +} const createMenu = function () { log.info('Create Menu') @@ -280,7 +289,6 @@ const createMenu = function () { Menu.setApplicationMenu(menu) } - settings.watch('browserSetting.app.navAdvancedState', newValue => { advNav = newValue menu.items[2].submenu.items[1].checked = ( advNav === 'advance' ) @@ -300,4 +308,8 @@ settings.watch('browserSetting.core.lang', newValue => { }) }) +ipcMain.on('refresh-menu', function() { + createMenu() +}) + module.exports = createMenu() diff --git a/main.js b/main.js index 7e08394..f2018aa 100644 --- a/main.js +++ b/main.js @@ -11,6 +11,7 @@ const bytomdLog = logger.create('bytomd') let win, bytomdInit, bytomdMining global.fileExist = false +global.mining = {isMining: false} function initialize () { @@ -97,7 +98,7 @@ const bytomdPath = process.env.DEV? const bytomdDataPath = path.join(app.getPath('userData'), '/.bytomd') function setBytomMining(event) { - bytomdMining = spawn( `${bytomdPath}`, ['node', '--mining', '--home' , `${bytomdDataPath}`, '--web.closed'] ) + bytomdMining = spawn( `${bytomdPath}`, ['node', '--home' , `${bytomdDataPath}`, '--web.closed'] ) bytomdMining.stdout.on('data', function(data) { bytomdLog.info(`bytomd mining stdout: ${data}`) diff --git a/src/features/app/components/Container.jsx b/src/features/app/components/Container.jsx index 517e36c..ddbed85 100644 --- a/src/features/app/components/Container.jsx +++ b/src/features/app/components/Container.jsx @@ -56,6 +56,10 @@ class Container extends React.Component { this.props.updateConfiguredStatus() } }) + window.ipcRenderer.on('mining', (event, arg) => { + let isMining = (arg == 'true') + this.props.updateMiningState(isMining) + }) } } @@ -115,6 +119,7 @@ export default connect( }), (dispatch) => ({ fetchInfo: options => dispatch(actions.core.fetchCoreInfo(options)), + updateMiningState: param => dispatch(actions.core.updateMiningState(param)), showRoot: () => dispatch(actions.app.showRoot), showConfiguration: () => dispatch(actions.app.showConfiguration()), uptdateBtmAmountUnit: (param) => dispatch(actions.core.updateBTMAmountUnit(param)), diff --git a/src/features/core/reducers.js b/src/features/core/reducers.js index f7df2c8..5bdf4c0 100644 --- a/src/features/core/reducers.js +++ b/src/features/core/reducers.js @@ -231,6 +231,10 @@ const lang = (state = defaultLang, action) => { const mingStatus = (state = false, action) => { if (action.type == 'UPDATE_CORE_INFO') { + if(window.remote && window.remote.getGlobal('mining').isMining!= action.param.data.mining){ + window.remote.getGlobal('mining').isMining = action.param.data.mining + window.ipcRenderer.send('refresh-menu') + } return action.param.data.mining } return state -- 2.11.0