From 3cc35ad793055ee30b06240bc56c0af478af226d Mon Sep 17 00:00:00 2001 From: Zhiting Lin Date: Thu, 22 Oct 2020 10:00:52 +0800 Subject: [PATCH] update the event emitter detect event. --- package.json | 2 +- src/background.js | 3 ++- src/content.js | 24 ++++++++++-------------- src/dapp.js | 18 +++++++++++++++--- src/inject.js | 20 +++++++++++++++++++- src/manifest.js | 2 +- src/messages/types.js | 8 ++++++++ updates.xml | 4 ++-- 8 files changed, 58 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 1d2a946..14f2634 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Byone", "description": "Bytom Chrome Extension Wallet", - "version": "3.0.5", + "version": "3.0.6", "author": "zhiting.fly@8btc.com", "license": "MIT", "private": true, diff --git a/src/background.js b/src/background.js index dec91a8..9896c57 100644 --- a/src/background.js +++ b/src/background.js @@ -190,7 +190,8 @@ export default class Background { const currentAccount = bytom.currentAccount const {vpAddress, address} = currentAccount let account = { - addresses: [vpAddress, address] + addresses: [vpAddress, address], + rootXPub: currentAccount.xpub } if(bytom.settings.netType === 'vapor'){ account.address = vpAddress; diff --git a/src/content.js b/src/content.js index b938a99..603ff65 100644 --- a/src/content.js +++ b/src/content.js @@ -50,34 +50,28 @@ class Content { }) chrome.storage.onChanged.addListener(async (evt) => { - if(evt.bytom.newValue.settings.network !== evt.bytom.oldValue.settings.network){ + const newValue = evt.bytom.newValue; + const oldValue = evt.bytom.oldValue + if(newValue.settings.network !== oldValue.settings.network){ const net = await this.getDefaultNetwork(); const defaultAccount = await this.getDefaultAccount(); stream.send( - NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, {type:'net', value: net}), + NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, [{type:'net', value: net}, {type:'default_account', value: defaultAccount}]), EventNames.INJECT ) - stream.send( - NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, {type:'default_account', value: defaultAccount}), - EventNames.INJECT - ) - }else if(!_.isEqual(evt.bytom.newValue.currentAccount,evt.bytom.oldValue.currentAccount)){ + }else if(newValue.currentAccount.guid !== oldValue.currentAccount.guid){ const defaultAccount = await this.getDefaultAccount(); if(defaultAccount){ stream.send( - NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, {type:'default_account', value: defaultAccount}), + NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, [{type:'default_account', value: defaultAccount}]), EventNames.INJECT ) } - }else if(evt.bytom.newValue.settings.netType!== evt.bytom.oldValue.settings.netType){ + }else if(newValue.settings.netType!== oldValue.settings.netType){ const chain = await this.getDefaultChain(); const defaultAccount = await this.getDefaultAccount(); stream.send( - NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, {type:'chain', value: chain}), - EventNames.INJECT - ) - stream.send( - NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, {type:'default_account', value: defaultAccount}), + NetworkMessage.payload(MsgTypes.UPDATE_BYTOM, [{type:'chain', value: chain}, {type:'default_account', value: defaultAccount}]), EventNames.INJECT ) } @@ -176,6 +170,8 @@ class Content { } enable(type, networkMessage) { + if (!isReady) return + networkMessage.payload ={ domain: strippedHost(), title: document.title, diff --git a/src/dapp.js b/src/dapp.js index 545e8c2..a37044f 100644 --- a/src/dapp.js +++ b/src/dapp.js @@ -3,6 +3,7 @@ import * as MsgTypes from './messages/types' import * as EventNames from '@/messages/event' import IdGenerator from '@/utils/IdGenerator' import { networks } from '@/utils/constants' +import { EventEmitter } from 'events'; /*** * This is just a helper to manage resolving fake-async * requests using browser messaging. @@ -54,9 +55,9 @@ const _send = (_type, _payload) => { }) } - -export default class Bytomdapp { +export default class Bytomdapp extends EventEmitter { constructor(_stream, _options) { + super(); // currentVersion = parseFloat(_options.version) stream = _stream resolvers = [] @@ -77,6 +78,8 @@ export default class Bytomdapp { enable(){ return _send(MsgTypes.ENABLE) .then(async default_account =>{ + super.emit(MsgTypes.ACCOUNT_CHANGED, [default_account]) + this.default_account = default_account; this.defaultAccount = default_account; return default_account; @@ -86,6 +89,8 @@ export default class Bytomdapp { disable(){ return _send(MsgTypes.DISABLE) .then(async (res) =>{ + super.emit(MsgTypes.ACCOUNT_CHANGED, []) + this.default_account = ''; this.defaultAccount = ''; return res; @@ -94,7 +99,10 @@ export default class Bytomdapp { //v1.4.0 setChain(params) { - return _send(MsgTypes.SETCHAIN, params) + return _send(MsgTypes.SETCHAIN, params).then(async (res) =>{ + super.emit(MsgTypes.NET_TYPE_CHANGED, params) + return res; + }) } sendTransaction(params) { @@ -113,6 +121,10 @@ export default class Bytomdapp { return _send(MsgTypes.SIGNTRANSACTION, params) } + on (eventName, listener) { + return super.on(eventName, listener) + } + //v1.0.0 send_transaction(params) { diff --git a/src/inject.js b/src/inject.js index 5902cf7..356da22 100644 --- a/src/inject.js +++ b/src/inject.js @@ -30,7 +30,25 @@ class Inject { msg.hasOwnProperty('type') && msg.type === MsgTypes.UPDATE_BYTOM ) { - window.bytom[msg.payload.type] = msg.payload.value + const array = msg.payload; + for(let p of array){ + window.bytom[p.type] = p.value + switch (p.type){ + case 'default_account':{ + window.bytom.emit(MsgTypes.ACCOUNT_CHANGED, [p.value]) + break + } + case 'net':{ + window.bytom.emit(MsgTypes.NETWORK_CHANGED, p.value) + break + } + case 'chain':{ + window.bytom.emit(MsgTypes.NET_TYPE_CHANGED, p.value) + break + } + + } + } } }) diff --git a/src/manifest.js b/src/manifest.js index ea4b9f9..8f87fc2 100644 --- a/src/manifest.js +++ b/src/manifest.js @@ -2,7 +2,7 @@ module.exports = { manifest_version: 2, name: 'Byone', description: 'Bytom Wallet Chrome extension.', - version: '3.0.5', + version: '3.0.6', author: 'Bytom frontend, zhitinglin', web_accessible_resources: ['js/inject.js'], browser_action: { diff --git a/src/messages/types.js b/src/messages/types.js index f21f709..1b1b81b 100644 --- a/src/messages/types.js +++ b/src/messages/types.js @@ -24,3 +24,11 @@ export const REQUEST_ACCOUNT_LIST = 'accountList'; //Internal Message export const SET_PROMPT = 'setPrompt'; export const GET_PROMPT = 'getPrompt'; + +// Eventchanged +export const ACCOUNT_CHANGED = 'accountsChanged' +export const NETWORK_CHANGED = 'networkChanged' +export const NET_TYPE_CHANGED = 'chainChanged' +export const STORE_UPDATE = 'update'; + + diff --git a/updates.xml b/updates.xml index b14ded0..18f7226 100644 --- a/updates.xml +++ b/updates.xml @@ -1,6 +1,6 @@ - + - + \ No newline at end of file -- 2.11.0