Ref get/set fee level

This commit is contained in:
Gustavo Maximiliano Cortez 2016-02-22 19:56:53 -03:00
parent 4b1ca3bf5a
commit 4829b40250
No known key found for this signature in database
GPG Key ID: 15EDAD8D9F2EB1AF
11 changed files with 81 additions and 101 deletions

View File

@ -3,19 +3,35 @@
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Bitcoin Network Fee Policy'; goBackToState = 'preferencesGlobal'; noColor = true">
</div>
<div class="content preferences" ng-controller="preferencesFeeController as prefFee" ng-init="index.setFeesOpts()">
<div class="content preferences" ng-controller="preferencesFeeController as prefFee" ng-init="prefFee.init()">
<h4></h4>
<div class="preferences-fee" ng-show="prefFee.loading">
<div class="row p20 text-center">
<div class="columns large-12 medium-12 small-12 m10b">
<div class="spinner">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div>
<div class="size-12 text-gray m20t" translate>
Loading...
</div>
</div>
</div>
<ul class="no-bullet m0">
<li ng-repeat="fee in (index.network == 'livenet' ? index.feeLevels.livenet : index.feeLevels.testnet)"
<li ng-repeat="fee in (index.network == 'livenet' ? prefFee.feeLevels.livenet : prefFee.feeLevels.testnet)"
ng-click="prefFee.save(fee.level)">
{{index.feeOpts[fee.level]|translate}}
<i class="fi-check size-16 right" ng-show="index.currentFeeLevel == fee.level"></i>
{{prefFee.feeOpts[fee.level]|translate}}
<i class="fi-check size-16 right" ng-show="prefFee.currentFeeLevel == fee.level"></i>
</li>
</ul>
<div class="row m20t">
<div class="text-gray size-12 text-center" ng-repeat="fee in (index.network == 'livenet' ? index.feeLevels.livenet :
index.feeLevels.testnet)" ng-if="fee.level == index.currentFeeLevel">
<div class="text-gray size-12 text-center" ng-repeat="fee in (index.network == 'livenet' ? prefFee.feeLevels.livenet :
prefFee.feeLevels.testnet)" ng-if="fee.level == prefFee.currentFeeLevel">
<div ng-show="fee.nbBlocks">
<span translate>Average confirmation time: {{fee.nbBlocks * 10}} minutes</span>.
</div>

View File

@ -36,10 +36,9 @@
</ul>
<h4></h4>
<ul class="no-bullet m0 ">
<li ng-click="$root.go('preferencesFee')"
ng-show="(index.network == 'livenet' ? index.feeLevels.livenet : index.feeLevels.testnet)">
<li ng-click="$root.go('preferencesFee')">
<div class="right text-gray">
{{index.feeOpts[index.currentFeeLevel]|translate}}
{{prefGlobal.feeOpts[prefGlobal.currentFeeLevel]|translate}}
<i class="icon-arrow-right3 size-24"></i>
</div>
<div translate>Bitcoin Network Fee Policy</div>

View File

@ -358,9 +358,12 @@
<div class="pr p25b">
<h4 class="title m0">
<available-balance></available-balance>
<span
ng-show="home.lockedCurrentFeePerKb || home.blockUx || home.lockAmount"
class="text-gray" translate>Send All</span>
<a
ng-show="!home.lockedCurrentFeePerKb && index.feeToSendMaxStr && index.availableBalanceSat > 0 && !home.blockUx && !home.lockAmount"
ng-click="home.sendAll()"
ng-show="index.availableBalanceSat > 0 && !home.lockedCurrentFeePerKb && !home.blockUx && !home.lockAmount"
ng-click="home.sendAll(index.totalBytesToSendMax, index.availableBalanceSat)"
translate> Send All
</a>
<div ng-show="!home.paymentExpired && home._paypro">

View File

@ -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;
}

View File

@ -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;

View File

@ -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();
});
};

View File

@ -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;

View File

@ -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,

View File

@ -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
});

View File

@ -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) {

View File

@ -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);
}
};