diff --git a/js/controllers/import.js b/js/controllers/import.js index a1991d159..c8f16c857 100644 --- a/js/controllers/import.js +++ b/js/controllers/import.js @@ -15,20 +15,32 @@ angular.module('copayApp.controllers').controller('ImportController', var _importBackup = function(encryptedObj) { Passphrase.getBase64Async($scope.password, function(passphrase) { updateStatus('Importing wallet - Setting things up...'); - var w = walletFactory.import(encryptedObj, passphrase, function(err, w) { + var w, errMsg; + + try { + w = walletFactory.import(encryptedObj, passphrase); + + } catch (e) { + errMsg = e.message; + } + + if (!w) { + $scope.loading = false; + notification.error('Error', errMsg || 'Wrong password'); + $rootScope.$digest(); + return; + } + + w.updateIndexes(function(err) { + updateStatus('Importing wallet - We are almost there...'); if (err) { $scope.loading = false; - notification.error('Error', err.errMsg || 'Wrong password'); - $rootScope.$digest(); - return; + notification.error('Error', 'Error updating indexes: ' + err); } $rootScope.wallet = w; controllerUtils.startNetwork($rootScope.wallet, $scope); }); - - w.on('updatingIndexes', function(){ - updateStatus('Importing wallet - We are almost there...'); - }); + }); }; @@ -54,6 +66,8 @@ angular.module('copayApp.controllers').controller('ImportController', }; $scope.import = function(form) { + $scope.loading = true; + if (form.$invalid) { $scope.loading = false; notification.error('Error', 'There is an error in the form.'); @@ -71,8 +85,6 @@ angular.module('copayApp.controllers').controller('ImportController', return; } - $scope.loading = true; - if (backupFile) { reader.readAsBinaryString(backupFile); } else { diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index d34943848..fec67735b 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -755,18 +755,19 @@ Wallet.prototype.createTxSync = function(toAddress, amountSatStr, comment, utxos Wallet.prototype.updateIndexes = function(callback) { var self = this; var start = self.publicKeyRing.indexes.changeIndex; + self.log('Updating indexes...'); self.indexDiscovery(start, true, 20, function(err, changeIndex) { if (err) return callback(err); if (changeIndex != -1) self.publicKeyRing.indexes.changeIndex = changeIndex + 1; - self.emit('updatingIndexes'); start = self.publicKeyRing.indexes.receiveIndex; self.indexDiscovery(start, false, 20, function(err, receiveIndex) { if (err) return callback(err); if (receiveIndex != -1) self.publicKeyRing.indexes.receiveIndex = receiveIndex + 1; + self.log('Indexes updated'); self.emit('publicKeyRingUpdated'); self.store(); callback(); diff --git a/js/models/core/WalletFactory.js b/js/models/core/WalletFactory.js index b593d3e17..e45259d5d 100644 --- a/js/models/core/WalletFactory.js +++ b/js/models/core/WalletFactory.js @@ -74,16 +74,11 @@ WalletFactory.prototype.fromEncryptedObj = function(base64, password) { return w; }; -WalletFactory.prototype.import = function(base64, password, cb) { +WalletFactory.prototype.import = function(base64, password) { var self = this; var w = self.fromEncryptedObj(base64, password); - if (!w) return cb(new Error('wrong password')); - w.updateIndexes(function(err) { - if (err) return cb(err); - self.log('Indexes updated'); - cb(null, w); - }); + if (!w) throw new Error('Wrong password'); return w; }