1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Add PreferencesController#setAddresses to update ids

This commit is contained in:
Whymarrh Whitby 2018-04-19 01:03:51 -02:30
parent cbe4d0d88c
commit c54e4c7191
3 changed files with 66 additions and 8 deletions

View File

@ -63,6 +63,16 @@ class PreferencesController {
this.store.updateState({ currentLocale: key }) this.store.updateState({ currentLocale: key })
} }
setAddresses (addresses) {
const oldIdentities = this.store.getState().identities
const identities = addresses.reduce((ids, address, index) => {
const oldId = oldIdentities[address] || {}
ids[address] = {name: `Account ${index + 1}`, address, ...oldId}
return ids
}, {})
this.store.updateState({ identities })
}
/** /**
* Setter for the `selectedAddress` property * Setter for the `selectedAddress` property
* *

View File

@ -434,7 +434,9 @@ module.exports = class MetamaskController extends EventEmitter {
} else { } else {
vault = await this.keyringController.createNewVaultAndKeychain(password) vault = await this.keyringController.createNewVaultAndKeychain(password)
this.selectFirstIdentity(vault) const accounts = await this.keyringController.getAccounts()
this.preferencesController.setAddresses(accounts)
this.selectFirstIdentity()
} }
release() release()
} catch (err) { } catch (err) {
@ -454,7 +456,9 @@ module.exports = class MetamaskController extends EventEmitter {
const release = await this.createVaultMutex.acquire() const release = await this.createVaultMutex.acquire()
try { try {
const vault = await this.keyringController.createNewVaultAndRestore(password, seed) const vault = await this.keyringController.createNewVaultAndRestore(password, seed)
this.selectFirstIdentity(vault) const accounts = await this.keyringController.getAccounts()
this.preferencesController.setAddresses(accounts)
this.selectFirstIdentity()
release() release()
return vault return vault
} catch (err) { } catch (err) {
@ -472,12 +476,10 @@ module.exports = class MetamaskController extends EventEmitter {
*/ */
/** /**
* Retrieves the first Identiy from the passed Vault and selects the related address * Sets the first address in the state to the selected address
*
* @param {} vault
*/ */
selectFirstIdentity (vault) { selectFirstIdentity () {
const { identities } = vault const { identities } = this.preferencesController.store.getState()
const address = Object.keys(identities)[0] const address = Object.keys(identities)[0]
this.preferencesController.setSelectedAddress(address) this.preferencesController.setSelectedAddress(address)
} }
@ -503,13 +505,15 @@ module.exports = class MetamaskController extends EventEmitter {
await this.verifySeedPhrase() await this.verifySeedPhrase()
this.preferencesController.setAddresses(newAccounts)
newAccounts.forEach((address) => { newAccounts.forEach((address) => {
if (!oldAccounts.includes(address)) { if (!oldAccounts.includes(address)) {
this.preferencesController.setSelectedAddress(address) this.preferencesController.setSelectedAddress(address)
} }
}) })
return keyState const {identities} = this.preferencesController.store.getState()
return {...keyState, identities}
} }
/** /**

View File

@ -8,6 +8,50 @@ describe('preferences controller', function () {
preferencesController = new PreferencesController() preferencesController = new PreferencesController()
}) })
describe('setAddresses', function () {
it('should keep a map of addresses to names and addresses in the store', function () {
preferencesController.setAddresses([
'0xda22le',
'0x7e57e2',
])
const {identities} = preferencesController.store.getState()
assert.deepEqual(identities, {
'0xda22le': {
name: 'Account 1',
address: '0xda22le',
},
'0x7e57e2': {
name: 'Account 2',
address: '0x7e57e2',
},
})
})
it('should replace its list of addresses', function () {
preferencesController.setAddresses([
'0xda22le',
'0x7e57e2',
])
preferencesController.setAddresses([
'0xda22le77',
'0x7e57e277',
])
const {identities} = preferencesController.store.getState()
assert.deepEqual(identities, {
'0xda22le77': {
name: 'Account 1',
address: '0xda22le77',
},
'0x7e57e277': {
name: 'Account 2',
address: '0x7e57e277',
},
})
})
})
describe('getTokens', function () { describe('getTokens', function () {
it('should return an empty list initially', async function () { it('should return an empty list initially', async function () {
await preferencesController.setSelectedAddress('0x7e57e2') await preferencesController.setSelectedAddress('0x7e57e2')