+
+
+ Could not update Wallet
+
[Tap to retry]
+
+
+
+
+
-
- {{index.totalBalanceStr || '...'}}
+
+ {{index.totalBalanceStr }}
- ...
-
-
{{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}
-
N/A
+
+ Opening Wallet...
+ Updating Status...
+ Updating Balance...
+ Updating Pending Transactions...
+ Scanning Wallet funds...
+ Recreating Wallet on BWS...
-
-
+
+ {{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}
@@ -39,7 +50,6 @@
-
@@ -99,16 +109,6 @@ You can recreate it from the local information.
-
- Opening Wallet...
- Updating Status...
- Updating Balance...
- Updating Pending Transactions...
- Scanning Wallet funds...
- Recreating Wallet on BWS...
-
-
-
diff --git a/src/css/main.css b/src/css/main.css
index 16e9b9202..d04a4b59e 100644
--- a/src/css/main.css
+++ b/src/css/main.css
@@ -1137,3 +1137,4 @@ input.ng-invalid-match, input.ng-invalid-match:focus {
.tx-details-blockchain li {
cursor: pointer !important;
}
+
diff --git a/src/css/mobile.css b/src/css/mobile.css
index 92cc05557..3c33d261e 100644
--- a/src/css/mobile.css
+++ b/src/css/mobile.css
@@ -154,6 +154,7 @@ _:-ms-fullscreen, :root .main {
padding: 3rem 1rem;
margin-bottom: 11px;
color: #fff;
+ height: 175px;
}
.scroll-section {
@@ -476,8 +477,10 @@ a.pin-button:active {
.dr-notification-wrapper.offline {
position: absolute;
- top: 45px;
- z-index: 11;
+ top: 0px;
+ z-index: 2000;
+ opacity: 1.0 !important;
+ background-color: #2C3E50;
}
.dr-notification-wrapper.client-error {
diff --git a/src/js/controllers/history.js b/src/js/controllers/history.js
index 8c9660959..7dc20d6ec 100644
--- a/src/js/controllers/history.js
+++ b/src/js/controllers/history.js
@@ -9,7 +9,6 @@ angular.module('copayApp.controllers').controller('historyController',
var fc = profileService.focusedClient;
var config = configService.getSync().wallet.settings;
- var formatAmount = profileService.formatAmount;
this.unitToSatoshi = config.unitToSatoshi;
this.satToUnit = 1 / this.unitToSatoshi;
this.unitName = config.unitName;
@@ -42,10 +41,9 @@ angular.module('copayApp.controllers').controller('historyController',
this.openTxModal = function(btx) {
var self = this;
var fc = profileService.focusedClient;
- var ModalInstanceCtrl = function($scope, $modalInstance, profileService) {
+ var ModalInstanceCtrl = function($scope, $modalInstance) {
$scope.btx = btx;
$scope.settings = config;
- $scope.btx.amountStr = profileService.formatAmount(btx.amount);
$scope.color = fc.backgroundColor;
$scope.getAmount = function(amount) {
@@ -73,11 +71,6 @@ angular.module('copayApp.controllers').controller('historyController',
});
};
-
- this.formatAmount = function(amount) {
- return profileService.formatAmount(amount);
- };
-
this.hasAction = function(actions, action) {
return actions.hasOwnProperty('create');
};
diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js
index 770dd1df0..471b6acd8 100644
--- a/src/js/controllers/index.js
+++ b/src/js/controllers/index.js
@@ -15,9 +15,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r
self[processName] = isOn;
self.onGoingProcess[processName] = isOn;
- // derived rules
- self.hideBalance = self.updatingBalance || self.updatingStatus || self.openingWallet;
-
var name;
self.anyOnGoingProcess = lodash.any(self.onGoingProcess, function(isOn, processName) {
if (isOn)
@@ -26,6 +23,9 @@ angular.module('copayApp.controllers').controller('indexController', function($r
});
// The first one
self.onGoingProcessName = name;
+ $timeout(function() {
+ $rootScope.$apply();
+ });
};
self.setFocusedWallet = function() {
@@ -69,8 +69,13 @@ angular.module('copayApp.controllers').controller('indexController', function($r
var get = function(cb) {
if (walletStatus)
return cb(null, walletStatus);
- else
- return fc.getStatus(cb);
+ else {
+ self.updateError = false;
+ return fc.getStatus(function(err, ret) {
+ if (err) self.updateError = true;
+ return cb(err, ret);
+ });
+ }
};
var fc = profileService.focusedClient;
@@ -142,18 +147,19 @@ angular.module('copayApp.controllers').controller('indexController', function($r
}
self.skipHistory = skip || 0;
$timeout(function() {
- self.setOngoingProcess('updatingTxHistory', true);
$log.debug('Updating Transaction History');
+ self.txHistoryError = false;
+ self.updatingTxHistory = true;
fc.getTxHistory({
skip: self.skipHistory,
limit: self.limitHistory + 1
}, function(err, txs) {
- self.setOngoingProcess('updatingTxHistory', false);
+ self.updatingTxHistory = false;
if (err) {
$log.debug('TxHistory ERROR:', err);
- $scope.$emit('Local/ClientError', err);
- }
- else {
+ self.handleError(err);
+ self.txHistoryError = true;
+ } else {
$log.debug('Wallet Transaction History:', txs);
self.skipHistory = self.skipHistory + self.limitHistory;
self.setTxHistory(txs);
@@ -169,8 +175,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r
$scope.$emit('Local/NotAuthorized');
} else if (err.code === 'NOTFOUND') {
$scope.$emit('Local/BWSNotFound');
- } else if (err.code === 'ETIMEDOUT') {
- $scope.$emit('Local/BWSTimeOut');
} else {
$scope.$emit('Local/ClientError', err);
}
@@ -180,9 +184,11 @@ angular.module('copayApp.controllers').controller('indexController', function($r
self.updateColor();
$timeout(function() {
self.setOngoingProcess('openingWallet', true);
+ self.updateError = false;
fc.openWallet(function(err, walletStatus) {
self.setOngoingProcess('openingWallet', false);
if (err) {
+ self.updateError = true;
self.handleError(err);
return;
}
@@ -342,6 +348,12 @@ angular.module('copayApp.controllers').controller('indexController', function($r
self.notAuthorized = false;
self.setOngoingProcess('recreating', false);
+ if (err) {
+ self.clientError = 'Could not recreate wallet:' + err;
+ $rootScope.$apply();
+ return;
+ }
+
profileService.setWalletClients();
$timeout(function() {
$rootScope.$emit('Local/WalletImported', self.walletId);
@@ -371,6 +383,8 @@ angular.module('copayApp.controllers').controller('indexController', function($r
c.scanning = false;
if (self.walletId == walletId)
self.setOngoingProcess('scanning', false);
+ self.clientError = 'Could not scan wallet:' + err;
+ $rootScope.$apply();
}
});
};
@@ -390,14 +404,19 @@ angular.module('copayApp.controllers').controller('indexController', function($r
go.walletHome();
});
- $rootScope.$on('Local/OnLine', function(event) {
- self.isOffLine = false;
- self.updateAll();
- self.updateTxHistory();
+ lodash.each(['Local/Online', 'Local/Resume'], function(eventName) {
+ $rootScope.$on(eventName, function(event) {
+ $log.debug('### Online event');
+ self.isOffline = false;
+ self.clientError = null;
+ self.updateAll();
+ self.updateTxHistory();
+ });
});
- $rootScope.$on('Local/OffLine', function(event) {
- self.isOffLine = true;
+ $rootScope.$on('Local/Offline', function(event) {
+ $log.debug('========== Offline event');
+ self.isOffline = true;
});
$rootScope.$on('Local/BackupDone', function(event) {
@@ -415,13 +434,17 @@ angular.module('copayApp.controllers').controller('indexController', function($r
$rootScope.$apply();
});
- $rootScope.$on('Local/BWSTimeOut', function(event) {
- self.clientError = 'Could not access to Bitcore Wallet Service: Timed out';
- $rootScope.$apply();
- });
-
$rootScope.$on('Local/ClientError', function(event, err) {
- self.clientError = err;
+ if (err.code && err.code === 'NOTAUTHORIZED') {
+ // Show not error, just redirect to home (where the recreate option is shown)
+ go.walletHome();
+ } else if (err && err.cors == 'rejected') {
+ $log.debug('CORS error:', err);
+ } else if (err.code === 'ETIMEDOUT') {
+ $log.debug('Time out:', err);
+ } else {
+ self.clientError = err;
+ }
$rootScope.$apply();
});
@@ -501,7 +524,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r
$rootScope.$on('Local/NeedsPassword', function(event, isSetup, cb) {
self.askPassword = {
isSetup: isSetup,
- callback: function (err, pass) {
+ callback: function(err, pass) {
self.askPassword = null;
return cb(err, pass);
},
diff --git a/src/js/controllers/receive.js b/src/js/controllers/receive.js
index 833db0804..fddd93ff4 100644
--- a/src/js/controllers/receive.js
+++ b/src/js/controllers/receive.js
@@ -16,15 +16,17 @@ angular.module('copayApp.controllers').controller('receiveController',
this.newAddress = function() {
self.generatingAddress = true;
+ self.error = null;
fc.createAddress(function(err, addr) {
+ self.generatingAddress = false;
if (err) {
$log.debug('Creating address ERROR:', err);
$scope.$emit('Local/ClientError', err);
+ self.error='Could not generate address';
} else {
self.addr = addr.address;
storageService.storeLastAddress(fc.credentials.walletId, addr.address, function() {});
}
- self.generatingAddress = false;
$scope.$digest();
});
};
diff --git a/src/js/init.js b/src/js/init.js
index e5dc0ab5e..339aa0f7e 100644
--- a/src/js/init.js
+++ b/src/js/init.js
@@ -23,13 +23,24 @@ angular.element(document).ready(function() {
window.location = '#/';
}
}, false);
-
+
document.addEventListener('resume', function() {
+ window.location = '#/cordova/resume';
setTimeout(function() {
window.ignoreMobilePause = false;
}, 100);
}, false);
+ // We are not emitting here, since when the BWS socket reconnects,
+ // update will be triggered
+ document.addEventListener('offline', function() {
+ window.location = '#/cordova/offline';
+ }, false);
+ //
+ // document.addEventListener("online", function() {
+ // window.location = '#/cordoba/online';
+ // }, false);
+
document.addEventListener('backbutton', function() {
window.location = '#/walletHome';
}, false);
@@ -38,13 +49,7 @@ angular.element(document).ready(function() {
window.location = '#/preferences';
}, false);
- document.addEventListener('offline', function() {
- window.location = '#/network/offline';
- }, false);
- document.addEventListener("online", function() {
- window.location = '#/network/online';
- }, false);
setTimeout(function() {
navigator.splashscreen.hide();
diff --git a/src/js/routes.js b/src/js/routes.js
index 9915657b0..506b0d1a7 100644
--- a/src/js/routes.js
+++ b/src/js/routes.js
@@ -14,7 +14,6 @@ if (window && window.navigator) {
angular
.module('copayApp')
.config(function(bwcServiceProvider, $stateProvider, $urlRouterProvider) {
- bwcServiceProvider.setBaseUrl('http://192.168.1.102:3001/bws/api');
$urlRouterProvider.otherwise('/');
$stateProvider
@@ -323,8 +322,8 @@ angular
}
}
})
-
- .state('preferencesAltCurrency', {
+
+ .state('preferencesAltCurrency', {
url: '/preferencesAltCurrency',
templateUrl: 'views/preferencesAltCurrency.html',
walletShouldBeComplete: true,
@@ -410,32 +409,35 @@ angular
})
.state('add', {
- url: '/add',
- needProfile: true,
- views: {
- 'main': {
- templateUrl: 'views/add.html'
- },
- 'topbar': {
- templateUrl: 'views/includes/topbar.html',
- controller: function($scope) {
- $scope.titleSection = 'Add wallet';
- $scope.goBackToState = 'walletHome';
+ url: '/add',
+ needProfile: true,
+ views: {
+ 'main': {
+ templateUrl: 'views/add.html'
+ },
+ 'topbar': {
+ templateUrl: 'views/includes/topbar.html',
+ controller: function($scope) {
+ $scope.titleSection = 'Add wallet';
+ $scope.goBackToState = 'walletHome';
+ }
}
}
- }
- })
- .state('network', {
- url: '/network/:status',
+ })
+ .state('cordova', {
+ url: '/cordova/:status',
views: {
'main': {
controller: function($scope, $stateParams, go) {
switch ($stateParams.status) {
- case 'online':
- $scope.$emit('Local/OnLine');
+ case 'resume':
+ $scope.$emit('Local/Resume');
break;
+ // case 'online':
+ // // $scope.$emit('Local/Online');
+ // break;
case 'offline':
- $scope.$emit('Local/OffLine');
+ $scope.$emit('Local/Offline');
break;
};
go.walletHome();
@@ -492,8 +494,7 @@ angular
if (pageWeight[fromState.name] > pageWeight[toState.name]) {
$rootScope.$emit('Animation/SwipeRight');
- }
- else if (pageWeight[fromState.name] < pageWeight[toState.name]) {
+ } else if (pageWeight[fromState.name] < pageWeight[toState.name]) {
$rootScope.$emit('Animation/SwipeLeft');
}
diff --git a/src/js/services/configService.js b/src/js/services/configService.js
index 7e4bff118..2474a95bc 100644
--- a/src/js/services/configService.js
+++ b/src/js/services/configService.js
@@ -13,6 +13,7 @@ angular.module('copayApp.services').factory('configService', function(localStora
// Bitcore wallet service URL
bws: {
url: 'http://162.242.245.33:3004/bws/api',
+// url: 'http://localhost:3001/bws/api',
},
// insight
diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js
index 7d5d1496e..3e570ed68 100644
--- a/src/js/services/profileService.js
+++ b/src/js/services/profileService.js
@@ -60,6 +60,20 @@ angular.module('copayApp.services')
root.walletClients[credentials.walletId] = client;
client.removeAllListeners();
+
+ client.on('reconnect', function() {
+ if (root.focusedClient.credentials.walletId == client.credentials.walletId) {
+ $rootScope.$emit('Local/Online');
+ }
+ });
+
+
+ client.on('reconnecting', function() {
+ if (root.focusedClient.credentials.walletId == client.credentials.walletId) {
+ $rootScope.$emit('Local/Offline');
+ }
+ });
+
client.on('notification', function(n) {
$log.debug('BWC Notification:', n);
notificationService.newBWCNotification(n,