Wallet/src/js/controllers/preferencesFee.js

157 lines
4.4 KiB
JavaScript
Raw Normal View History

'use strict';
angular.module('copayApp.controllers').controller('preferencesFeeController', function($scope, $q, $timeout, $ionicHistory, lodash, gettextCatalog, configService, feeService, ongoingProcess, popupService, $ionicNavBarDelegate) {
2016-06-10 18:41:52 -03:00
$scope.save = function(newFee) {
2017-07-07 10:26:31 -03:00
2017-06-21 17:09:33 -03:00
$scope.currentFeeLevel = newFee;
2017-07-07 10:26:31 -03:00
if ($scope.currentFeeLevel != 'custom') updateCurrentValues();
else showCustomFeePrompt();
if ($scope.noSave) return;
2016-06-10 18:41:52 -03:00
var opts = {
wallet: {
settings: {
2017-01-10 10:23:01 -03:00
feeLevel: newFee
2016-06-10 18:41:52 -03:00
}
}
};
2016-06-10 18:41:52 -03:00
configService.set(opts, function(err) {
if (err) $log.debug(err);
$timeout(function() {
$scope.$apply();
});
2016-06-10 18:41:52 -03:00
});
};
2017-01-10 10:23:01 -03:00
$scope.$on("$ionicView.beforeEnter", function(event, data) {
$scope.init();
});
$scope.$on("$ionicView.enter", function(event, data) {
$ionicNavBarDelegate.showBar(true);
});
$scope.init = function() {
2017-06-21 17:09:33 -03:00
$scope.network = $scope.network || 'livenet';
$scope.feeOpts = feeService.feeOpts;
2017-06-21 17:09:33 -03:00
$scope.currentFeeLevel = $scope.feeLevel || feeService.getCurrentFeeLevel();
2017-01-10 10:23:01 -03:00
$scope.loadingFee = true;
2017-11-23 15:08:55 +09:00
var btcFeePromise = $q(function(resolve, reject) {
feeService.getFeeLevels('btc', function(err, btcFeeLevels) {
if (err) {
reject(err);
} else {
resolve(btcFeeLevels);
}
});
});
var bchFeePromise = $q(function(resolve, reject) {
feeService.getFeeLevels('bch', function(err, bchFeeLevels) {
if (err) {
reject(err);
} else {
resolve(bchFeeLevels);
}
});
});
$q.all([btcFeePromise, bchFeePromise]).then(function(levels) {
$scope.loadingFee = false;
$scope.feeLevels = levels[0];
$scope.bchFeeLevels = levels[1];
updateCurrentValues();
$timeout(function() {
$scope.$apply();
});
}, function(err) {
2017-01-16 16:00:09 -03:00
popupService.showAlert(err);
2017-01-10 10:23:01 -03:00
return;
2017-06-23 10:24:14 -03:00
});
};
2017-01-10 10:23:01 -03:00
var updateCurrentValues = function() {
2017-01-10 10:31:53 -03:00
if (lodash.isEmpty($scope.feeLevels) || lodash.isEmpty($scope.currentFeeLevel)) return;
2017-06-21 17:09:33 -03:00
var value = lodash.find($scope.feeLevels[$scope.network], {
2017-01-10 10:23:01 -03:00
level: $scope.currentFeeLevel
});
2017-06-21 17:09:33 -03:00
if (lodash.isEmpty(value)) {
2017-11-23 15:08:55 +09:00
$scope.feePerSatByteBtc = $scope.currentFeeLevel == 'custom' ? $scope.feePerSatByteBtc : null;
$scope.avgConfirmationTime = null;
2017-07-07 10:26:31 -03:00
setMinWarning();
setMaxWarning();
2017-03-06 16:38:16 -03:00
return;
}
2017-06-21 17:09:33 -03:00
2017-11-23 15:08:55 +09:00
$scope.feePerSatByteBtc = (value.feePerKb / 1000).toFixed();
2017-06-21 17:09:33 -03:00
$scope.avgConfirmationTime = value.nbBlocks * 10;
2017-07-07 10:26:31 -03:00
$scope.invalidCustomFeeEntered = false;
setMinWarning();
setMaxWarning();
2017-11-23 15:08:55 +09:00
if (lodash.isEmpty($scope.bchFeeLevels)) return;
var bchValue = {};
if ($scope.network == 'livenet') {
bchValue = lodash.find($scope.bchFeeLevels[$scope.network], {
level: 'normal'
});
} else {
bchValue = lodash.find($scope.bchFeeLevels[$scope.network], {
level: $scope.currentFeeLevel
});
}
$scope.feePerSatByteBch = (bchValue.feePerKb / 1000).toFixed();
2017-01-10 10:23:01 -03:00
};
$scope.chooseNewFee = function() {
2017-07-07 10:26:31 -03:00
$scope.hideModal($scope.currentFeeLevel, $scope.customFeePerKB);
};
var showCustomFeePrompt = function() {
$scope.invalidCustomFeeEntered = true;
$scope.showMaxWarning = false;
2017-07-10 14:07:01 -03:00
$scope.showMinWarning = false;
2017-07-10 12:11:46 -03:00
popupService.showPrompt(gettextCatalog.getString('Custom Fee'), gettextCatalog.getString('Set your own fee in satoshis/byte'), null, function(text) {
2017-07-10 14:07:01 -03:00
if (!text || !parseInt(text) || parseInt(text) <= 0) return;
2017-11-23 15:08:55 +09:00
$scope.feePerSatByteBtc = parseInt(text);
$scope.customFeePerKB = ($scope.feePerSatByteBtc * 1000).toFixed();
2017-07-07 10:26:31 -03:00
setMaxWarning();
setMinWarning();
2017-07-10 12:18:19 -03:00
$timeout(function() {
$scope.$apply();
});
2017-07-07 10:26:31 -03:00
});
};
$scope.getMinimumRecommeded = function() {
var value = lodash.find($scope.feeLevels[$scope.network], {
level: 'superEconomy'
});
2017-08-28 17:17:32 -03:00
return parseInt((value.feePerKb / 1000).toFixed());
2017-07-07 10:26:31 -03:00
};
var setMinWarning = function() {
2017-11-23 15:08:55 +09:00
if (parseInt($scope.feePerSatByteBtc) < $scope.getMinimumRecommeded()) $scope.showMinWarning = true;
2017-07-07 10:26:31 -03:00
else $scope.showMinWarning = false;
};
2017-07-07 10:26:31 -03:00
var setMaxWarning = function() {
2017-11-23 15:08:55 +09:00
if (parseInt($scope.feePerSatByteBtc) > 1000) {
2017-07-07 10:26:31 -03:00
$scope.showMaxWarning = true;
$scope.invalidCustomFeeEntered = true;
} else {
$scope.showMaxWarning = false;
$scope.invalidCustomFeeEntered = false;
}
};
2016-06-10 18:41:52 -03:00
});