diff --git a/src/js/controllers/addresses.js b/src/js/controllers/addresses.js index 3b2976f7d..981371b16 100644 --- a/src/js/controllers/addresses.js +++ b/src/js/controllers/addresses.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('addressesController', function($scope, $stateParams, $state, $timeout, $ionicHistory, $ionicScrollDelegate, configService, popupService, gettextCatalog, ongoingProcess, lodash, profileService, walletService, platformInfo) { +angular.module('copayApp.controllers').controller('addressesController', function($scope, $stateParams, $state, $timeout, $ionicHistory, $ionicScrollDelegate, configService, popupService, gettextCatalog, ongoingProcess, lodash, profileService, walletService, bwcError, platformInfo) { var UNUSED_ADDRESS_LIMIT = 5; var BALANCE_ADDRESS_LIMIT = 5; var config; @@ -20,7 +20,7 @@ angular.module('copayApp.controllers').controller('addressesController', functio walletService.getMainAddresses($scope.wallet, {}, function(err, addresses) { if (err) { ongoingProcess.set('gettingAddresses', false); - return popupService.showAlert(gettextCatalog.getString('Error'), err); + return popupService.showAlert(bwcError.msg(err, gettextCatalog.getString('Could not update wallet'))); } var allAddresses = addresses; @@ -28,7 +28,7 @@ angular.module('copayApp.controllers').controller('addressesController', functio walletService.getBalance($scope.wallet, {}, function(err, resp) { ongoingProcess.set('gettingAddresses', false); if (err) { - return popupService.showAlert(gettextCatalog.getString('Error'), err); + return popupService.showAlert(bwcError.msg(err, gettextCatalog.getString('Could not update wallet'))); } withBalance = resp.byAddress; diff --git a/src/js/controllers/copayers.js b/src/js/controllers/copayers.js index ab8e5e47a..f11b0267a 100644 --- a/src/js/controllers/copayers.js +++ b/src/js/controllers/copayers.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('copayersController', - function($scope, $log, $timeout, $stateParams, $state, $rootScope, $ionicHistory, appConfigService, lodash, profileService, walletService, popupService, platformInfo, gettextCatalog, ongoingProcess) { + function($scope, $log, $timeout, $stateParams, $state, $rootScope, $ionicHistory, appConfigService, lodash, profileService, walletService, popupService, bwcError, platformInfo, gettextCatalog, ongoingProcess) { var appName = appConfigService.userVisibleName; var appUrl = appConfigService.url; @@ -20,8 +20,7 @@ angular.module('copayApp.controllers').controller('copayersController', $log.debug('Updating wallet:' + $scope.wallet.name) walletService.getStatus($scope.wallet, {}, function(err, status) { if (err) { - $log.error(err); //TODO - return; + return popupService.showAlert(bwcError.msg(err, gettextCatalog.getString('Could not update wallet'))); } $scope.wallet.status = status; $scope.copayers = $scope.wallet.status.wallet.copayers; diff --git a/src/js/controllers/create.js b/src/js/controllers/create.js index a8f96c27b..1b44ae283 100644 --- a/src/js/controllers/create.js +++ b/src/js/controllers/create.js @@ -191,9 +191,7 @@ angular.module('copayApp.controllers').controller('createController', return; } - walletService.updateRemotePreferences(client, {}, function() { - $log.debug('Remote preferences saved for:' + client.credentials.walletId) - }); + walletService.updateRemotePreferences(client); if ($scope.seedSource.id == 'set') { profileService.setBackupFlag(client.credentials.walletId); diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js index 3d2be7700..3b1c96771 100644 --- a/src/js/controllers/import.js +++ b/src/js/controllers/import.js @@ -340,9 +340,7 @@ angular.module('copayApp.controllers').controller('importController', }; var finish = function(wallet) { - walletService.updateRemotePreferences(wallet, {}, function() { - $log.debug('Remote preferences saved for:' + wallet.credentials.walletId) - }); + walletService.updateRemotePreferences(wallet); profileService.setBackupFlag(wallet.credentials.walletId); if ($stateParams.fromOnboarding) { diff --git a/src/js/controllers/join.js b/src/js/controllers/join.js index bbeebf63a..74abe3228 100644 --- a/src/js/controllers/join.js +++ b/src/js/controllers/join.js @@ -169,9 +169,7 @@ angular.module('copayApp.controllers').controller('joinController', return; } - walletService.updateRemotePreferences(client, {}, function() { - $log.debug('Remote preferences saved for:' + client.credentials.walletId) - }); + walletService.updateRemotePreferences(client); $ionicHistory.removeBackView(); if (!client.isComplete()) { diff --git a/src/js/controllers/preferencesAltCurrency.js b/src/js/controllers/preferencesAltCurrency.js index 6e45f40bc..a6c56eab2 100644 --- a/src/js/controllers/preferencesAltCurrency.js +++ b/src/js/controllers/preferencesAltCurrency.js @@ -66,9 +66,7 @@ angular.module('copayApp.controllers').controller('preferencesAltCurrencyControl $ionicHistory.goBack(); saveLastUsed(newAltCurrency); - walletService.updateRemotePreferences(profileService.getWallets(), {}, function() { - $log.debug('Remote preferences saved'); - }); + walletService.updateRemotePreferences(profileService.getWallets()); }); }; diff --git a/src/js/controllers/preferencesFee.js b/src/js/controllers/preferencesFee.js index 7d047b671..8a7ca6761 100644 --- a/src/js/controllers/preferencesFee.js +++ b/src/js/controllers/preferencesFee.js @@ -28,7 +28,8 @@ angular.module('copayApp.controllers').controller('preferencesFeeController', fu feeService.getFeeLevels(function(err, levels) { $scope.loadingFee = false; if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), err); + //Error is already formatted + popupService.showAlert(err); return; } $scope.feeLevels = levels; diff --git a/src/js/controllers/preferencesLanguage.js b/src/js/controllers/preferencesLanguage.js index 204f47add..c8d14d30d 100644 --- a/src/js/controllers/preferencesLanguage.js +++ b/src/js/controllers/preferencesLanguage.js @@ -27,9 +27,7 @@ angular.module('copayApp.controllers').controller('preferencesLanguageController uxLanguage._set(newLang); configService.set(opts, function(err) { if (err) $log.warn(err); - walletService.updateRemotePreferences(profileService.getWallets(), {}, function() { - $log.debug('Remote preferences saved'); - }); + walletService.updateRemotePreferences(profileService.getWallets()); }); $ionicHistory.goBack(); diff --git a/src/js/controllers/preferencesUnit.js b/src/js/controllers/preferencesUnit.js index cb480d5f2..235deb3b2 100644 --- a/src/js/controllers/preferencesUnit.js +++ b/src/js/controllers/preferencesUnit.js @@ -33,9 +33,7 @@ angular.module('copayApp.controllers').controller('preferencesUnitController', f if (err) $log.warn(err); $ionicHistory.goBack(); - walletService.updateRemotePreferences(profileService.getWallets(), {}, function() { - $log.debug('Remote preferences saved'); - }); + walletService.updateRemotePreferences(profileService.getWallets()) }); }; diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index aac2df9bf..9ef5ce4a7 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('tabHomeController', - function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, bitpayCardService, startupService, addressbookService, feedbackService) { + function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, bitpayCardService, startupService, addressbookService, feedbackService, bwcError) { var wallet; var listeners = []; var notifications = []; @@ -208,8 +208,9 @@ angular.module('copayApp.controllers').controller('tabHomeController', lodash.each($scope.wallets, function(wallet) { walletService.getStatus(wallet, {}, function(err, status) { if (err) { - if (err === 'WALLET_NOT_REGISTERED') wallet.error = gettextCatalog.getString('Wallet not registered'); - else wallet.error = gettextCatalog.getString('Could not update');; + + wallet.error = (err === 'WALLET_NOT_REGISTERED') ? gettextCatalog.getString('Wallet not registered') : bwcError.msg(err); + $log.error(err); } else { wallet.error = null; diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index a7eb191cb..0ead93f4a 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -20,7 +20,12 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.generatingAddress = true; walletService.getAddress($scope.wallet, forceNew, function(err, addr) { $scope.generatingAddress = false; - if (err) popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err)); + + if (err) { + //Error is already formated + return popupService.showAlert(err); + } + $scope.addr = addr; if ($scope.walletAddrs[$scope.wallet.id]) $scope.walletAddrs[$scope.wallet.id] = addr; $timeout(function() { @@ -129,7 +134,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.updateCurrentWallet = function() { walletService.getStatus($scope.wallet, {}, function(err, status) { if (err) { - $log.error(err); + return popupService.showAlert(bwcError.msg(err, gettextCatalog.getString('Could not update wallet'))); } $timeout(function() { $scope.wallet = profileService.getWallet($scope.wallet.id); diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index d194b0dc3..4463e5a53 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabSendController', function($scope, $rootScope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService, platformInfo) { +angular.module('copayApp.controllers').controller('tabSendController', function($scope, $rootScope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService, platformInfo, bwcError, gettextCatalog) { var originalList; var CONTACTS_SHOW_LIMIT; @@ -128,13 +128,20 @@ angular.module('copayApp.controllers').controller('tabSendController', function( }); } + $scope.checkingBalanceError = false; $scope.checkingBalance = true; - var index = 0; + var index = 0, + errorShown = 0; lodash.each(wallets, function(w) { walletService.getStatus(w, {}, function(err, status) { + ++index; if (err && !status) { $log.error(err); + if (!errorShown++) popupService.showAlert(bwcError.msg(err, gettextCatalog.getString('Could not update wallet'))); + $scope.checkingBalanceError = true; + return; + } else if (status.availableBalanceSat > 0) { $scope.hasFunds = true; $rootScope.everHasFunds = true; diff --git a/src/js/controllers/walletDetails.js b/src/js/controllers/walletDetails.js index ed3f1d2bb..6892eceb0 100644 --- a/src/js/controllers/walletDetails.js +++ b/src/js/controllers/walletDetails.js @@ -60,7 +60,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun if (err === 'WALLET_NOT_REGISTERED') { $scope.walletNotRegistered = true; } else { - $scope.updateStatusError = bwcError.msg(err, gettextCatalog.getString('BWS Error')); + $scope.updateStatusError = bwcError.msg(err, gettextCatalog.getString('Could not update wallet')); } $scope.status = null; } else { diff --git a/src/js/services/emailService.js b/src/js/services/emailService.js index 4712c77e4..3c32e7c56 100644 --- a/src/js/services/emailService.js +++ b/src/js/services/emailService.js @@ -11,12 +11,8 @@ angular.module('copayApp.services').factory('emailService', function($log, confi return w.credentials.walletId; }); - lodash.each(wallets, function(w) { - walletService.updateRemotePreferences(w, { - email: opts.enabled ? opts.email : null - }, function(err) { - if (err) $log.warn(err); - }); + walletService.updateRemotePreferences(wallets, { + email: opts.enabled ? opts.email : null }); var config = configService.getSync(); diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index be65f46f7..3537a8a71 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -390,7 +390,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim function getNewTxs(newTxs, skip, cb) { getTxsFromServer(wallet, skip, endingTxid, requestLimit, function(err, res, shouldContinue) { if (err) { - $log.warn(bwcError.msg(err, 'BWS Error')); //TODO + $log.warn(bwcError.msg(err, 'Server Error')); //TODO if (err instanceof errors.CONNECTION_ERROR || (err.message && err.message.match(/5../))) { $log.info('Retrying history download in 5 secs...'); return $timeout(function() { @@ -654,20 +654,24 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim root.updateRemotePreferences = function(clients, prefs, cb) { prefs = prefs || {}; + cb = cb || function() {}; if (!lodash.isArray(clients)) clients = [clients]; - function updateRemotePreferencesFor(clients, prefs, cb) { + function updateRemotePreferencesFor(clients, prefs, next) { var wallet = clients.shift(); - if (!wallet) return cb(); + if (!wallet) return next(); $log.debug('Saving remote preferences', wallet.credentials.walletName, prefs); wallet.savePreferences(prefs, function(err) { - // we ignore errors here - if (err) $log.warn(err); - updateRemotePreferencesFor(clients, prefs, cb); + if (err) { + popupService.showAlert(bwcError.msg(err, gettextCatalog.getString('Could not save preferences on the server'))); + return next(err); + } + + updateRemotePreferencesFor(clients, prefs, next); }); }; @@ -678,9 +682,13 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim prefs.language = uxLanguage.getCurrentLanguage(); prefs.unit = config.unitCode; - updateRemotePreferencesFor(clients, prefs, function(err) { + updateRemotePreferencesFor(lodash.clone(clients), prefs, function(err) { if (err) return cb(err); + $log.debug('Remote preferences saved for' + lodash.map(clients, function(x) { + return x.credentials.walletId; + }).join(',')); + lodash.each(clients, function(c) { c.preferences = lodash.assign(prefs, c.preferences); }); diff --git a/www/views/tab-receive.html b/www/views/tab-receive.html index d07713685..a859e7743 100644 --- a/www/views/tab-receive.html +++ b/www/views/tab-receive.html @@ -40,7 +40,7 @@