OSDN Git Service

Add the Mining/UnMining function for the electron
authorZhiting Lin <zlin035@uottawa.ca>
Thu, 12 Apr 2018 05:43:25 +0000 (13:43 +0800)
committerZhiting Lin <zlin035@uottawa.ca>
Thu, 12 Apr 2018 05:43:25 +0000 (13:43 +0800)
main-process/interface/i18n/desktop.en.i18n.json
main-process/interface/i18n/desktop.zh.i18n.json
main-process/menus/application-menu.js
main.js
src/features/app/components/Container.jsx
src/features/core/reducers.js

index 562c582..11514b8 100644 (file)
@@ -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",
index ed91f46..5276bc7 100644 (file)
@@ -27,7 +27,9 @@
                 "label": "开发",
                 "devTools": "切换开发者工具",
                 "fullScreen": "切换全屏",
-                "logFiles": "显示日志文件"
+                "logFiles": "显示日志文件",
+                "startMining": "⛏ 开启挖矿",
+                "stopMining": "⛏ 停止挖矿"
             },
             "help": {
                 "label": "帮助"
index 905aa61..7649600 100755 (executable)
@@ -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 (file)
--- 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}`)
index 517e36c..ddbed85 100644 (file)
@@ -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)),
index f7df2c8..5bdf4c0 100644 (file)
@@ -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