diff options
author | Frankie <frankie.diamond@gmail.com> | 2017-02-02 05:05:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-02 05:05:58 +0800 |
commit | 54b1339f6a2a8a66a01ac224c6dbb569911cfc9a (patch) | |
tree | 675d11564292df8871ceea4b3e4a883b0ed2da57 /app | |
parent | ce0c3ed03c20eb0b7438cb9add7cbce490d7de64 (diff) | |
parent | 25c5a4462369f5209924a99cbe0395da13a6a0a7 (diff) | |
download | tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.tar tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.tar.gz tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.tar.bz2 tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.tar.lz tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.tar.xz tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.tar.zst tangerine-wallet-browser-54b1339f6a2a8a66a01ac224c6dbb569911cfc9a.zip |
Merge branch 'dev' into messageManagerCleanUp
Diffstat (limited to 'app')
-rw-r--r-- | app/scripts/keyring-controller.js | 68 | ||||
-rw-r--r-- | app/scripts/metamask-controller.js | 51 |
2 files changed, 69 insertions, 50 deletions
diff --git a/app/scripts/keyring-controller.js b/app/scripts/keyring-controller.js index 111f679c8..12e3d2844 100644 --- a/app/scripts/keyring-controller.js +++ b/app/scripts/keyring-controller.js @@ -26,11 +26,16 @@ class KeyringController extends EventEmitter { constructor (opts) { super() const initState = opts.initState || {} + this.keyringTypes = keyringTypes this.store = new ObservableStore(initState) + this.memStore = new ObservableStore({ + keyringTypes: this.keyringTypes.map(krt => krt.type), + keyrings: [], + identities: {}, + }) this.configManager = opts.configManager this.ethStore = opts.ethStore this.encryptor = encryptor - this.keyringTypes = keyringTypes this.keyrings = [] this.identities = {} // Essentially a name hash this.getNetwork = opts.getNetwork @@ -66,28 +71,21 @@ class KeyringController extends EventEmitter { // in this class, but will need to be Promisified when we move our // persistence to an async model. getState () { - return Promise.all(this.keyrings.map(this.displayForKeyring)) - .then((displayKeyrings) => { - const state = this.store.getState() - // old wallet - const wallet = this.configManager.getWallet() - return { - // computed - isInitialized: (!!wallet || !!state.vault), - isUnlocked: (!!this.password), - keyrings: displayKeyrings, - // hard coded - keyringTypes: this.keyringTypes.map(krt => krt.type), - // memStore - identities: this.identities, - // configManager - seedWords: this.configManager.getSeedWords(), - isDisclaimerConfirmed: this.configManager.getConfirmedDisclaimer(), - currentFiat: this.configManager.getCurrentFiat(), - conversionRate: this.configManager.getConversionRate(), - conversionDate: this.configManager.getConversionDate(), - } - }) + + // old wallet + const memState = this.memStore.getState() + const result = { + // computed + isUnlocked: (!!this.password), + // memStore + keyringTypes: memState.keyringTypes, + identities: memState.identities, + keyrings: memState.keyrings, + // configManager + seedWords: this.configManager.getSeedWords(), + isDisclaimerConfirmed: this.configManager.getConfirmedDisclaimer(), + } + return result } // Create New Vault And Keychain @@ -164,6 +162,7 @@ class KeyringController extends EventEmitter { setLocked () { this.password = null this.keyrings = [] + this._updateMemStoreKeyrings() return this.fullUpdate() } @@ -245,7 +244,9 @@ class KeyringController extends EventEmitter { walletNicknames[hexAddress] = label this.store.updateState({ walletNicknames }) // update state on memStore - this.identities[hexAddress].name = label + const identities = this.memStore.getState().identities + identities[hexAddress].name = label + this.memStore.updateState({ identities }) return Promise.resolve(label) } catch (err) { return Promise.reject(err) @@ -372,14 +373,16 @@ class KeyringController extends EventEmitter { // Takes an address, and assigns it an incremented nickname, persisting it. createNickname (address) { const hexAddress = normalizeAddress(address) - const currentIdentityCount = Object.keys(this.identities).length + 1 + const identities = this.memStore.getState().identities + const currentIdentityCount = Object.keys(identities).length + 1 const nicknames = this.store.getState().walletNicknames || {} const existingNickname = nicknames[hexAddress] const name = existingNickname || `Account ${currentIdentityCount}` - this.identities[hexAddress] = { + identities[hexAddress] = { address: hexAddress, name, } + this.memStore.updateState({ identities }) return this.saveAccountLabel(hexAddress, name) } @@ -568,8 +571,19 @@ class KeyringController extends EventEmitter { this.ethStore.removeAccount(address) }) + // clear keyrings from memory this.keyrings = [] - this.identities = {} + this.memStore.updateState({ + keyrings: [], + identities: {}, + }) + } + + _updateMemStoreKeyrings() { + Promise.all(this.keyrings.map(this.displayForKeyring)) + .then((keyrings) => { + this.memStore.updateState({ keyrings }) + }) } } diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 84ac2130e..fb5234c24 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -166,23 +166,31 @@ module.exports = class MetamaskController extends EventEmitter { // getState () { - return this.keyringController.getState() - .then((keyringControllerState) => { - return extend( - this.state, - this.ethStore.getState(), - this.configManager.getConfig(), - this.txManager.getState(), - this.messageManager.getState(), - keyringControllerState, - this.preferencesController.store.getState(), - this.noticeController.getState(), - { - shapeShiftTxList: this.configManager.getShapeShiftTxList(), - lostAccounts: this.configManager.getLostAccounts(), - } - ) - }) + + const wallet = this.configManager.getWallet() + const vault = this.keyringController.store.getState().vault + const isInitialized = (!!wallet || !!vault) + return extend( + { + isInitialized, + }, + this.state, + this.ethStore.getState(), + this.txManager.getState(), + this.messageManager.getState(), + this.keyringController.getState(), + this.preferencesController.store.getState(), + this.noticeController.getState(), + // config manager + this.configManager.getConfig(), + { + shapeShiftTxList: this.configManager.getShapeShiftTxList(), + lostAccounts: this.configManager.getLostAccounts(), + currentFiat: this.configManager.getCurrentFiat(), + conversionRate: this.configManager.getConversionRate(), + conversionDate: this.configManager.getConversionDate(), + } + ) } // @@ -198,7 +206,7 @@ module.exports = class MetamaskController extends EventEmitter { return { // etc - getState: nodeify(this.getState.bind(this)), + getState: (cb) => cb(null, this.getState()), setRpcTarget: this.setRpcTarget.bind(this), setProviderType: this.setProviderType.bind(this), useEtherscanProvider: this.useEtherscanProvider.bind(this), @@ -294,11 +302,8 @@ module.exports = class MetamaskController extends EventEmitter { ) } - sendUpdate () { - this.getState() - .then((state) => { - this.emit('update', state) - }) + sendUpdate () { + this.emit('update', this.getState()) } // |