From 28a53ea0c6a9fe9942a147e2e327e75e3858389f Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Thu, 29 Sep 2016 19:04:52 -0300 Subject: [PATCH] Improves performance on tab-home, refactor of walletDetails, bug fixes --- public/views/modals/txp-details.html | 2 +- public/views/tab-home.html | 5 +- public/views/walletDetails.html | 39 +++------- src/js/controllers/tab-home.js | 64 +++++++-------- src/js/controllers/walletDetails.js | 112 +++++++++------------------ src/js/routes.js | 6 +- src/js/services/profileService.js | 4 +- src/sass/views/walletDetails.scss | 2 +- 8 files changed, 90 insertions(+), 144 deletions(-) diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index 1f89f7b4a..da8959262 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -1,5 +1,5 @@ - + diff --git a/public/views/tab-home.html b/public/views/tab-home.html index d3592e704..06d9d5f00 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -69,10 +69,11 @@ Incomplete -
+ {{wallet.status.availableBalanceStr}} [Balance Hidden] -
+ +  

diff --git a/public/views/walletDetails.html b/public/views/walletDetails.html index 6f822579f..e630506f3 100644 --- a/public/views/walletDetails.html +++ b/public/views/walletDetails.html @@ -1,6 +1,6 @@ - - {{walletDetailsName}} + + {{wallet.name}} @@ -14,14 +14,13 @@
-
- {{updateStatusError|translate}} - + -
+
This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information. - + Recreate
@@ -30,7 +29,7 @@
-
+
{{status.totalBalanceStr}}
{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}
@@ -46,10 +45,10 @@
-
- ... -
+
+ ...
+
@@ -108,8 +107,8 @@
No transactions yet {{status.totalBalanceStr}} + ng-show="!txHistory[0] && !updatingTxHistory && !txHistoryError && !updateStatusError && !notAuthorized" translate> + No transactions yet
@@ -124,20 +123,6 @@
-
-
-
- -
-
-   -
-
-   -
-
-
-
diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 2d05b9263..d7cb4e852 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -3,6 +3,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, gettextCatalog, lodash, popupService, ongoingProcess, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window, bitpayCardService) { var wallet; + var listeners = []; $scope.externalServices = {}; $scope.bitpayCardEnabled = true; // TODO $scope.openTxpModal = txpModalService.open; @@ -81,7 +82,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); }; - function updateTxps() { + var updateTxps = function() { profileService.getTxps({ limit: 3 }, function(err, txps, n) { @@ -90,12 +91,11 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.txpsN = n; $timeout(function() { $ionicScrollDelegate.resize(); - $scope.$apply(); - }, 10); + }, 100); }) }; - $scope.updateAllWallets = function() { + var updateAllWallets = function() { $scope.wallets = profileService.getWallets(); if (lodash.isEmpty($scope.wallets)) return; @@ -123,7 +123,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', limit: 3 }, function(err, n) { if (err) { - console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO + $log.error(err); return; } $scope.fetchingNotifications = false; @@ -132,16 +132,16 @@ angular.module('copayApp.controllers').controller('tabHomeController', $timeout(function() { $ionicScrollDelegate.resize(); $scope.$apply(); - }, 10); + }, 100); }) }; - $scope.updateWallet = function(wallet) { + var updateWallet = function(wallet) { $log.debug('Updating wallet:' + wallet.name) walletService.getStatus(wallet, {}, function(err, status) { if (err) { - $log.error(err); //TODO + $log.error(err); return; } wallet.status = status; @@ -155,11 +155,11 @@ angular.module('copayApp.controllers').controller('tabHomeController', }, function(err, notifications) { $scope.fetchingNotifications = false; if (err) { - console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO + $log.error(err); return; } $scope.notifications = notifications; - }) + }); }); }; @@ -172,7 +172,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); }; - $scope.nextStep = function() { + var nextStep = function() { lodash.each(['AmazonGiftCards', 'BitpayCard', 'BuyAndSell'], function(service) { storageService.getNextStep(service, function(err, value) { $scope.externalServices[service] = value ? true : false; @@ -190,24 +190,6 @@ angular.module('copayApp.controllers').controller('tabHomeController', }, 10); }; - var listeners = [ - $rootScope.$on('bwsEvent', function(e, walletId, type, n) { - var wallet = profileService.getWallet(walletId); - $scope.updateWallet(wallet); - }), - $rootScope.$on('Local/TxAction', function(e, walletId) { - $log.debug('Got action for wallet ' + walletId); - var wallet = profileService.getWallet(walletId); - $scope.updateWallet(wallet); - }), - ]; - - $scope.$on('$destroy', function() { - lodash.each(listeners, function(x) { - x(); - }); - }); - var bitpayCardCache = function() { bitpayCardService.getCacheData(function(err, data) { if (err ||  lodash.isEmpty(data)) return; @@ -217,6 +199,21 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.$on("$ionicView.enter", function(event, data) { $scope.bitpayCard = null; + nextStep(); + updateAllWallets(); + + listeners = [ + $rootScope.$on('bwsEvent', function(e, walletId, type, n) { + var wallet = profileService.getWallet(walletId); + updateWallet(wallet); + }), + $rootScope.$on('Local/TxAction', function(e, walletId) { + $log.debug('Got action for wallet ' + walletId); + var wallet = profileService.getWallet(walletId); + updateWallet(wallet); + }) + ]; + configService.whenAvailable(function() { var config = configService.getSync(); var isWindowsPhoneApp = platformInfo.isWP && platformInfo.isCordova; @@ -230,7 +227,12 @@ angular.module('copayApp.controllers').controller('tabHomeController', if ($scope.bitpayCardEnabled) bitpayCardCache(); }); - $scope.nextStep(); - $scope.updateAllWallets(); }); + + $scope.$on("$ionicView.leave", function(event, data) { + lodash.each(listeners, function(x) { + x(); + }); + }); + }); diff --git a/src/js/controllers/walletDetails.js b/src/js/controllers/walletDetails.js index dbb357ca4..d5726117e 100644 --- a/src/js/controllers/walletDetails.js +++ b/src/js/controllers/walletDetails.js @@ -1,15 +1,13 @@ 'use strict'; angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, profileService, lodash, configService, gettextCatalog, platformInfo, walletService, txpModalService, externalLinkService, popupService) { - var isCordova = platformInfo.isCordova; - var isWP = platformInfo.isWP; - var isAndroid = platformInfo.isAndroid; - var isChromeApp = platformInfo.isChromeApp; var HISTORY_SHOW_LIMIT = 10; - var currentTxHistoryPage; - var wallet; + var currentTxHistoryPage = 0; + var listeners = []; $scope.txps = []; + $scope.completeTxHistory = []; + $scope.openTxpModal = txpModalService.open; $scope.openExternalLink = function(url, target) { externalLinkService.open(url, target); @@ -24,7 +22,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun // fee: 1000, // createdOn: new Date() / 1000, // outputs: [], - // wallet: wallet + // wallet: $scope.wallet // }; // // function addOutput(n) { @@ -44,13 +42,12 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun $scope.txps = lodash.sortBy(txps, 'createdOn').reverse(); }; - - $scope.updateStatus = function(force) { + var updateStatus = function(force) { $scope.updatingStatus = true; $scope.updateStatusError = false; $scope.walletNotRegistered = false; - walletService.getStatus(wallet, { + walletService.getStatus($scope.wallet, { force: !!force, }, function(err, status) { $scope.updatingStatus = false; @@ -74,29 +71,8 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun }); }; - - $scope.openTxpModal = txpModalService.open; - - var listeners = [ - $rootScope.$on('bwsEvent', function(e, walletId) { - if (walletId == wallet.id) - $scope.updateStatus(); - }), - $rootScope.$on('Local/TxAction', function(e, walletId) { - if (walletId == wallet.id) - $scope.updateStatus(); - }), - ]; - - $scope.$on('$destroy', function() { - lodash.each(listeners, function(x) { - x(); - }); - }); - - $scope.openSearchModal = function() { - $scope.color = wallet.color; + $scope.color = $scope.wallet.color; $ionicModal.fromTemplateUrl('views/modals/search.html', { scope: $scope, @@ -113,7 +89,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun $scope.openTxModal = function(btx) { $scope.btx = lodash.cloneDeep(btx); - $scope.walletId = wallet.id; + $scope.walletId = $scope.wallet.id; $ionicModal.fromTemplateUrl('views/modals/tx-details.html', { scope: $scope }).then(function(modal) { @@ -123,24 +99,24 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun }; $scope.recreate = function() { - walletService.recreate(wallet, function(err) { + walletService.recreate($scope.wallet, function(err) { $scope.init(); if (err) return; $timeout(function() { - walletService.startScan(wallet, function() { + walletService.startScan($scope.wallet, function() { $scope.$apply(); }); }); }); }; - $scope.updateTxHistory = function(cb) { + var updateTxHistory = function(cb) { if (!cb) cb = function() {}; if ($scope.updatingTxHistory) return; $scope.updatingTxHistory = true; $scope.updateTxHistoryError = false; - $scope.updatingTxHistoryProgress = null; + $scope.updatingTxHistoryProgress = 0; var progressFn = function(txs) { $scope.updatingTxHistoryProgress = txs ? txs.length : 0; @@ -148,11 +124,11 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun $scope.showHistory(); $timeout(function() { $scope.$apply(); - }, 1); + }); }; $timeout(function() { - walletService.getTxHistory(wallet, { + walletService.getTxHistory($scope.wallet, { progressFn: progressFn, }, function(err, txHistory) { $scope.updatingTxHistory = false; @@ -162,12 +138,10 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun return; } $scope.completeTxHistory = txHistory; - $scope.showHistory(); - $timeout(function() { $scope.$apply(); - }, 1); + }); return cb(); }); }); @@ -186,51 +160,39 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun $scope.$broadcast('scroll.infiniteScrollComplete'); }; - $scope.updateAll = function(cb)  { - $scope.updateStatus(false); - $scope.updateTxHistory(cb); + $scope.updateAll = function(force, cb)  { + updateStatus(force); + updateTxHistory(cb); }; $scope.hideToggle = function() { - profileService.toggleHideBalanceFlag(wallet.credentials.walletId, function(err) { + profileService.toggleHideBalanceFlag($scope.wallet.credentials.walletId, function(err) { if (err) $log.error(err); }); }; $scope.$on("$ionicView.beforeEnter", function(event, data){ - currentTxHistoryPage = 0; - $scope.completeTxHistory = []; - wallet = profileService.getWallet($stateParams.walletId); + $scope.wallet = profileService.getWallet(data.stateParams.walletId); + $scope.requiresMultipleSignatures = $scope.wallet.credentials.m > 1; - /* Set color for header bar */ - $scope.walletDetailsColor = wallet.color; - $scope.walletDetailsName = wallet.name; - $scope.wallet = wallet; + $scope.updateAll(); - $scope.requiresMultipleSignatures = wallet.credentials.m > 1; - $scope.newTx = false; + listeners = [ + $rootScope.$on('bwsEvent', function(e, walletId) { + if (walletId == $scope.wallet.id) + updateStatus(); + }), + $rootScope.$on('Local/TxAction', function(e, walletId) { + if (walletId == $scope.wallet.id) + updateStatus(); + }), + ]; + }); - $scope.updateAll(function() { - if ($stateParams.txid) { - var tx = lodash.find($scope.completeTxHistory, { - txid: $stateParams.txid - }); - if (tx) { - $scope.openTxModal(tx); - } else { - popupService.showAlert(null, gettextCatalog.getString('TX not available')); - } - } else if ($stateParams.txpId) { - var txp = lodash.find($scope.txps, { - id: $stateParams.txpId - }); - if (txp) { - $scope.openTxpModal(txp); - } else { - popupService.showAlert(null, gettextCatalog.getString('Proposal not longer available')); - } - } + $scope.$on("$ionicView.leave", function(event, data) { + lodash.each(listeners, function(x) { + x(); }); }); }); diff --git a/src/js/routes.js b/src/js/routes.js index b8301f47f..8e6d2c4fe 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -157,11 +157,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr controller: 'walletDetailsController', templateUrl: 'views/walletDetails.html' } - }, - params: { - txid: null, - txpId: null, - }, + } }) .state('tabs.activity', { url: '/activity', diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index ace8bbb11..506af8f12 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -927,9 +927,9 @@ angular.module('copayApp.services') if (x.pendingTxps) txps = txps.concat(x.pendingTxps); }); - txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn'); - txps = lodash.compact(lodash.flatten(txps)).slice(0, MAX); var n = txps.length; + txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn'); + txps = lodash.compact(lodash.flatten(txps)).slice(0, opts.limit || MAX); return cb(null, txps, n); }; diff --git a/src/sass/views/walletDetails.scss b/src/sass/views/walletDetails.scss index b34001952..5dd85fb2d 100644 --- a/src/sass/views/walletDetails.scss +++ b/src/sass/views/walletDetails.scss @@ -17,7 +17,7 @@ text-align: center; padding: 2rem 1rem 1.5rem 1rem; color: #fff; - min-height: 115px; + height: 140px; margin-bottom: 10px; &-alternative {