diff options
keyring - synchronous getState
Diffstat (limited to 'app/scripts/keyring-controller.js')
-rw-r--r-- | app/scripts/keyring-controller.js | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/app/scripts/keyring-controller.js b/app/scripts/keyring-controller.js index f7a4e4010..3737d1b55 100644 --- a/app/scripts/keyring-controller.js +++ b/app/scripts/keyring-controller.js @@ -2,6 +2,7 @@ const ethUtil = require('ethereumjs-util') const BN = ethUtil.BN const bip39 = require('bip39') const EventEmitter = require('events').EventEmitter +const extend = require('xtend') const ObservableStore = require('obs-store') const filter = require('promise-filter') const encryptor = require('browser-passworder') @@ -32,6 +33,7 @@ class KeyringController extends EventEmitter { super() const initState = opts.initState || {} this.store = new ObservableStore(initState) + this.memStore = new ObservableStore({}) this.configManager = opts.configManager this.ethStore = opts.ethStore this.encryptor = encryptor @@ -74,30 +76,27 @@ 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(), - // messageManager - unconfMsgs: messageManager.unconfirmedMsgs(), - messages: messageManager.getMsgList(), - } + const state = this.store.getState() + // old wallet + const wallet = this.configManager.getWallet() + const memState = this.memStore.getState() + return extend(memState, { + // computed + isInitialized: (!!wallet || !!state.vault), + isUnlocked: (!!this.password), + // 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(), + // messageManager + unconfMsgs: messageManager.unconfirmedMsgs(), + messages: messageManager.getMsgList(), }) } @@ -164,6 +163,7 @@ class KeyringController extends EventEmitter { setLocked () { this.password = null this.keyrings = [] + this._updateMemStoreKeyrings() return this.fullUpdate() } @@ -639,6 +639,13 @@ class KeyringController extends EventEmitter { this.identities = {} } + _updateMemStoreKeyrings() { + Promise.all(this.keyrings.map(this.displayForKeyring)) + .then((keyrings) => { + this.memStore.updateState({ keyrings }) + }) + } + } module.exports = KeyringController |