-
Total Locked Balance:
{{lockedBalanceStr}}
diff --git a/src/js/controllers/proposals.js b/src/js/controllers/proposals.js
new file mode 100644
index 000000000..3747cd706
--- /dev/null
+++ b/src/js/controllers/proposals.js
@@ -0,0 +1,23 @@
+
+'use strict';
+
+angular.module('copayApp.controllers').controller('proposalsController',
+ function($timeout, $scope, profileService, $log, txpModalService) {
+ var self = this;
+
+
+ $scope.init = function() {
+ profileService.getTxps(50, function(err, txps) {
+ if (err) {
+ console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
+ return;
+ }
+ $scope.txps = txps;
+ $timeout(function() {
+ $scope.$apply();
+ }, 1);
+ });
+ }
+
+ $scope.openTxpModal = txpModalService.open;
+ });
diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js
index e88b3ac95..20d85c7d6 100644
--- a/src/js/controllers/tab-home.js
+++ b/src/js/controllers/tab-home.js
@@ -1,18 +1,23 @@
'use strict';
angular.module('copayApp.controllers').controller('tabHomeController',
- function($rootScope, $timeout, $scope, $state, $ionicScrollDelegate, lodash, profileService, walletService, configService, txFormatService, $ionicModal, $log, platformInfo, storageService) {
+ function($rootScope, $timeout, $scope, $state, $ionicScrollDelegate, lodash, profileService, walletService, configService, txFormatService, $ionicModal, $log, platformInfo, storageService, txpModalService) {
$scope.externalServices = {};
$scope.bitpayCardEnabled = true; // TODO
- var setNotifications = function(notifications) {
- $scope.notifications = notifications;
- $timeout(function() {
- $scope.$apply();
- }, 1);
+
+
+ var setPendingTxps = function(txps) {
+ if (!txps) {
+ $scope.txps = [];
+ return;
+ }
+ $scope.txps = lodash.sortBy(txps, 'createdOn').reverse();
};
+
+
$scope.updateAllWallets = function() {
$scope.wallets = profileService.getWallets();
if (lodash.isEmpty($scope.wallets)) return;
@@ -26,9 +31,25 @@ angular.module('copayApp.controllers').controller('tabHomeController',
walletService.getStatus(wallet, {}, function(err, status) {
if (err) {
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
- return;
+ } else {
+ 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);
+ });
}
- wallet.status = status;
});
});
@@ -41,8 +62,13 @@ angular.module('copayApp.controllers').controller('tabHomeController',
return;
}
$scope.fetchingNotifications = false;
- setNotifications(n);
+ $scope.notifications = n;
$ionicScrollDelegate.resize();
+
+ $timeout(function() {
+ $scope.$apply();
+ }, 1);
+
})
};
@@ -57,13 +83,27 @@ angular.module('copayApp.controllers').controller('tabHomeController',
profileService.getNotifications({
limit: 3
- }, function(err, n) {
+ }, function(err, notifications) {
if (err) {
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
return;
}
- setNotifications(n);
- $ionicScrollDelegate.resize();
+ $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);
+ })
})
});
};
@@ -101,4 +141,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
$scope.coinbaseEnabled = config.coinbase.enabled && !isWindowsPhoneApp;
});
+ $scope.openTxpModal = txpModalService.open;
+
+
});
diff --git a/src/js/controllers/walletDetails.js b/src/js/controllers/walletDetails.js
index 9994be0dd..7d1748b7c 100644
--- a/src/js/controllers/walletDetails.js
+++ b/src/js/controllers/walletDetails.js
@@ -1,6 +1,6 @@
'use strict';
-angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $ionicNavBarDelegate, $state, $stateParams, bwcError, profileService, lodash, configService, gettext, gettextCatalog, platformInfo, walletService, $ionicPopup) {
+angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $ionicNavBarDelegate, $state, $stateParams, bwcError, profileService, lodash, configService, gettext, gettextCatalog, platformInfo, walletService, $ionicPopup, txpModalService) {
var isCordova = platformInfo.isCordova;
var isWP = platformInfo.isWP;
@@ -47,26 +47,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
};
- var glideraActive = true; // TODO TODO TODO
- // isGlidera flag is a security measure so glidera status is not
- // only determined by the tx.message
- $scope.openTxpModal = function(tx) {
- var config = configService.getSync().wallet;
- var scope = $rootScope.$new(true);
- scope.tx = tx;
- scope.wallet = tx.wallet;
- scope.copayers = tx.wallet.copayers;
- scope.isGlidera = glideraActive;
- scope.currentSpendUnconfirmed = config.spendUnconfirmed;
-
- $ionicModal.fromTemplateUrl('views/modals/txp-details.html', {
- scope: scope
- }).then(function(modal) {
- scope.txpDetailsModal = modal;
- scope.txpDetailsModal.show();
- });
- };
-
+ $scope.openTxpModal = txpModalService.open;
var listeners = [
$rootScope.$on('bwsEvent', function(e, walletId) {
diff --git a/src/js/routes.js b/src/js/routes.js
index e70269936..40dde5682 100644
--- a/src/js/routes.js
+++ b/src/js/routes.js
@@ -147,7 +147,10 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
url: '/activity',
templateUrl: 'views/activity.html'
})
-
+ .state('proposals', {
+ url: '/proposals',
+ templateUrl: 'views/proposals.html'
+ })
/*
*
diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js
index 2c240035b..8fb2df403 100644
--- a/src/js/services/profileService.js
+++ b/src/js/services/profileService.js
@@ -123,6 +123,12 @@ angular.module('copayApp.services')
if (wallet.cachedActivity)
wallet.cachedActivity.isValid = false;
+
+ if (wallet.cachedTxps)
+ wallet.cachedTxps.isValid = false;
+
+
+
$rootScope.$emit('bwsEvent', wallet.id, n.type, n);
});
@@ -780,7 +786,7 @@ angular.module('copayApp.services')
};
- function getNotifications(wallet, cb2) {
+ function updateNotifications(wallet, cb2) {
if (isActivityCached(wallet) && !opts.force) return cb2();
wallet.getNotifications({
@@ -858,7 +864,7 @@ angular.module('copayApp.services')
};
lodash.each(w, function(wallet) {
- getNotifications(wallet, function(err) {
+ updateNotifications(wallet, function(err) {
j++;
if (err) {
$log.warn('Error updating notifications:' + err);
@@ -892,5 +898,33 @@ angular.module('copayApp.services')
});
};
+
+ root.getTxps = function(opts, cb) {
+ var MAX = 100;
+ opts = opts || {};
+
+ var w = root.getWallets();
+ if (lodash.isEmpty(w)) return cb();
+
+ 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.compact(lodash.flatten(txps)).slice(0,MAX);
+ var n = txps.length;
+ return cb(null, process(txps), n);
+ };
+
return root;
});
diff --git a/src/js/services/txpModalService.js b/src/js/services/txpModalService.js
new file mode 100644
index 000000000..a0cfce6e2
--- /dev/null
+++ b/src/js/services/txpModalService.js
@@ -0,0 +1,31 @@
+'use strict';
+
+angular.module('copayApp.services').factory('txpModalService', function(configService, $rootScope, $ionicModal) {
+
+ var root = {};
+
+
+ var glideraActive = true; // TODO TODO TODO
+ // isGlidera flag is a security measure so glidera status is not
+ // only determined by the tx.message
+
+
+ root.open = function(tx) {
+ var config = configService.getSync().wallet;
+ var scope = $rootScope.$new(true);
+ scope.tx = tx;
+ scope.wallet = tx.wallet;
+ scope.copayers = tx.wallet.copayers;
+ scope.isGlidera = glideraActive;
+ scope.currentSpendUnconfirmed = config.spendUnconfirmed;
+
+ $ionicModal.fromTemplateUrl('views/modals/txp-details.html', {
+ scope: scope
+ }).then(function(modal) {
+ scope.txpDetailsModal = modal;
+ scope.txpDetailsModal.show();
+ });
+ };
+
+ return root;
+});