From cb64e57e4530b1f4b8e219e8108af62cc9cef0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Wed, 21 Sep 2016 11:47:19 -0300 Subject: [PATCH] requeriments to send --- public/views/confirm.html | 2 +- public/views/modals/txp-details.html | 2 +- src/js/controllers/confirm.js | 42 +++++++-- src/js/controllers/modals/txpDetails.js | 2 - src/js/directives/directives.js | 5 +- src/js/services/txFormatService.js | 118 ++++++++++++++---------- 6 files changed, 110 insertions(+), 61 deletions(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index 0964d1e89..80f6c504d 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -49,5 +49,5 @@ - + diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index e3d9da154..330338d26 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -161,5 +161,5 @@ - + diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 1e65bf1b5..c3eeeed2e 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -19,7 +19,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( throw ('bad params'); } $scope.isCordova = platformInfo.isCordova; - $scope.hideSlider = false; $scope.data = {}; var config = configService.getSync().wallet; @@ -78,7 +77,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.$on('accepted', function(event) { - $scope.hideSlider = true; $scope.approve(); }); @@ -268,16 +266,46 @@ angular.module('copayApp.controllers').controller('confirmController', function( $state.go('tabs.home'); }); } - ongoingProcess.set('creatingTx', true); createTx(wallet, false, function(err, txp) { ongoingProcess.set('creatingTx', false); if (err) return; - walletService.publishAndSign(wallet, txp, function(err, txp) { - if (err) return setSendError(err); - $ionicHistory.clearHistory(); - $state.go('tabs.home'); + + var config = configService.getSync(); + var spendingPassEnabled = walletService.isEncrypted(wallet); + var touchIdEnabled = config.touchIdFor && !config.touchIdFor[wallet.id]; + var isCordova = $scope.isCordova; + var bigAmount = parseFloat(txFormatService.formatToUSD(txp.amount)) > 20; + var message = gettextCatalog.getString('Sending {{fee}} from your {{name}} wallet', { + fee: $scope.fee, + name: wallet.name }); + var okText = gettextCatalog.getString('Confirm'); + var cancelText = gettextCatalog.getString('Cancel'); + + if (!spendingPassEnabled && !touchIdEnabled) { + if (isCordova && bigAmount) { + popupService.showConfirm(null, message, okText, cancelText, function(ok) { + if (!ok) return; + publishAndSign(wallet, txp); + }); + } + else { + popupService.showConfirm(null, message, okText, cancelText, function(ok) { + if (!ok) return; + publishAndSign(wallet, txp); + }); + } + } + else publishAndSign(wallet, txp); + }); + }; + + function publishAndSign(wallet, txp) { + walletService.publishAndSign(wallet, txp, function(err, txp) { + if (err) return setSendError(err); + $ionicHistory.clearHistory(); + $state.go('tabs.home'); }); }; diff --git a/src/js/controllers/modals/txpDetails.js b/src/js/controllers/modals/txpDetails.js index fbc821908..580f83a6e 100644 --- a/src/js/controllers/modals/txpDetails.js +++ b/src/js/controllers/modals/txpDetails.js @@ -10,7 +10,6 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.init = function() { $scope.loading = null; - $scope.hideSlider = false; $scope.copayerId = $scope.wallet.credentials.copayerId; $scope.isShared = $scope.wallet.credentials.n > 1; $scope.canSign = $scope.wallet.canSign() || $scope.wallet.isPrivKeyExternal(); @@ -50,7 +49,6 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi }; $scope.$on('accepted', function(event) { - $scope.hideSlider = true; $scope.sign(); }); diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 7a790c5d6..e20643e9f 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -174,7 +174,10 @@ angular.module('copayApp.directives') }); scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - if (data.slider.activeIndex == 0) scope.$emit('accepted'); + if (data.slider.activeIndex == 0) { + scope.slider.slideNext(); + scope.$emit('accepted'); + } }); } } diff --git a/src/js/services/txFormatService.js b/src/js/services/txFormatService.js index 19b969238..e0a2f9bff 100644 --- a/src/js/services/txFormatService.js +++ b/src/js/services/txFormatService.js @@ -23,6 +23,26 @@ angular.module('copayApp.services').factory('txFormatService', function(bwcServi return root.formatAmount(satoshis) + ' ' + config.unitName; }; + root.formatToUSD = function(satoshis, cb) { + if (!satoshis) return; + var val = function() { + var v1 = rateService.toFiat(satoshis, 'USD'); + if (!v1) return null; + + return v1.toFixed(2); + }; + + // Async version + if (cb) { + rateService.whenAvailable(function() { + return cb(val()); + }); + } else { + if (!rateService.isAvailable()) return null; + return val(); + }; + }; + root.formatAlternativeStr = function(satoshis, cb) { if (!satoshis) return; var config = configService.getSync().wallet.settings; @@ -76,63 +96,63 @@ angular.module('copayApp.services').factory('txFormatService', function(bwcServi }; root.formatPendingTxps = function(txps) { - $scope.pendingTxProposalsCountForUs = 0; - var now = Math.floor(Date.now() / 1000); + $scope.pendingTxProposalsCountForUs = 0; + var now = Math.floor(Date.now() / 1000); - /* To test multiple outputs... - var txp = { - message: 'test multi-output', - fee: 1000, - createdOn: new Date() / 1000, - outputs: [] - }; - function addOutput(n) { - txp.outputs.push({ - amount: 600, - toAddress: '2N8bhEwbKtMvR2jqMRcTCQqzHP6zXGToXcK', - message: 'output #' + (Number(n) + 1) - }); - }; - lodash.times(150, addOutput); - txps.push(txp); - */ + /* To test multiple outputs... + var txp = { + message: 'test multi-output', + fee: 1000, + createdOn: new Date() / 1000, + outputs: [] + }; + function addOutput(n) { + txp.outputs.push({ + amount: 600, + toAddress: '2N8bhEwbKtMvR2jqMRcTCQqzHP6zXGToXcK', + message: 'output #' + (Number(n) + 1) + }); + }; + lodash.times(150, addOutput); + txps.push(txp); + */ - lodash.each(txps, function(tx) { + lodash.each(txps, function(tx) { - tx = txFormatService.processTx(tx); + tx = txFormatService.processTx(tx); - // no future transactions... - if (tx.createdOn > now) - tx.createdOn = now; + // no future transactions... + if (tx.createdOn > now) + tx.createdOn = now; - tx.wallet = profileService.getWallet(tx.walletId); - if (!tx.wallet) { - $log.error("no wallet at txp?"); - return; - } + tx.wallet = profileService.getWallet(tx.walletId); + if (!tx.wallet) { + $log.error("no wallet at txp?"); + return; + } - var action = lodash.find(tx.actions, { - copayerId: tx.wallet.copayerId - }); - - if (!action && tx.status == 'pending') { - tx.pendingForUs = true; - } - - if (action && action.type == 'accept') { - tx.statusForUs = 'accepted'; - } else if (action && action.type == 'reject') { - tx.statusForUs = 'rejected'; - } else { - tx.statusForUs = 'pending'; - } - - if (!tx.deleteLockTime) - tx.canBeRemoved = true; + var action = lodash.find(tx.actions, { + copayerId: tx.wallet.copayerId }); - return txps; - }; + if (!action && tx.status == 'pending') { + tx.pendingForUs = true; + } + + if (action && action.type == 'accept') { + tx.statusForUs = 'accepted'; + } else if (action && action.type == 'reject') { + tx.statusForUs = 'rejected'; + } else { + tx.statusForUs = 'pending'; + } + + if (!tx.deleteLockTime) + tx.canBeRemoved = true; + }); + + return txps; + }; return root; });