Skip to content

Commit f448640

Browse files
authored
Merge pull request #10137 from gabrielbazan7/fix/import1
[FIX] import wallet with multiple accounts
2 parents 4bcbc88 + 7aec719 commit f448640

File tree

2 files changed

+68
-43
lines changed

2 files changed

+68
-43
lines changed

src/providers/key/key.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ export class KeyProvider {
2929
return this.persistenceProvider.getKeys().then(async keys => {
3030
this.keys = [];
3131
keys = keys ? keys : [];
32+
if (typeof keys === 'string') {
33+
try {
34+
keys = JSON.parse(keys);
35+
} catch (_) {
36+
this.logger.warn('Could not parse');
37+
}
38+
}
3239
keys.forEach(k => this.keys.push(this.Key.fromObj(k)));
3340
return Promise.resolve();
3441
});

src/providers/profile/profile.ts

Lines changed: 61 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -605,25 +605,23 @@ export class ProfileProvider {
605605
return this.askToEncryptKey(data.key).then(() => {
606606
this.onGoingProcessProvider.resume();
607607
const promises = [];
608-
609-
// Will publish once all wallets are binded.
610-
opts.skipEvent = true;
611-
612608
data.walletClients.forEach(walletClient => {
613-
promises.push(
614-
this.addAndBindWalletClient(walletClient, data.key, opts)
615-
);
609+
promises.push(this.addAndBindWalletClient(walletClient, opts));
616610
});
617-
return Promise.all(promises)
618-
.then(walletClients => {
619-
this.events.publish('Local/WalletListChange');
620-
return this.checkIfAlreadyExist(walletClients).then(() => {
621-
return Promise.resolve(_.compact(walletClients));
611+
return this.keyProvider.addKey(data.key).then(() => {
612+
return Promise.all(promises)
613+
.then(walletClients => {
614+
return this.storeProfileIfDirty().then(() => {
615+
this.events.publish('Local/WalletListChange');
616+
return this.checkIfAlreadyExist(walletClients).then(() => {
617+
return Promise.resolve(_.compact(walletClients));
618+
});
619+
});
620+
})
621+
.catch(() => {
622+
return Promise.reject('failed to bind wallets');
622623
});
623-
})
624-
.catch(() => {
625-
return Promise.reject('failed to bind wallets');
626-
});
624+
});
627625
});
628626
}
629627

@@ -662,7 +660,7 @@ export class ProfileProvider {
662660
}
663661

664662
// Adds and bind a new client to the profile
665-
private async addAndBindWalletClient(wallet, key, opts): Promise<any> {
663+
private async addAndBindWalletClient(wallet, opts): Promise<any> {
666664
if (!wallet || !wallet.credentials) {
667665
return Promise.reject(this.translate.instant('Could not access wallet'));
668666
}
@@ -673,20 +671,14 @@ export class ProfileProvider {
673671
return Promise.resolve();
674672
}
675673

676-
await this.keyProvider.addKey(key);
677-
678674
const skipKeyValidation: boolean = this.shouldSkipValidation(walletId);
679675
if (!skipKeyValidation) {
680676
this.logger.debug('Trying to runValidation: ' + walletId);
681677
this.runValidation(wallet);
682678
}
683679

684-
await this.bindWalletClient(wallet);
685-
686680
this.saveBwsUrl(walletId, opts);
687-
688-
return this.storeProfileIfDirty().then(() => {
689-
if (!opts.skipEvent) this.events.publish('Local/WalletListChange');
681+
return this.bindWalletClient(wallet).then(() => {
690682
return Promise.resolve(wallet);
691683
});
692684
}
@@ -769,11 +761,18 @@ export class ProfileProvider {
769761
this.onGoingProcessProvider.pause();
770762
return this.askToEncryptKey(data.key).then(() => {
771763
this.onGoingProcessProvider.resume();
772-
return this.addAndBindWalletClient(data.walletClient, data.key, {
773-
bwsurl: opts.bwsurl
774-
}).then(walletClient => {
775-
return this.checkIfAlreadyExist([].concat(walletClient)).then(() => {
776-
return Promise.resolve(walletClient);
764+
return this.keyProvider.addKey(data.key).then(() => {
765+
return this.addAndBindWalletClient(data.walletClient, {
766+
bwsurl: opts.bwsurl
767+
}).then(walletClient => {
768+
return this.storeProfileIfDirty().then(() => {
769+
this.events.publish('Local/WalletListChange');
770+
return this.checkIfAlreadyExist([].concat(walletClient)).then(
771+
() => {
772+
return Promise.resolve(walletClient);
773+
}
774+
);
775+
});
777776
});
778777
});
779778
});
@@ -1056,17 +1055,22 @@ export class ProfileProvider {
10561055
}
10571056
return reject(err);
10581057
}
1059-
this.addAndBindWalletClient(data.walletClient, data.key, {
1060-
bwsurl: opts.bwsurl
1061-
})
1062-
.then(walletClient => {
1063-
this.checkIfAlreadyExist([].concat(walletClient)).then(() => {
1064-
return resolve(walletClient);
1065-
});
1058+
this.keyProvider.addKey(data.key).then(() => {
1059+
this.addAndBindWalletClient(data.walletClient, {
1060+
bwsurl: opts.bwsurl
10661061
})
1067-
.catch(err => {
1068-
return reject(err);
1069-
});
1062+
.then(walletClient => {
1063+
return this.storeProfileIfDirty().then(() => {
1064+
this.events.publish('Local/WalletListChange');
1065+
this.checkIfAlreadyExist([].concat(walletClient)).then(() => {
1066+
return resolve(walletClient);
1067+
});
1068+
});
1069+
})
1070+
.catch(err => {
1071+
return reject(err);
1072+
});
1073+
});
10701074
});
10711075
});
10721076
});
@@ -1352,8 +1356,15 @@ export class ProfileProvider {
13521356
this.onGoingProcessProvider.pause();
13531357
return this.askToEncryptKey(data.key, addingNewWallet).then(() => {
13541358
this.onGoingProcessProvider.resume();
1355-
return this.addAndBindWalletClient(data.walletClient, data.key, {
1356-
bwsurl: opts.bwsurl
1359+
return this.keyProvider.addKey(data.key).then(() => {
1360+
return this.addAndBindWalletClient(data.walletClient, {
1361+
bwsurl: opts.bwsurl
1362+
}).then(walletClient => {
1363+
return this.storeProfileIfDirty().then(() => {
1364+
this.events.publish('Local/WalletListChange');
1365+
return Promise.resolve(walletClient);
1366+
});
1367+
});
13571368
});
13581369
});
13591370
});
@@ -1368,8 +1379,15 @@ export class ProfileProvider {
13681379
this.onGoingProcessProvider.pause();
13691380
return this.askToEncryptKey(data.key, addingNewWallet).then(() => {
13701381
this.onGoingProcessProvider.resume();
1371-
return this.addAndBindWalletClient(data.walletClient, data.key, {
1372-
bwsurl: opts.bwsurl
1382+
return this.keyProvider.addKey(data.key).then(() => {
1383+
return this.addAndBindWalletClient(data.walletClient, {
1384+
bwsurl: opts.bwsurl
1385+
}).then(walletClient => {
1386+
return this.storeProfileIfDirty().then(() => {
1387+
this.events.publish('Local/WalletListChange');
1388+
return Promise.resolve(walletClient);
1389+
});
1390+
});
13731391
});
13741392
});
13751393
});

0 commit comments

Comments
 (0)