diff --git a/public/views/preferencesFee.html b/public/views/preferencesFee.html index 9476cf1a6..c411813cd 100644 --- a/public/views/preferencesFee.html +++ b/public/views/preferencesFee.html @@ -3,19 +3,35 @@ ng-include="'views/includes/topbar.html'" ng-init="titleSection='Bitcoin Network Fee Policy'; goBackToState = 'preferencesGlobal'; noColor = true"> -
+

+
+
+
+
+
+
+
+
+
+
+
+
+ Loading... +
+
+
-
+
Average confirmation time: {{fee.nbBlocks * 10}} minutes.
diff --git a/public/views/preferencesGlobal.html b/public/views/preferencesGlobal.html index d690ca4cf..373f49f20 100644 --- a/public/views/preferencesGlobal.html +++ b/public/views/preferencesGlobal.html @@ -36,10 +36,9 @@

    -
  • +
  • - {{index.feeOpts[index.currentFeeLevel]|translate}} + {{prefGlobal.feeOpts[prefGlobal.currentFeeLevel]|translate}}
    Bitcoin Network Fee Policy
    diff --git a/public/views/walletHome.html b/public/views/walletHome.html index ee316456e..7dd1ed9d6 100644 --- a/public/views/walletHome.html +++ b/public/views/walletHome.html @@ -358,9 +358,12 @@

    + Send All Send All
    diff --git a/src/css/main.css b/src/css/main.css index 68355d572..df67974ac 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -1477,7 +1477,8 @@ input.ng-invalid-match, input.ng-invalid-match:focus { #history .spinner > div, #receive .spinner > div, -.copayers .spinner > div +.copayers .spinner > div, +.preferences-fee .spinner > div { background-color: #7A8C9E; } diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index d4b07bccd..9809b9c59 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, bwcService, pushNotificationsService, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettext, gettextCatalog, amMoment, nodeWebkit, addonManager, feeService, isChromeApp, bwsError, txFormatService, uxLanguage, $state, glideraService, isMobile, addressbookService) { +angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, bwcService, pushNotificationsService, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettext, gettextCatalog, amMoment, nodeWebkit, addonManager, isChromeApp, bwsError, txFormatService, uxLanguage, $state, glideraService, isMobile, addressbookService) { var self = this; var SOFT_CONFIRMATION_LIMIT = 12; var errors = bwcService.getErrors(); @@ -45,7 +45,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r ret.txTemplateUrl = addonManager.txTemplateUrl() || 'views/includes/transaction.html'; ret.tab = 'walletHome'; - ret.feeOpts = feeService.feeOpts; var vanillaScope = ret; @@ -359,10 +358,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r $log.debug('Wallet Status:', walletStatus); self.setPendingTxps(walletStatus.pendingTxps); - if (!self.feeLevels) { - self.setFeesOpts(); - } - // Status Shortcuts self.walletName = walletStatus.wallet.name; self.walletSecret = walletStatus.wallet.secret; @@ -390,50 +385,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.setSpendUnconfirmed = function(spendUnconfirmed) { self.spendUnconfirmed = spendUnconfirmed || configService.getSync().wallet.spendUnconfirmed; - }; - - self.setFeeAndSendMax = function(cb) { - - self.availableMaxBalance = null; - self.currentFeePerKb = null; - - // Set Send max - if (self.currentFeeLevel && self.totalBytesToSendMax) { - feeService.getCurrentFeeValue(self.currentFeeLevel, function(err, feePerKb) { - - // KB to send max - var feeToSendMaxSat = parseInt(((self.totalBytesToSendMax * feePerKb) / 1000.).toFixed(0)); - self.currentFeePerKb = feePerKb; - - if (self.availableBalanceSat > feeToSendMaxSat) { - self.availableMaxBalance = strip((self.availableBalanceSat - feeToSendMaxSat) * self.satToUnit); - self.feeToSendMaxStr = profileService.formatAmount(feeToSendMaxSat) + ' ' + self.unitName; - } else { - self.feeToSendMaxStr = null; - } - - if (cb) return cb(self.currentFeePerKb, self.availableMaxBalance, self.feeToSendMaxStr); - }); - } - - }; - - self.setCurrentFeeLevel = function(level) { - self.currentFeeLevel = level || configService.getSync().wallet.settings.feeLevel || 'normal'; - self.setFeeAndSendMax(); - }; - - - self.setFeesOpts = function() { - var fc = profileService.focusedClient; - if (!fc) return; - $timeout(function() { - feeService.getFeeLevels(function(levels) { - self.feeLevels = levels; - $rootScope.$apply(); - }); - }); - }; + }; self.updateBalance = function() { var fc = profileService.focusedClient; @@ -666,11 +618,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.alternativeName = config.alternativeName; self.alternativeIsoCode = config.alternativeIsoCode; - // Set fee level and max value to send all - if (!self.currentFeeLevel) { - self.setCurrentFeeLevel(); - } - // Check address addressService.isUsed(self.walletId, balance.byAddress, function(err, used) { if (used) { @@ -1251,14 +1198,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.updateAll(); }); - $rootScope.$on('Local/FeeLevelUpdated', function(event, level) { - self.setCurrentFeeLevel(level); - }); - - $rootScope.$on('Local/SetFeeSendMax', function(event, cb) { - self.setFeeAndSendMax(cb); - }); - $rootScope.$on('Local/ProfileBound', function() { storageService.getRemotePrefsStoredFlag(function(err, val) { if (err || val) return; diff --git a/src/js/controllers/preferencesFee.js b/src/js/controllers/preferencesFee.js index 7e8cfd98f..9093dc236 100644 --- a/src/js/controllers/preferencesFee.js +++ b/src/js/controllers/preferencesFee.js @@ -1,9 +1,22 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesFeeController', - function($rootScope, configService) { + function($scope, $rootScope, configService, feeService) { + + this.init = function() { + var self = this; + this.loading = true; + feeService.getFeeLevels(function(levels) { + self.loading = false; + self.feeOpts = feeService.feeOpts; + self.currentFeeLevel = feeService.getCurrentFeeLevel(); + self.feeLevels = levels; + $scope.$apply(); + }); + }; this.save = function(newFee) { + var self = this; var opts = { wallet: { settings: { @@ -11,10 +24,10 @@ angular.module('copayApp.controllers').controller('preferencesFeeController', } } }; - $rootScope.$emit('Local/FeeLevelUpdated', newFee); configService.set(opts, function(err) { if (err) $log.debug(err); + self.currentFeeLevel = feeService.getCurrentFeeLevel(); }); }; diff --git a/src/js/controllers/preferencesGlobal.js b/src/js/controllers/preferencesGlobal.js index d7ce7bf93..768b587a6 100644 --- a/src/js/controllers/preferencesGlobal.js +++ b/src/js/controllers/preferencesGlobal.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesGlobalController', - function($scope, $rootScope, $log, configService, uxLanguage, pushNotificationsService, profileService) { + function($scope, $rootScope, $log, configService, uxLanguage, pushNotificationsService, profileService, feeService) { this.init = function() { var config = configService.getSync(); @@ -11,6 +11,8 @@ angular.module('copayApp.controllers').controller('preferencesGlobalController', name: config.wallet.settings.alternativeName, isoCode: config.wallet.settings.alternativeIsoCode }; + this.feeOpts = feeService.feeOpts; + this.currentFeeLevel = feeService.getCurrentFeeLevel(); $scope.spendUnconfirmed = config.wallet.spendUnconfirmed; $scope.glideraEnabled = config.glidera.enabled; $scope.glideraTestnet = config.glidera.testnet; diff --git a/src/js/controllers/sellGlidera.js b/src/js/controllers/sellGlidera.js index 3f4f9f612..49c1110cf 100644 --- a/src/js/controllers/sellGlidera.js +++ b/src/js/controllers/sellGlidera.js @@ -11,7 +11,6 @@ angular.module('copayApp.controllers').controller('sellGlideraController', this.error = null; this.loading = null; this.currentSpendUnconfirmed = config.wallet.spendUnconfirmed; - this.currentFeeLevel = config.wallet.settings.feeLevel || 'normal'; var fc; window.ignoreMobilePause = true; @@ -151,7 +150,7 @@ angular.module('copayApp.controllers').controller('sellGlideraController', } var amount = parseInt((self.sellPrice.qty * 100000000).toFixed(0)); - feeService.getCurrentFeeValue(self.currentFeeLevel, function(err, feePerKb) { + feeService.getCurrentFeeValue(function(err, feePerKb) { if (err) $log.debug(err); fc.sendTxProposal({ toAddress: sellAddress, diff --git a/src/js/controllers/walletHome.js b/src/js/controllers/walletHome.js index 144f6867c..528d1e305 100644 --- a/src/js/controllers/walletHome.js +++ b/src/js/controllers/walletHome.js @@ -847,7 +847,6 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi var fc = profileService.focusedClient; var unitToSat = this.unitToSatoshi; var currentSpendUnconfirmed = configWallet.spendUnconfirmed; - var currentFeeLevel = walletSettings.feeLevel || 'normal'; var outputs = []; @@ -1230,18 +1229,30 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi this.setForm(null, amount, null); }; - this.sendAll = function() { + this.sendAll = function(totalBytesToSendMax, availableBalanceSat) { var self = this; - self.error = null; - self.setOngoingProcess(gettextCatalog.getString('Calculating fee')); - $rootScope.$emit('Local/SetFeeSendMax', function(currentFeePerKb, availableMaxBalance, feeToSendMaxStr) { + var availableMaxBalance; + var feeToSendMaxStr; + this.error = null; + this.setOngoingProcess(gettextCatalog.getString('Calculating fee')); + + feeService.getCurrentFeeValue(function(err, feePerKb) { self.setOngoingProcess(); - if (lodash.isNull(currentFeePerKb)) { - self.error = gettext('Could not calculate fee'); - $scope.$apply(); + if (err || lodash.isNull(feePerKb)) { + self.error = gettext('Could not get fee value'); return; } - self.lockedCurrentFeePerKb = currentFeePerKb; + + var feeToSendMaxSat = parseInt(((totalBytesToSendMax * feePerKb) / 1000.).toFixed(0)); + if (availableBalanceSat > feeToSendMaxSat) { + self.lockedCurrentFeePerKb = feePerKb; + availableMaxBalance = strip((availableBalanceSat - feeToSendMaxSat) * self.satToUnit); + feeToSendMaxStr = profileService.formatAmount(feeToSendMaxSat) + ' ' + self.unitName; + } else { + self.error = gettext('Not enought funds for fee'); + return; + } + var msg = gettextCatalog.getString("{{fee}} will be deducted for bitcoin networking fees", { fee: feeToSendMaxStr }); diff --git a/src/js/services/feeService.js b/src/js/services/feeService.js index f2316f733..fccfe9b90 100644 --- a/src/js/services/feeService.js +++ b/src/js/services/feeService.js @@ -10,10 +10,13 @@ angular.module('copayApp.services').factory('feeService', function($log, profile economy: gettextCatalog.getString('Economy') }; - root.getCurrentFeeValue = function(currentSendFeeLevel, cb) { + root.getCurrentFeeLevel = function() { + return configService.getSync().wallet.settings.feeLevel || 'normal'; + }; + + root.getCurrentFeeValue = function(cb) { var fc = profileService.focusedClient; - var config = configService.getSync().wallet.settings; - var feeLevel = currentSendFeeLevel || config.feeLevel || 'normal'; + var feeLevel = root.getCurrentFeeLevel(); // static fee var fee = 10000; fc.getFeeLevels(fc.credentials.network, function(err, levels) { @@ -30,8 +33,7 @@ angular.module('copayApp.services').factory('feeService', function($log, profile root.getFeeLevels = function(cb) { var fc = profileService.focusedClient; - var config = configService.getSync().wallet.settings; - var unitName = config.unitName; + var unitName = configService.getSync().wallet.settings.unitName; fc.getFeeLevels('livenet', function(errLivenet, levelsLivenet) { fc.getFeeLevels('testnet', function(errTestnet, levelsTestnet) { diff --git a/src/js/services/txService.js b/src/js/services/txService.js index 97cb78089..4b3728bb0 100644 --- a/src/js/services/txService.js +++ b/src/js/services/txService.js @@ -92,18 +92,13 @@ angular.module('copayApp.services').factory('txService', function($rootScope, pr root.createTx = function(opts, cb) { var fc = profileService.focusedClient; - var config = configService.getSync(); - var configWallet = config.wallet; - var walletSettings = configWallet.settings; - - var currentSpendUnconfirmed = configWallet.spendUnconfirmed; - var currentFeeLevel = walletSettings.feeLevel || 'normal'; + var currentSpendUnconfirmed = configService.getSync().wallet.spendUnconfirmed; var getFee = function(cb) { if (opts.lockedCurrentFeePerKb) { cb(null, opts.lockedCurrentFeePerKb); } else { - feeService.getCurrentFeeValue(currentFeeLevel, cb); + feeService.getCurrentFeeValue(cb); } };