diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index f6bd43363..d9cd71348 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -6,12 +6,14 @@ angular.module('copayApp.controllers').controller('tabHomeController', self.glideraEnabled = configService.getSync().glidera.enabled; - self.setWallets = function() { - $scope.wallets = profileService.getWallets(); - }; - var setPendingTxps = function(txps) { + $scope.txps = lodash.sort(txps, function(x) { + return walletId; + }); + }; + + var formatPendingTxps = function(txps) { $scope.pendingTxProposalsCountForUs = 0; var now = Math.floor(Date.now() / 1000); @@ -65,18 +67,17 @@ angular.module('copayApp.controllers').controller('tabHomeController', if (!tx.deleteLockTime) tx.canBeRemoved = true; - - if (tx.creatorId != tx.wallet.copayerId) { - $scope.pendingTxProposalsCountForUs = $scope.pendingTxProposalsCountForUs + 1; - } }); - $scope.txps = txps; + + return txps; }; - self.updateAllClients = function() { + self.updateAllWallets = function() { + + $scope.wallets = profileService.getWallets(); + var txps = []; var i = $scope.wallets.length; - lodash.each($scope.wallets, function(wallet) { walletService.getStatus(wallet, {}, function(err, status) { if (err) { @@ -87,6 +88,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', txps = txps.concat(status.pendingTxps); } if (--i == 0) { + txps = formatPendingTxps(txps); setPendingTxps(txps); } wallet.status = status; @@ -94,11 +96,33 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); } - self.setWallets(); - self.updateAllClients(); + self.updateWallet = function(wallet) { + var txps = lodash.filter($scope.txps, function(x) { + return x.walletId != wallet.id; + }); + + walletService.getStatus(wallet, {}, function(err, status) { + if (err) { + console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO + return; + } // TODO + if (status.pendingTxps && status.pendingTxps[0]) { + txps = txps.concat(status.pendingTxps); + txps = formatPendingTxps(txps); + setPendingTxps(txps); + } + wallet.status = status; + }); + }; + + + + self.updateAllWallets(); $scope.bitpayCardEnabled = true; // TODO + $scope.$on('$destroy', function() {}); + var config = configService.getSync().wallet; var GLIDERA_LOCK_TIME = 6 * 60 * 60; diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 9a215bf2b..28f06b62c 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -71,6 +71,36 @@ angular.module('copayApp.services') walletId, wallet.credentials.walletName); $rootScope.$emit(n.type, n, wallet); +// )) +// walletService allet.getStatus() +// wallet.getTxHistory() +// +// // update wallet? +// if (lodash.indexOf( [,'NewOutgoingTx','NewOutgoingTxByThirdParty','NewTxProposal', 'TxProposalFinallyRejected', 'TxProposalRemoved'], n.type)>=0) { +// +// wallet.update +// +// }; +// +// 'NewBlock' +// }); +// +// //untilItChange FALSE +// lodash.each(['NewTxProposal', , 'NewOutgoingTxByThirdParty', +// 'Local/GlideraTx' +// ], function(eventName) { +// $rootScope.$on(eventName, function(event) { +// self.updateAll({ +// walletStatus: null, +// untilItChanges: null, +// triggerTxUpdate: true, +// }); +// }); +// }); +// +// +// // + // }); wallet.on('walletCompleted', function() { diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index 11013427c..ca90a9e81 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -112,6 +112,17 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim }; root.handleError = lodash.debounce(_handleError, 1000); + + root.invalidateCache = function(wallet) { + if (wallet.cacheStatus) { + wallet.cacheStatus.isValid = false; + } + + if (wallet.cacheHistory) { + wallet.cacheHistory.isValid = false; + } + }; + root.getStatus = function(wallet, opts, cb) { opts = opts || {}; @@ -446,17 +457,22 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim if (!wallet.isComplete()) return cb(); + function isHistoryCached() { + return wallet.completeHistory && wallet.completeHistory.isValid; + }; + + if (isHistoryCached() && !opts.force) return cb(null, wallet.completeHistory); + $log.debug('Updating Transaction History'); updateLocalTxHistory(wallet, opts.progressFn, function(err) { if (err) return cb(err); + + wallet.completeHistory.isValid = true; return cb(err, wallet.completeHistory); }); }; - - - root.isEncrypted = function(wallet) { if (lodash.isEmpty(wallet)) return; var isEncrypted = wallet.isPrivKeyEncrypted(); @@ -639,14 +655,6 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim }); }; - root.debounceUpdateHistory = lodash.debounce(function() { - root.updateHistory(); - }, 1000); - - root.throttledUpdateHistory = lodash.throttle(function() { - root.updateHistory(); - }, 5000); - root.showErrorPopup = function(msg, cb) { $log.warn('Showing err popup:' + msg);