From 0ed46f1f655b82d6a8385aecc7bb094c0fe30507 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 2 Sep 2016 14:04:19 -0300 Subject: [PATCH 1/4] fix About --- public/views/preferencesAbout.html | 6 +++--- src/js/controllers/preferencesAbout.js | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/public/views/preferencesAbout.html b/public/views/preferencesAbout.html index e768ddc8b..550cd2d9b 100644 --- a/public/views/preferencesAbout.html +++ b/public/views/preferencesAbout.html @@ -14,14 +14,14 @@ Version - v{{v.version}} + v{{version}} -
+
Commit hash - #{{v.commitHash}} + #{{commitHash}}
diff --git a/src/js/controllers/preferencesAbout.js b/src/js/controllers/preferencesAbout.js index d410eec64..8cff3cb27 100644 --- a/src/js/controllers/preferencesAbout.js +++ b/src/js/controllers/preferencesAbout.js @@ -1,6 +1,9 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesAbout', - function($ionicNavBarDelegate, gettextCatalog) { + function($scope, $version, $ionicNavBarDelegate, gettextCatalog) { $ionicNavBarDelegate.title(gettextCatalog.getString('About Copay')); + + $scope.version = $window.version; + $scope.commit = $window.commitHash; }); From d7e025c2d0431473d13a77a2819b7f234a3470c2 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 2 Sep 2016 14:17:47 -0300 Subject: [PATCH 2/4] better tx create at confirm --- public/views/confirm.html | 2 +- public/views/tab-home.html | 6 +++++- src/js/controllers/confirm.js | 25 +++++++++---------------- src/js/controllers/modals/txpDetails.js | 16 ++++++++-------- src/js/controllers/preferencesAbout.js | 4 ++-- src/js/controllers/tab-home.js | 8 +++++++- src/js/services/walletService.js | 2 ++ 7 files changed, 34 insertions(+), 29 deletions(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index 2d45e16b1..a36da1bc9 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -49,7 +49,7 @@
- diff --git a/public/views/tab-home.html b/public/views/tab-home.html index e22dcf09a..204fee2ed 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -28,7 +28,7 @@
Updating activity. Please stand by
- + @@ -118,5 +118,9 @@ +

+{{name}} v{{version}} +

+ diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 9fd24fa7a..0ecd5b01e 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -17,13 +17,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.commentPopupSave = function(description) { $log.debug('Saving description: ' + description); $scope.description = description; - $scope.txp = null; - - createTx($scope.wallet, function(err, txp) { - if (err) return; - cachedTxp[$scope.wallet.id] = txp; - apply(txp); - }); commentPopup.close(); }; }; @@ -165,7 +158,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( apply(cachedTxp[wallet.id]); } else { stop = $timeout(function() { - createTx(wallet, function(err, txp) { + createTx(wallet, true, function(err, txp) { if (err) return; cachedTxp[wallet.id] = txp; apply(txp); @@ -184,7 +177,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.$apply(); }; - var createTx = function(wallet, cb) { + var createTx = function(wallet, dryRun, cb) { var config = configService.getSync().wallet; var currentSpendUnconfirmed = config.spendUnconfirmed; var outputs = []; @@ -227,6 +220,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( txp.payProUrl = paypro; txp.excludeUnconfirmedUtxos = config.spendUnconfirmed ? false : true; txp.feeLevel = config.settings.feeLevel || 'normal'; + txp.dryRun = dryRun; walletService.createTx(wallet, txp, function(err, ctxp) { if (err) { @@ -247,14 +241,10 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.approve = function() { var wallet = $scope.wallet; - var txp = $scope.txp; if (!wallet) { return setSendError(gettextCatalog.getString('No wallet selected')); }; - if (!txp) { - return setSendError(gettextCatalog.getString('No transaction')); - }; if (!wallet.canSign() && !wallet.isPrivKeyExternal()) { $log.info('No signing proposal: No private key'); @@ -265,9 +255,12 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); } - walletService.publishAndSign(wallet, txp, function(err, txp) { - if (err) return setSendError(err); - $state.transitionTo('tabs.home'); + createTx(wallet, false, function(err, txp) { + if (err) return; + walletService.publishAndSign(wallet, txp, function(err, txp) { + if (err) return setSendError(err); + $state.transitionTo('tabs.home'); + }); }); }; diff --git a/src/js/controllers/modals/txpDetails.js b/src/js/controllers/modals/txpDetails.js index dadc6309e..3804cd830 100644 --- a/src/js/controllers/modals/txpDetails.js +++ b/src/js/controllers/modals/txpDetails.js @@ -32,12 +32,9 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.sign = function() { $scope.loading = true; walletService.publishAndSign($scope.wallet, $scope.tx, function(err, txp) { - -console.log('[txpDetails.js.35] AFTER publush'); //TODO - $scope.$emit('UpdateTx'); if (err) return setSendError(err); - $scope.close(txp); + $scope.close(true); }); }; @@ -53,7 +50,7 @@ console.log('[txpDetails.js.35] AFTER publush'); //TODO if (err) return setError(err, gettextCatalog.getString('Could not reject payment')); - $scope.close(txpr); + $scope.close(true); }); @@ -73,7 +70,7 @@ console.log('[txpDetails.js.35] AFTER publush'); //TODO return setError(err, gettextCatalog.getString('Could not delete payment proposal')); } - $scope.close(); + $scope.close(true); }); }, 10); }; @@ -90,7 +87,7 @@ console.log('[txpDetails.js.35] AFTER publush'); //TODO return setError(err, gettextCatalog.getString('Could not broadcast payment')); } - $scope.close(txpb); + $scope.close(true); }); }, 10); }; @@ -175,7 +172,10 @@ console.log('[txpDetails.js.35] AFTER publush'); //TODO }); }; - $scope.close = function(txp) { + $scope.close = function(shouldEmit) { + if (shouldEmit) + $rootScope.$emit('Local/TxAction', $scope.wallet.id); + $scope.loading = null; $scope.txpDetailsModal.hide(); }; diff --git a/src/js/controllers/preferencesAbout.js b/src/js/controllers/preferencesAbout.js index 8cff3cb27..002c399b4 100644 --- a/src/js/controllers/preferencesAbout.js +++ b/src/js/controllers/preferencesAbout.js @@ -1,9 +1,9 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesAbout', - function($scope, $version, $ionicNavBarDelegate, gettextCatalog) { + function($scope, $window, $ionicNavBarDelegate, gettextCatalog) { $ionicNavBarDelegate.title(gettextCatalog.getString('About Copay')); $scope.version = $window.version; - $scope.commit = $window.commitHash; + $scope.commitHash = $window.commitHash; }); diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 20d85c7d6..3fcccd64d 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('tabHomeController', - function($rootScope, $timeout, $scope, $state, $ionicScrollDelegate, lodash, profileService, walletService, configService, txFormatService, $ionicModal, $log, platformInfo, storageService, txpModalService) { + function($rootScope, $timeout, $scope, $state, $ionicScrollDelegate, lodash, profileService, walletService, configService, txFormatService, $ionicModal, $log, platformInfo, storageService, txpModalService, $window) { $scope.externalServices = {}; $scope.bitpayCardEnabled = true; // TODO @@ -81,9 +81,11 @@ angular.module('copayApp.controllers').controller('tabHomeController', } wallet.status = status; + $scope.fetchingNotifications = true; profileService.getNotifications({ limit: 3 }, function(err, notifications) { + $scope.fetchingNotifications = false; if (err) { console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO return; @@ -143,5 +145,9 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.openTxpModal = txpModalService.open; + $scope.version = $window.version; + $scope.name = $window.appConfig.nameCase; + + }); diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index 6293c31c3..bd447f7ff 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -852,6 +852,8 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim askPassword(wallet.name, gettext('Enter Spending Password'), function(password) { if (!password) return cb('no password'); + if (!wallet.checkPassword(password)) return cb('wrong password'); + return cb(null, password); }); From 8c43f55756685ee37603795ddbcc889e4a14d9f5 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 2 Sep 2016 14:33:18 -0300 Subject: [PATCH 3/4] add notpending in proposals --- public/views/includes/txp.html | 52 ++++++++++++--------- public/views/proposals.html | 2 +- public/views/tab-home.html | 2 +- src/js/controllers/tab-home.js | 51 +++++++------------- src/js/services/profileService.js | 12 +---- src/sass/views/includes/walletActivity.scss | 4 ++ 6 files changed, 54 insertions(+), 69 deletions(-) diff --git a/public/views/includes/txp.html b/public/views/includes/txp.html index 0749fd310..183c49f90 100644 --- a/public/views/includes/txp.html +++ b/public/views/includes/txp.html @@ -1,23 +1,31 @@ - - - - {{addressbook[tx.toAddress]}} - - - {{tx.message}} - - - Sending - - - - {{tx.merchant.domain}} - {{tx.merchant.domain}} - - - - {{tx.amountStr}} - -
- {{tx.wallet.name}} · -
+
+ + + {{addressbook[tx.toAddress]}} + + + {{tx.message}} + + + Sending + + + + {{tx.merchant.domain}} + {{tx.merchant.domain}} + + + + +
+ {{tx.amountStr}} +
+ + +

+ + {{tx.wallet.name}} + +

+
diff --git a/public/views/proposals.html b/public/views/proposals.html index 515d8e050..0f3306ddc 100644 --- a/public/views/proposals.html +++ b/public/views/proposals.html @@ -11,7 +11,7 @@
- + diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 204fee2ed..2c65004c2 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -14,7 +14,7 @@ {{txpsN}} - +
diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 3fcccd64d..ac8ef2750 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -7,17 +7,24 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.bitpayCardEnabled = true; // TODO + function updateTxps() { + profileService.getTxps({ + limit: 3 + }, function(err, txps, n) { + if (err) { + console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO + } + $scope.txps = txps; + $scope.txpsN = n; + $ionicScrollDelegate.resize(); - var setPendingTxps = function(txps) { - if (!txps) { - $scope.txps = []; - return; - } - $scope.txps = lodash.sortBy(txps, 'createdOn').reverse(); + $timeout(function() { + $scope.$apply(); + }, 1); + }) }; - $scope.updateAllWallets = function() { $scope.wallets = profileService.getWallets(); if (lodash.isEmpty($scope.wallets)) return; @@ -35,20 +42,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', wallet.status = status; } if (++j==i) { - profileService.getTxps({ - limit: 3 - }, function(err, txps, n) { - if (err) { - console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO - } - $scope.txps = txps; - $scope.txpsN = n; - $ionicScrollDelegate.resize(); - - $timeout(function() { - $scope.$apply(); - }, 1); - }); + updateTxps(); } }); }); @@ -92,20 +86,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', } $scope.notifications = notifications; - profileService.getTxps({ - limit: 3 - }, function(err, txps, n) { - if (err) { - console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO - } - $scope.txps = txps; - $scope.txpsN = n; - $ionicScrollDelegate.resize(); - - $timeout(function() { - $scope.$apply(); - }, 1); - }) + updateTxps(); }) }); }; diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 8fb2df403..dbad76e34 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -908,22 +908,14 @@ angular.module('copayApp.services') var txps = []; - function process(notifications) { - if (!notifications) return []; - - var shown = lodash.sortBy(notifications, 'createdOn').reverse(); - shown = shown.splice(0, opts.limit || MAX); - return shown; - }; - lodash.each(w, function(x) { if (x.pendingTxps) txps = txps.concat(x.pendingTxps); }); - txps = lodash.sortBy(txps, 'createdOn'); + txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn'); txps = lodash.compact(lodash.flatten(txps)).slice(0,MAX); var n = txps.length; - return cb(null, process(txps), n); + return cb(null, txps, n); }; return root; diff --git a/src/sass/views/includes/walletActivity.scss b/src/sass/views/includes/walletActivity.scss index d5f723582..af7ff4c65 100644 --- a/src/sass/views/includes/walletActivity.scss +++ b/src/sass/views/includes/walletActivity.scss @@ -1,5 +1,9 @@ .wallet-activity { + &-not-pending { + background-color:#eee; + } + &-amount { float: right; font-size: 18px; From 6388a97eb51b1306fc270771d5e8ed0dc01584ea Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Fri, 2 Sep 2016 14:55:18 -0300 Subject: [PATCH 4/4] fix refresh after delete --- app-template/package.json | 2 +- package.json | 2 +- src/js/controllers/confirm.js | 22 +++++++++++++--------- src/js/controllers/modals/txpDetails.js | 13 +++++-------- src/js/controllers/tab-home.js | 1 + src/js/services/profileService.js | 1 - src/js/services/walletService.js | 25 +++++++++++++++++-------- 7 files changed, 38 insertions(+), 28 deletions(-) diff --git a/app-template/package.json b/app-template/package.json index 0d396c2af..3e19f4248 100644 --- a/app-template/package.json +++ b/app-template/package.json @@ -42,7 +42,7 @@ "url": "https://github.com/bitpay/copay/issues" }, "dependencies": { - "bitcore-wallet-client": "4.1.0", + "bitcore-wallet-client": "4.2.0", "coveralls": "^2.11.9", "express": "^4.11.2", "fs": "0.0.2", diff --git a/package.json b/package.json index abfa18eb5..b4086fa2f 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "url": "https://github.com/bitpay/copay/issues" }, "dependencies": { - "bitcore-wallet-client": "4.1.0", + "bitcore-wallet-client": "4.2.0", "coveralls": "^2.11.9", "express": "^4.11.2", "fs": "0.0.2", diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 0ecd5b01e..4c701775c 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -5,6 +5,17 @@ angular.module('copayApp.controllers').controller('confirmController', function( var cachedTxp = {}; var isChromeApp = platformInfo.isChromeApp; + + $scope.$on('Wallet/Changed', function(event, wallet) { + if (lodash.isEmpty(wallet)) { + $log.debug('No wallet provided'); + return; + } + $log.debug('Wallet changed: ' + wallet.name); + setWallet(wallet, true); + }); + + $scope.showDescriptionPopup = function() { var commentPopup = $ionicPopup.show({ templateUrl: "views/includes/note.html", @@ -130,15 +141,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); }; - $scope.$on('Wallet/Changed', function(event, wallet) { - if (lodash.isEmpty(wallet)) { - $log.debug('No wallet provided'); - return; - } - $log.debug('Wallet changed: ' + wallet.name); - setWallet(wallet, true); - }); - function setWallet(wallet, delayed) { var stop; $scope.wallet = wallet; @@ -255,7 +257,9 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); } + 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); diff --git a/src/js/controllers/modals/txpDetails.js b/src/js/controllers/modals/txpDetails.js index 3804cd830..a9fd5656c 100644 --- a/src/js/controllers/modals/txpDetails.js +++ b/src/js/controllers/modals/txpDetails.js @@ -34,7 +34,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi walletService.publishAndSign($scope.wallet, $scope.tx, function(err, txp) { $scope.$emit('UpdateTx'); if (err) return setSendError(err); - $scope.close(true); + $scope.close(); }); }; @@ -50,7 +50,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi if (err) return setError(err, gettextCatalog.getString('Could not reject payment')); - $scope.close(true); + $scope.close(); }); @@ -70,7 +70,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi return setError(err, gettextCatalog.getString('Could not delete payment proposal')); } - $scope.close(true); + $scope.close(); }); }, 10); }; @@ -87,7 +87,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi return setError(err, gettextCatalog.getString('Could not broadcast payment')); } - $scope.close(true); + $scope.close(); }); }, 10); }; @@ -172,10 +172,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi }); }; - $scope.close = function(shouldEmit) { - if (shouldEmit) - $rootScope.$emit('Local/TxAction', $scope.wallet.id); - + $scope.close = function() { $scope.loading = null; $scope.txpDetailsModal.hide(); }; diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index ac8ef2750..3abf9f157 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -106,6 +106,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', $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); }), diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index dbad76e34..2e11c97d4 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -123,7 +123,6 @@ angular.module('copayApp.services') if (wallet.cachedActivity) wallet.cachedActivity.isValid = false; - if (wallet.cachedTxps) wallet.cachedTxps.isValid = false; diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index bd447f7ff..f5bf2e45d 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -92,13 +92,17 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim root.invalidateCache = function(wallet) { - if (wallet.cachedStatus) { + if (wallet.cachedStatus) wallet.cachedStatus.isValid = false; - } - if (wallet.completeHistory) { + if (wallet.completeHistory) wallet.completeHistory.isValid = false; - } + + if (wallet.cachedActivity) + wallet.cachedActivity.isValid = false; + + if (wallet.cachedTxps) + wallet.cachedTxps.isValid = false; }; root.getStatus = function(wallet, opts, cb) { @@ -623,6 +627,10 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim wallet.removeTxProposal(txp, function(err) { $log.debug('Transaction removed'); + + root.invalidateCache(wallet); + $rootScope.$emit('Local/TxAction', wallet.id); + return cb(err); }); }; @@ -864,8 +872,8 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim ongoingProcess.set('rejectTx', true); root.rejectTx(wallet, txp, function(err, txpr) { root.invalidateCache(wallet); - ongoingProcess.set('rejectTx', false); + if (err) return cb(err); $rootScope.$emit('Local/TxAction', wallet.id); @@ -935,6 +943,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim var msg = err.message ? err.message : gettext('The payment was created but could not be completed. Please try again from home screen'); + $rootScope.$emit('Local/TxAction', wallet.id); return cb(msg); } @@ -945,18 +954,18 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim ongoingProcess.set('broadcastingTx', false); if (err) return cb('sign error' + err); + $rootScope.$emit('Local/TxAction', wallet.id); var type = root.getViewStatus(wallet, broadcastedTxp); root.openStatusModal(type, broadcastedTxp, function() { - $rootScope.$emit('Local/TxAction', wallet.id); }); return cb(null, broadcastedTxp) }); } else { + $rootScope.$emit('Local/TxAction', wallet.id); + var type = root.getViewStatus(wallet, signedTxp); root.openStatusModal(type, signedTxp, function() { - root.invalidateCache(wallet); - $rootScope.$emit('Local/TxAction', wallet.id); }); return cb(null, signedTxp); }