Updates info when a copayer accept/reject

This commit is contained in:
Gustavo Maximiliano Cortez 2016-11-03 13:40:45 -03:00
commit 691600e116
No known key found for this signature in database
GPG key ID: 15EDAD8D9F2EB1AF

View file

@ -1,13 +1,11 @@
'use strict'; 'use strict';
angular.module('copayApp.controllers').controller('txpDetailsController', function($scope, $rootScope, $timeout, $interval, $ionicModal, $log, ongoingProcess, platformInfo, $ionicScrollDelegate, txFormatService, fingerprintService, bwcError, gettextCatalog, lodash, walletService, popupService, $state, $ionicHistory) { angular.module('copayApp.controllers').controller('txpDetailsController', function($scope, $rootScope, $timeout, $interval, $log, ongoingProcess, platformInfo, $ionicScrollDelegate, txFormatService, bwcError, gettextCatalog, lodash, walletService, popupService, $ionicHistory) {
var self = $scope.self;
var tx = $scope.tx;
var copayers = $scope.copayers;
var isGlidera = $scope.isGlidera; var isGlidera = $scope.isGlidera;
var GLIDERA_LOCK_TIME = 6 * 60 * 60; var GLIDERA_LOCK_TIME = 6 * 60 * 60;
var now = Math.floor(Date.now() / 1000); var now = Math.floor(Date.now() / 1000);
var countDown; var countDown;
var listeners = [];
$scope.init = function() { $scope.init = function() {
$scope.loading = null; $scope.loading = null;
@ -18,8 +16,8 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
$scope.color = $scope.wallet.color; $scope.color = $scope.wallet.color;
$scope.data = {}; $scope.data = {};
$scope.hasClick = platformInfo.hasClick; $scope.hasClick = platformInfo.hasClick;
$scope.displayAmount = getDisplayAmount(tx.amountStr); $scope.displayAmount = getDisplayAmount($scope.tx.amountStr);
$scope.displayUnit = getDisplayUnit(tx.amountStr); $scope.displayUnit = getDisplayUnit($scope.tx.amountStr);
initActionList(); initActionList();
checkPaypro(); checkPaypro();
} }
@ -46,12 +44,12 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
$scope.actionList.push({ $scope.actionList.push({
type: 'created', type: 'created',
time: tx.createdOn, time: $scope.tx.createdOn,
description: actionDescriptions['created'], description: actionDescriptions['created'],
by: tx.creatorName by: $scope.tx.creatorName
}); });
lodash.each(tx.actions, function(action) { lodash.each($scope.tx.actions, function(action) {
$scope.actionList.push({ $scope.actionList.push({
type: action.type, type: action.type,
time: action.createdOn, time: action.createdOn,
@ -61,38 +59,70 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
}); });
}; };
function checkPaypro() {
if ($scope.tx.payProUrl && !platformInfo.isChromeApp) {
$scope.wallet.fetchPayPro({
payProUrl: $scope.tx.payProUrl,
}, function(err, paypro) {
if (err) return;
$scope.tx.paypro = paypro;
paymentTimeControl($scope.tx.paypro.expires);
$timeout(function() {
$ionicScrollDelegate.resize();
}, 10);
});
}
};
function paymentTimeControl(expirationTime) {
$scope.paymentExpired = false;
setExpirationTime();
countDown = $interval(function() {
setExpirationTime();
}, 1000);
function setExpirationTime() {
var now = Math.floor(Date.now() / 1000);
if (now > expirationTime) {
$scope.paymentExpired = true;
if (countDown) $interval.cancel(countDown);
return;
}
var totalSecs = expirationTime - now;
var m = Math.floor(totalSecs / 60);
var s = totalSecs % 60;
$scope.expires = ('0' + m).slice(-2) + ":" + ('0' + s).slice(-2);
};
};
$scope.$on('accepted', function(event) { $scope.$on('accepted', function(event) {
$scope.sign(); $scope.sign();
}); });
// ToDo: use tx.customData instead of tx.message // ToDo: use tx.customData instead of tx.message
if (tx.message === 'Glidera transaction' && isGlidera) { if ($scope.tx.message === 'Glidera transaction' && isGlidera) {
tx.isGlidera = true; $scope.tx.isGlidera = true;
if (tx.canBeRemoved) { if ($scope.tx.canBeRemoved) {
tx.canBeRemoved = (Date.now() / 1000 - (tx.ts || tx.createdOn)) > GLIDERA_LOCK_TIME; $scope.tx.canBeRemoved = (Date.now() / 1000 - ($scope.tx.ts || $scope.tx.createdOn)) > GLIDERA_LOCK_TIME;
} }
} }
var setSendError = function(msg) { var setError = function (err, prefix) {
$scope.sendStatus = ''; $scope.sendStatus = '';
var error = msg || gettextCatalog.getString('Could not send payment'); $scope.loading = false;
popupService.showAlert(gettextCatalog.getString('Error'), error); popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, prefix));
} };
$scope.sign = function(onSendStatusChange) { $scope.sign = function(onSendStatusChange) {
$scope.loading = true; $scope.loading = true;
walletService.publishAndSign($scope.wallet, $scope.tx, function(err, txp) { walletService.publishAndSign($scope.wallet, $scope.tx, function(err, txp) {
$scope.$emit('UpdateTx'); $scope.$emit('UpdateTx');
if (err) return setSendError(err); if (err) return setError(err, gettextCatalog.getString('Could not send payment'));
success(); success();
}, onSendStatusChange); }, onSendStatusChange);
}; };
function setError(err, prefix) {
$scope.loading = false;
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err, prefix));
};
$scope.reject = function(txp) { $scope.reject = function(txp) {
var title = gettextCatalog.getString('Warning!'); var title = gettextCatalog.getString('Warning!');
var msg = gettextCatalog.getString('Are you sure you want to reject this transaction?'); var msg = gettextCatalog.getString('Are you sure you want to reject this transaction?');
@ -150,69 +180,46 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
return $scope.wallet.credentials.networkName.substring(0, 4); return $scope.wallet.credentials.networkName.substring(0, 4);
}; };
function checkPaypro() { var updateTxInfo = function(eventName) {
if (tx.payProUrl && !platformInfo.isChromeApp) { $scope.wallet.getTx($scope.tx.id, function(err, tx) {
$scope.wallet.fetchPayPro({ if (err) {
payProUrl: tx.payProUrl, if (err.message && err.message == 'TX_NOT_FOUND' &&
}, function(err, paypro) { (eventName == 'transactionProposalRemoved' || eventName == 'TxProposalRemoved')) {
if (err) return; $scope.tx.removed = true;
tx.paypro = paypro; $scope.tx.canBeRemoved = false;
paymentTimeControl(tx.paypro.expires); $scope.tx.pendingForUs = false;
$timeout(function() { $scope.$apply();
$ionicScrollDelegate.resize(); }
}, 10);
});
}
};
function paymentTimeControl(expirationTime) {
$scope.paymentExpired = false;
setExpirationTime();
countDown = $interval(function() {
setExpirationTime();
}, 1000);
function setExpirationTime() {
var now = Math.floor(Date.now() / 1000);
if (now > expirationTime) {
$scope.paymentExpired = true;
if (countDown) $interval.cancel(countDown);
return; return;
} }
var totalSecs = expirationTime - now;
var m = Math.floor(totalSecs / 60); var action = lodash.find(tx.actions, {
var s = totalSecs % 60; copayerId: $scope.wallet.credentials.copayerId
$scope.expires = ('0' + m).slice(-2) + ":" + ('0' + s).slice(-2); });
};
$scope.tx = txFormatService.processTx(tx);
if (!action && tx.status == 'pending')
$scope.tx.pendingForUs = true;
$scope.updateCopayerList();
initActionList();
$scope.$apply();
});
}; };
lodash.each(['TxProposalRejectedBy', 'TxProposalAcceptedBy', 'transactionProposalRemoved', 'TxProposalRemoved', 'NewOutgoingTx', 'UpdateTx'], function(eventName) { var bwsEvent = $rootScope.$on('bwsEvent', function(e, walletId, type, n) {
$rootScope.$on(eventName, function() { lodash.each([
$scope.wallet.getTx($scope.tx.id, function(err, tx) { 'TxProposalRejectedBy',
if (err) { 'TxProposalAcceptedBy',
if (err.message && err.message == 'TX_NOT_FOUND' && 'transactionProposalRemoved',
(eventName == 'transactionProposalRemoved' || eventName == 'TxProposalRemoved')) { 'TxProposalRemoved',
$scope.tx.removed = true; 'NewOutgoingTx',
$scope.tx.canBeRemoved = false; 'UpdateTx'
$scope.tx.pendingForUs = false; ], function(eventName) {
$scope.$apply(); if (walletId == $scope.wallet.id && type == eventName) {
} updateTxInfo(eventName);
return; }
}
var action = lodash.find(tx.actions, {
copayerId: $scope.wallet.credentials.copayerId
});
$scope.tx = txFormatService.processTx(tx);
if (!action && tx.status == 'pending')
$scope.tx.pendingForUs = true;
$scope.updateCopayerList();
$scope.$apply();
});
}); });
}); });
@ -252,6 +259,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
}; };
$scope.close = function() { $scope.close = function() {
bwsEvent();
$scope.loading = null; $scope.loading = null;
$scope.txpDetailsModal.hide(); $scope.txpDetailsModal.hide();
}; };