Browse Source

Clean events, add isListenDevices for ipcMain events

master
Loëck Vézien 7 years ago
parent
commit
7af7534ad6
No known key found for this signature in database GPG Key ID: CBCDCE384E853AC4
  1. 7
      package.json
  2. 24
      src/main/ledger.js
  3. 19
      src/renderer/initEvents.js
  4. 103
      yarn.lock

7
package.json

@ -27,13 +27,14 @@
}, },
"dependencies": { "dependencies": {
"color": "^2.0.1", "color": "^2.0.1",
"electron": "1.7.9", "electron": "1.7.10",
"electron-devtools-installer": "^2.2.3", "electron-devtools-installer": "^2.2.3",
"history": "^4.7.2", "history": "^4.7.2",
"i18next": "^10.2.2", "i18next": "^10.2.2",
"i18next-node-fs-backend": "^1.0.0", "i18next-node-fs-backend": "^1.0.0",
"ledger-node-js-hid": "github:loeck/ledger-node-js-hid", "ledger-node-js-hid": "github:loeck/ledger-node-js-hid",
"ledgerco": "^1.2.1", "ledgerco": "^1.2.1",
"object-path": "^0.11.4",
"react": "^16.2.0", "react": "^16.2.0",
"react-dom": "^16.2.0", "react-dom": "^16.2.0",
"react-i18next": "^7.3.0", "react-i18next": "^7.3.0",
@ -50,7 +51,7 @@
"webpack": "^3.10.0" "webpack": "^3.10.0"
}, },
"devDependencies": { "devDependencies": {
"babel-eslint": "^8.1.2", "babel-eslint": "^8.2.1",
"babel-plugin-module-resolver": "^3.0.0", "babel-plugin-module-resolver": "^3.0.0",
"babel-preset-flow": "^6.23.0", "babel-preset-flow": "^6.23.0",
"babel-preset-react": "^6.24.1", "babel-preset-react": "^6.24.1",
@ -66,7 +67,7 @@
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.5.1", "eslint-plugin-react": "^7.5.1",
"flow-bin": "^0.62.0", "flow-bin": "^0.63.1",
"flow-typed": "^2.2.3", "flow-typed": "^2.2.3",
"prettier": "^1.9.2", "prettier": "^1.9.2",
"react-hot-loader": "^4.0.0-beta.12" "react-hot-loader": "^4.0.0-beta.12"

24
src/main/ledger.js

@ -3,6 +3,7 @@
import { ipcMain } from 'electron' import { ipcMain } from 'electron'
import { isLedgerDevice } from 'ledgerco/lib/utils' import { isLedgerDevice } from 'ledgerco/lib/utils'
import ledgerco, { comm_node } from 'ledgerco' import ledgerco, { comm_node } from 'ledgerco'
import objectPath from 'object-path'
import HID from 'ledger-node-js-hid' import HID from 'ledger-node-js-hid'
@ -16,18 +17,30 @@ async function getWalletInfos(path: string, wallet: string) {
throw new Error('invalid wallet') throw new Error('invalid wallet')
} }
let isListenDevices = false
const handlers = { const handlers = {
listenDevices: send => { devices: {
listen: send => {
if (isListenDevices) {
return
}
isListenDevices = true
HID.listenDevices.start() HID.listenDevices.start()
HID.listenDevices.events.on( HID.listenDevices.events.on(
'add', 'add',
device => isLedgerDevice(device) && send('addDevice', device), device => isLedgerDevice(device) && send('device.add', device),
) )
HID.listenDevices.events.on( HID.listenDevices.events.on(
'remove', 'remove',
device => isLedgerDevice(device) && send('removeDevice', device), device => isLedgerDevice(device) && send('device.remove', device),
) )
}, },
all: send => send('devices.update', HID.devices().filter(isLedgerDevice)),
},
requestWalletInfos: async (send, { path, wallet }) => { requestWalletInfos: async (send, { path, wallet }) => {
try { try {
const publicKey = await getWalletInfos(path, wallet) const publicKey = await getWalletInfos(path, wallet)
@ -36,15 +49,12 @@ const handlers = {
send('failWalletInfos', { path, err: err.stack }) send('failWalletInfos', { path, err: err.stack })
} }
}, },
getDevices: send => {
send('updateDevices', HID.devices().filter(isLedgerDevice))
},
} }
ipcMain.on('msg', (event: *, payload) => { ipcMain.on('msg', (event: *, payload) => {
const { type, data } = payload const { type, data } = payload
const handler = handlers[type] const handler = objectPath.get(handlers, type)
if (!handler) { if (!handler) {
return return
} }

19
src/renderer/initEvents.js

@ -1,6 +1,7 @@
// @flow // @flow
import { ipcRenderer } from 'electron' import { ipcRenderer } from 'electron'
import objectPath from 'object-path'
import { devicesUpdate, deviceAdd, deviceRemove } from 'actions/devices' import { devicesUpdate, deviceAdd, deviceRemove } from 'actions/devices'
@ -18,7 +19,8 @@ function send(msgType: string, data: *) {
export default (store: Object) => { export default (store: Object) => {
const handlers = { const handlers = {
updateDevices: devices => { devices: {
update: devices => {
store.dispatch(devicesUpdate(devices)) store.dispatch(devicesUpdate(devices))
if (devices.length) { if (devices.length) {
send('requestWalletInfos', { send('requestWalletInfos', {
@ -27,8 +29,11 @@ export default (store: Object) => {
}) })
} }
}, },
addDevice: device => store.dispatch(deviceAdd(device)), },
removeDevice: device => store.dispatch(deviceRemove(device)), device: {
add: device => store.dispatch(deviceAdd(device)),
remove: device => store.dispatch(deviceRemove(device)),
},
receiveWalletInfos: ({ path, publicKey }) => { receiveWalletInfos: ({ path, publicKey }) => {
console.log({ path, publicKey }) console.log({ path, publicKey })
}, },
@ -39,16 +44,18 @@ export default (store: Object) => {
ipcRenderer.on('msg', (e: *, payload: MsgPayload) => { ipcRenderer.on('msg', (e: *, payload: MsgPayload) => {
const { type, data } = payload const { type, data } = payload
const handler = handlers[type]
const handler = objectPath.get(handlers, type)
if (!handler) { if (!handler) {
return return
} }
handler(data) handler(data)
}) })
// First time, we get all devices // First time, we get all devices
send('getDevices') send('devices.all')
// Start detection when we plug/unplug devices // Start detection when we plug/unplug devices
send('listenDevices') send('devices.listen')
} }

103
yarn.lock

@ -26,54 +26,53 @@
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30"
"@babel/code-frame@7.0.0-beta.31": "@babel/code-frame@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
dependencies: dependencies:
chalk "^2.0.0" chalk "^2.0.0"
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^3.0.0" js-tokens "^3.0.0"
"@babel/helper-function-name@7.0.0-beta.31": "@babel/helper-function-name@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
dependencies: dependencies:
"@babel/helper-get-function-arity" "7.0.0-beta.31" "@babel/helper-get-function-arity" "7.0.0-beta.36"
"@babel/template" "7.0.0-beta.31" "@babel/template" "7.0.0-beta.36"
"@babel/traverse" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31"
"@babel/helper-get-function-arity@7.0.0-beta.31": "@babel/helper-get-function-arity@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
dependencies: dependencies:
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
"@babel/template@7.0.0-beta.31": "@babel/template@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.31" "@babel/code-frame" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.31" babylon "7.0.0-beta.36"
lodash "^4.2.0" lodash "^4.2.0"
"@babel/traverse@7.0.0-beta.31": "@babel/traverse@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.31" "@babel/code-frame" "7.0.0-beta.36"
"@babel/helper-function-name" "7.0.0-beta.31" "@babel/helper-function-name" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.31" babylon "7.0.0-beta.36"
debug "^3.0.1" debug "^3.0.1"
globals "^10.0.0" globals "^11.1.0"
invariant "^2.2.0" invariant "^2.2.0"
lodash "^4.2.0" lodash "^4.2.0"
"@babel/types@7.0.0-beta.31": "@babel/types@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
lodash "^4.2.0" lodash "^4.2.0"
@ -408,14 +407,14 @@ babel-core@^6.24.1, babel-core@^6.26.0:
slash "^1.0.0" slash "^1.0.0"
source-map "^0.5.6" source-map "^0.5.6"
babel-eslint@^8.1.2: babel-eslint@^8.2.1:
version "8.1.2" version "8.2.1"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.1.2.tgz#a39230b0c20ecbaa19a35d5633bf9b9ca2c8116f" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.31" "@babel/code-frame" "7.0.0-beta.36"
"@babel/traverse" "7.0.0-beta.31" "@babel/traverse" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.31" babylon "7.0.0-beta.36"
eslint-scope "~3.7.1" eslint-scope "~3.7.1"
eslint-visitor-keys "^1.0.0" eslint-visitor-keys "^1.0.0"
@ -1267,9 +1266,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
lodash "^4.17.4" lodash "^4.17.4"
to-fast-properties "^1.0.3" to-fast-properties "^1.0.3"
babylon@7.0.0-beta.31: babylon@7.0.0-beta.36:
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
babylon@^6.18.0: babylon@^6.18.0:
version "6.18.0" version "6.18.0"
@ -2579,9 +2578,9 @@ electron-webpack@1.11.0:
webpack-merge "^4.1.0" webpack-merge "^4.1.0"
yargs "^10.0.3" yargs "^10.0.3"
electron@1.7.9: electron@1.7.10:
version "1.7.9" version "1.7.10"
resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.9.tgz#add54e9f8f83ed02f6519ec10135f698b19336cf" resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.10.tgz#3a3e83d965fd7fafe473be8ddf8f472561b6253d"
dependencies: dependencies:
"@types/node" "^7.0.18" "@types/node" "^7.0.18"
electron-download "^3.0.1" electron-download "^3.0.1"
@ -3206,9 +3205,9 @@ flatten@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
flow-bin@^0.62.0: flow-bin@^0.63.1:
version "0.62.0" version "0.63.1"
resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.62.0.tgz#14bca669a6e3f95c0bc0c2d1eb55ec4e98cb1d83" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.63.1.tgz#ab00067c197169a5fb5b4996c8f6927b06694828"
flow-typed@^2.2.3: flow-typed@^2.2.3:
version "2.2.3" version "2.2.3"
@ -3441,11 +3440,7 @@ global@^4.3.0:
min-document "^2.19.0" min-document "^2.19.0"
process "~0.5.1" process "~0.5.1"
globals@^10.0.0: globals@^11.0.1, globals@^11.1.0:
version "10.4.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7"
globals@^11.0.1:
version "11.1.0" version "11.1.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
@ -4889,6 +4884,10 @@ object-keys@~0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
object-path@^0.11.4:
version "0.11.4"
resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
object.omit@^2.0.0: object.omit@^2.0.0:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"

Loading…
Cancel
Save