diff --git a/src/pages/add/copayers/copayers.ts b/src/pages/add/copayers/copayers.ts
index 9a5770823..9022ec0a8 100644
--- a/src/pages/add/copayers/copayers.ts
+++ b/src/pages/add/copayers/copayers.ts
@@ -60,10 +60,6 @@ export class CopayersPage {
});
}
- ionViewWillLeave() {
- this.events.unsubscribe('bwsEvent');
- }
-
private updateWallet(): void {
this.logger.debug('Updating wallet:' + this.wallet.name)
this.walletProvider.getStatus(this.wallet, {}).then((status: any) => {
diff --git a/src/pages/add/create-wallet/create-wallet.ts b/src/pages/add/create-wallet/create-wallet.ts
index 6af80b099..f18edd71e 100644
--- a/src/pages/add/create-wallet/create-wallet.ts
+++ b/src/pages/add/create-wallet/create-wallet.ts
@@ -198,7 +198,7 @@ export class CreateWalletPage implements OnInit {
this.profileProvider.createWallet(opts).then((wallet: any) => {
this.onGoingProcessProvider.set('creatingWallet', false);
- this.events.publish('Local/WalletAction', wallet.credentials.walletId);
+ this.events.publish('status:updated');
this.walletProvider.updateRemotePreferences(wallet);
this.pushNotificationsProvider.updateSubscription(wallet);
diff --git a/src/pages/add/import-wallet/import-wallet.ts b/src/pages/add/import-wallet/import-wallet.ts
index 84d9f11b6..215645977 100644
--- a/src/pages/add/import-wallet/import-wallet.ts
+++ b/src/pages/add/import-wallet/import-wallet.ts
@@ -204,7 +204,7 @@ export class ImportWalletPage {
private finish(wallet: any): void {
this.walletProvider.updateRemotePreferences(wallet).then(() => {
this.profileProvider.setBackupFlag(wallet.credentials.walletId);
- this.events.publish('Local/WalletAction', wallet.credentials.walletId);
+ this.events.publish('status:updated');
if (this.fromOnboarding) {
this.profileProvider.setDisclaimerAccepted().catch((err: any) => {
this.logger.error(err);
diff --git a/src/pages/add/join-wallet/join-wallet.ts b/src/pages/add/join-wallet/join-wallet.ts
index cd9dd14d5..6c2fa76d2 100644
--- a/src/pages/add/join-wallet/join-wallet.ts
+++ b/src/pages/add/join-wallet/join-wallet.ts
@@ -148,7 +148,7 @@ export class JoinWalletPage {
this.profileProvider.joinWallet(opts).then((wallet: any) => {
this.onGoingProcessProvider.set('joiningWallet', false);
- this.events.publish('Local/WalletAction', wallet.credentials.walletId);
+ this.events.publish('status:updated');
this.walletProvider.updateRemotePreferences(wallet);
if (!wallet.isComplete()) {
diff --git a/src/pages/home/home.html b/src/pages/home/home.html
index df01c8052..87a973e57 100644
--- a/src/pages/home/home.html
+++ b/src/pages/home/home.html
@@ -65,7 +65,7 @@
Payment Proposals
- 3">{{txpsN}}
+ {{txpsN}}
diff --git a/src/pages/home/home.ts b/src/pages/home/home.ts
index 1ba93bd3f..a913dc39a 100644
--- a/src/pages/home/home.ts
+++ b/src/pages/home/home.ts
@@ -70,6 +70,7 @@ export class HomePage {
private isNW: boolean;
private isWindowsPhoneApp: boolean;
+ private updatingWalletId: object;
constructor(
private navCtrl: NavController,
@@ -94,19 +95,17 @@ export class HomePage {
private bitPayCardProvider: BitPayCardProvider,
private translate: TranslateService
) {
+ this.updatingWalletId = {};
this.cachedBalanceUpdateOn = '';
this.isNW = this.platformProvider.isNW;
this.isWindowsPhoneApp = this.platformProvider.isWP;
this.showReorderBtc = false;
this.showReorderBch = false;
- this.setWallets();
}
ionViewWillEnter() {
this.config = this.configProvider.get();
- this.setWallets();
-
this.recentTransactionsEnabled = this.config.recentTransactions.enabled;
if (this.recentTransactionsEnabled) this.getNotifications();
@@ -120,15 +119,19 @@ export class HomePage {
return homeIntegrations.show == true;
});
+ // BWS Events: Update Status per Wallet
+ // NewBlock, NewCopayer, NewAddress, NewTxProposal, TxProposalAcceptedBy, TxProposalRejectedBy, txProposalFinallyRejected,
+ // txProposalFinallyAccepted, TxProposalRemoved, NewIncomingTx, NewOutgoingTx
this.events.subscribe('bwsEvent', (walletId: string) => {
this.update(walletId);
});
- this.events.subscribe('Local/TxAction', (walletId: string) => {
- this.update(walletId);
- });
- this.events.subscribe('Local/WalletAction', (walletId: string) => {
- this.update(walletId);
+
+ // Create, Join, Import and Delete -> Get Wallets -> Update Status for All Wallets
+ this.events.subscribe('status:updated', () => {
+ this.setWallets();
});
+
+ // Hide stars to rate
this.events.subscribe('feedback:hide', () => {
this.showRateCard = false;
});
@@ -156,21 +159,32 @@ export class HomePage {
ionViewDidLoad() {
this.logger.info('ionViewDidLoad HomePage');
- this.updateAllWallets();
+ this.setWallets();
}
- private update(walletId: string): void {
- this.logger.debug('Got action for wallet ' + walletId);
- let wallet = this.profileProvider.getWallet(walletId);
- this.updateWallet(wallet);
+ private startUpdatingWalletId(walletId: string) {
+ this.updatingWalletId[walletId] = true;
+ }
+
+ private stopUpdatingWalletId(walletId: string) {
+ setTimeout(() => {
+ this.updatingWalletId[walletId] = false;
+ }, 10000);
+ }
+
+ private update(walletId: string) {
if (this.recentTransactionsEnabled) this.getNotifications();
+ this.updateWallet(walletId);
}
- private setWallets(): void {
+ private setWallets = _.debounce(() => {
this.wallets = this.profileProvider.getWallets();
this.walletsBtc = this.profileProvider.getWallets({ coin: 'btc' });
this.walletsBch = this.profileProvider.getWallets({ coin: 'bch' });
- }
+ this.updateAllWallets();
+ }, 10000, {
+ 'leading': true
+ });
public checkHomeTip(): void {
this.persistenceProvider.getHomeTipAccepted().then((value: string) => {
@@ -217,24 +231,34 @@ export class HomePage {
this.persistenceProvider.setFeedbackInfo(feedbackInfo);
}
- private updateWallet(wallet: any): void {
- this.logger.debug('Updating wallet:' + wallet.name)
+ private updateWallet(walletId: string): void {
+ if (this.updatingWalletId[walletId]) return;
+ this.startUpdatingWalletId(walletId);
+ let wallet = this.profileProvider.getWallet(walletId);
this.walletProvider.getStatus(wallet, {}).then((status: any) => {
wallet.status = status;
+ wallet.error = null;
+ this.profileProvider.setLastKnownBalance(wallet.id, wallet.status.availableBalanceStr);
+
+ //this.setWallets();
this.updateTxps();
+ this.stopUpdatingWalletId(walletId);
}).catch((err: any) => {
this.logger.error(err);
+ this.stopUpdatingWalletId(walletId);
});
}
- private updateTxps(): void {
+ private updateTxps = _.debounce(() => {
this.profileProvider.getTxps({ limit: 3 }).then((data: any) => {
this.txps = data.txps;
this.txpsN = data.n;
}).catch((err: any) => {
this.logger.error(err);
});
- }
+ }, 5000, {
+ 'leading': true
+ });
private getNotifications = _.debounce(() => {
this.profileProvider.getNotifications({ limit: 3 }).then((data: any) => {
@@ -243,9 +267,9 @@ export class HomePage {
}).catch((err: any) => {
this.logger.error(err);
});
- }, 2000, {
- 'leading': true
- });
+ }, 5000, {
+ 'leading': true
+ });
private updateAllWallets(): void {
let wallets: Array = [];
diff --git a/src/pages/integrations/shapeshift/shapeshift.ts b/src/pages/integrations/shapeshift/shapeshift.ts
index ca9f0aa4e..bf2f9a7a3 100644
--- a/src/pages/integrations/shapeshift/shapeshift.ts
+++ b/src/pages/integrations/shapeshift/shapeshift.ts
@@ -43,10 +43,6 @@ export class ShapeshiftPage {
});
}
- ionViewWillLeave() {
- this.events.unsubscribe('bwsEvent');
- }
-
public openExternalLink(url: string): void {
this.externalLinkProvider.open(url);
}
diff --git a/src/pages/settings/wallet-settings/wallet-settings-advanced/wallet-delete/wallet-delete.ts b/src/pages/settings/wallet-settings/wallet-settings-advanced/wallet-delete/wallet-delete.ts
index 48d09e336..593613850 100644
--- a/src/pages/settings/wallet-settings/wallet-settings-advanced/wallet-delete/wallet-delete.ts
+++ b/src/pages/settings/wallet-settings/wallet-settings-advanced/wallet-delete/wallet-delete.ts
@@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
-import { NavController, NavParams } from 'ionic-angular';
+import { NavController, NavParams, Events } from 'ionic-angular';
import { Logger } from '../../../../../providers/logger/logger';
//providers
@@ -26,6 +26,7 @@ export class WalletDeletePage {
private onGoingProcessProvider: OnGoingProcessProvider,
private pushNotificationsProvider: PushNotificationsProvider,
private logger: Logger,
+ private events: Events,
private translate: TranslateService
) {
@@ -51,6 +52,7 @@ export class WalletDeletePage {
public deleteWallet(): void {
this.onGoingProcessProvider.set('deletingWallet', true);
this.profileProvider.deleteWalletClient(this.wallet).then(() => {
+ this.events.publish('status:updated');
this.onGoingProcessProvider.set('deletingWallet', false);
this.pushNotificationsProvider.unsubscribe(this.wallet);
this.navCtrl.popToRoot({ animate: false });
@@ -59,4 +61,4 @@ export class WalletDeletePage {
this.popupProvider.ionicAlert(this.translate.instant('Error'), err.message || err);
});
};
-}
\ No newline at end of file
+}
diff --git a/src/pages/tx-details/tx-details.ts b/src/pages/tx-details/tx-details.ts
index 518e003ec..185ff06aa 100644
--- a/src/pages/tx-details/tx-details.ts
+++ b/src/pages/tx-details/tx-details.ts
@@ -86,10 +86,6 @@ export class TxDetailsPage {
});
}
- ionViewWillLeave() {
- this.events.unsubscribe('bwsEvent');
- }
-
public readMore(): void {
let url = 'https://github.com/bitpay/copay/wiki/COPAY---FAQ#amount-too-low-to-spend';
let optIn = true;
diff --git a/src/pages/txp-details/txp-details.ts b/src/pages/txp-details/txp-details.ts
index 5be2b5605..198795315 100644
--- a/src/pages/txp-details/txp-details.ts
+++ b/src/pages/txp-details/txp-details.ts
@@ -91,9 +91,6 @@ export class TxpDetailsPage {
this.tx.canBeRemoved = (Date.now() / 1000 - (this.tx.ts || this.tx.createdOn)) > this.GLIDERA_LOCK_TIME;
}
}
- this.events.subscribe('accepted', () => {
- this.sign();
- });
this.events.subscribe('bwsEvent', (walletId: string, type: string, n: number) => {
_.each([
@@ -215,7 +212,6 @@ export class TxpDetailsPage {
public sign(): void {
this.loading = true;
this.walletProvider.publishAndSign(this.wallet, this.tx).then((txp: any) => {
- this.events.publish('UpdateTx');
this.openSuccessModal();
}).catch((err: any) => {
this.setError(err, ('Could not send payment'));
@@ -248,7 +244,6 @@ export class TxpDetailsPage {
}).catch((err: any) => {
this.onGoingProcessProvider.set('removeTx', false);
if (err && !(err.message && err.message.match(/Unexpected/))) {
- this.events.publish('UpdateTx');
this.setError(err, this.translate.instant('Could not delete payment proposal'));
}
});
@@ -308,7 +303,6 @@ export class TxpDetailsPage {
};
public close(): void {
- this.events.unsubscribe('bwsEvent');
this.loading = false;
this.viewCtrl.dismiss();
}
diff --git a/src/pages/wallet-details/wallet-details.ts b/src/pages/wallet-details/wallet-details.ts
index e1bb143c3..be6fae244 100644
--- a/src/pages/wallet-details/wallet-details.ts
+++ b/src/pages/wallet-details/wallet-details.ts
@@ -87,7 +87,6 @@ export class WalletDetailsPage {
}
ionViewWillLeave() {
- this.events.unsubscribe('bwsEvent');
this.events.unsubscribe('Local/TxAction');
}
diff --git a/src/providers/profile/profile.ts b/src/providers/profile/profile.ts
index c88015979..b4347e679 100644
--- a/src/providers/profile/profile.ts
+++ b/src/providers/profile/profile.ts
@@ -162,8 +162,7 @@ export class ProfileProvider {
wallet.on('walletCompleted', () => {
this.logger.debug('Wallet completed');
this.updateCredentials(JSON.parse(wallet.export()))
- // TODO: never used
- //this.events.publish('wallet:completed', walletId);
+ this.events.publish('status:updated');
});
wallet.initialize({
@@ -707,7 +706,6 @@ export class ProfileProvider {
return reject(err);
});
}).catch((err: any) => {
- this.events.publish('Local/DeviceError', err);
return reject(err);
});
});
diff --git a/src/providers/wallet/wallet.ts b/src/providers/wallet/wallet.ts
index bd74fa538..d4dd3462e 100644
--- a/src/providers/wallet/wallet.ts
+++ b/src/providers/wallet/wallet.ts
@@ -376,8 +376,10 @@ export class WalletProvider {
return setTimeout(() => {
this.createAddress(wallet);
}, 5000);
- } else if (err instanceof this.errors.MAIN_ADDRESS_GAP_REACHED || (err.message && err.message == 'MAIN_ADDRESS_GAP_REACHED')) {
- this.logger.warn(err);
+ } else if (
+ err instanceof this.errors.MAIN_ADDRESS_GAP_REACHED || (err.message && err.message == 'MAIN_ADDRESS_GAP_REACHED')
+ ) {
+ this.logger.warn(this.bwcErrorProvider.msg(err, 'Server Error'));
prefix = null;
wallet.getMainAddresses({
reverse: true,
@@ -386,10 +388,11 @@ export class WalletProvider {
if (err) return reject(err);
return resolve(addr[0].address);
});
- };
- this.bwcErrorProvider.cb(err, prefix).then((msg) => {
- return reject(msg);
- });
+ } else {
+ this.bwcErrorProvider.cb(err, prefix).then((msg) => {
+ return reject(msg);
+ });
+ }
} else
return resolve(addr.address);
});
@@ -534,7 +537,6 @@ export class WalletProvider {
});
}).catch((err) => {
- this.logger.warn(this.bwcErrorProvider.msg(err, 'Server Error')); //TODO
if (err instanceof this.errors.CONNECTION_ERROR || (err.message && err.message.match(/5../))) {
this.logger.info('Retrying history download in 5 secs...');
return reject(setTimeout(() => {