diff --git a/src/pages/add/create-wallet/create-wallet.html b/src/pages/add/create-wallet/create-wallet.html index 4bd8adfde..d4f3189dd 100644 --- a/src/pages/add/create-wallet/create-wallet.html +++ b/src/pages/add/create-wallet/create-wallet.html @@ -14,19 +14,19 @@
Your name - + - + Total number of copayers - + {{copayer}} - + Required number of signatures - + {{signature}} @@ -51,12 +51,12 @@ {{opt.label}} - + Wallet recovery phrase - + Add a password @@ -67,7 +67,7 @@ Password - + Confirm password diff --git a/src/pages/add/create-wallet/create-wallet.ts b/src/pages/add/create-wallet/create-wallet.ts index 7b252cf0b..8ef3754ec 100644 --- a/src/pages/add/create-wallet/create-wallet.ts +++ b/src/pages/add/create-wallet/create-wallet.ts @@ -3,13 +3,17 @@ import { NavController, NavParams } from 'ionic-angular'; import { Validators, FormBuilder, FormGroup } from '@angular/forms'; import { AppProvider } from '../../../providers/app/app'; +import { ProfileProvider } from '../../../providers/profile/profile'; + +import { HomePage } from '../../../pages/home/home'; + import * as _ from 'lodash'; @Component({ selector: 'page-create-wallet', templateUrl: 'create-wallet.html' }) -export class CreateWalletPage implements OnInit{ +export class CreateWalletPage implements OnInit { public formData: any; public showAdvOpts: boolean; public COPAYER_PAIR_LIMITS: Array; @@ -25,24 +29,25 @@ export class CreateWalletPage implements OnInit{ private createForm: FormGroup; constructor( - public navCtrl: NavController, - public navParams: NavParams, + private navCtrl: NavController, + private navParams: NavParams, private app: AppProvider, - private fb: FormBuilder + private fb: FormBuilder, + private profileProvider: ProfileProvider ) { this.isShared = navParams.get('isShared'); this.title = this.isShared ? 'Create shared wallet' : 'Create personal wallet'; this.derivationPathByDefault = "m/44'/0'/0'"; this.derivationPathForTestnet = "m/44'/1'/0'"; this.showAdvOpts = false; - this.COPAYER_PAIR_LIMITS = [2, 3, 4, 5, 6]; + this.COPAYER_PAIR_LIMITS = [1, 2, 3, 4, 5, 6]; this.copayers = _.clone(this.COPAYER_PAIR_LIMITS); this.signatures = _.clone(this.COPAYER_PAIR_LIMITS); this.formData = { walletName: null, - copayerName: null, - copayerSelected: this.copayers[0], - signatureSelected: this.copayers[0], + myName: null, + totalCopayers: 1, + requiredCopayers: 1, bwsURL: 'https://bws.bitpay.com/bws/api', recoveryPhrase: null, addPassword: false, @@ -50,7 +55,7 @@ export class CreateWalletPage implements OnInit{ confirmPassword: null, recoveryPhraseBackedUp: null, derivationPath: this.derivationPathByDefault, - testnet: false, + testnetEnabled: false, singleAddress: false, }; this.appName = this.app.info.name; @@ -60,9 +65,9 @@ export class CreateWalletPage implements OnInit{ ngOnInit() { this.createForm = this.fb.group({ walletName: ['', Validators.required], - copayerName: [''], - copayerSelected: [''], - signatureSelected: [''], + myName: [''], + totalCopayers: [''], + requiredCopayers: [''], bwsURL: [''], selectedSeed: [''], recoveryPhrase: [''], @@ -76,14 +81,14 @@ export class CreateWalletPage implements OnInit{ }); if (this.isShared) { - this.createForm.get('copayerName').setValidators([Validators.required]); + this.createForm.get('myName').setValidators([Validators.required]); } this.createForm.get('addPassword').valueChanges.subscribe((addPassword: boolean) => { if (addPassword) { this.createForm.get('password').setValidators([Validators.required]); this.createForm.get('confirmPassword').setValidators([Validators.required]); - }else { + } else { this.createForm.get('password').clearValidators(); this.createForm.get('confirmPassword').clearValidators(); } @@ -131,7 +136,7 @@ export class CreateWalletPage implements OnInit{ signaturesChange(signature: any) { // TODO modify based on copayers console.log(signature); - } + } resetFormFields() { this.formData.password = null; @@ -145,6 +150,23 @@ export class CreateWalletPage implements OnInit{ } create() { - console.log(this.formData); + var opts = { + name: this.formData.walletName, + m: this.formData.requiredCopayers, + n: this.formData.totalCopayers, + myName: this.formData.totalCopayers > 1 ? this.formData.myName : null, + networkName: this.formData.testnetEnabled && this.formData.coin != 'bch' ? 'testnet' : 'livenet', + bwsurl: this.formData.bwsurl, + singleAddress: this.formData.singleAddressEnabled, + walletPrivKey: this.formData._walletPrivKey, // Only for testing + coin: this.formData.coin + }; + + console.log(opts); + this.profileProvider.createWallet(opts).then((wallet) => { + console.log(wallet); + this.navCtrl.setRoot(HomePage); + this.navCtrl.popToRoot(); + }); } } diff --git a/src/pages/home/home.html b/src/pages/home/home.html index a82b69e8c..d892fb385 100644 --- a/src/pages/home/home.html +++ b/src/pages/home/home.html @@ -27,8 +27,9 @@

{{wallet.credentials.walletName}} {{wallet.credentials.m}}-{{wallet.credentials.n}}

-

{{wallet.credentials.coin}} - 10 BTC

+

{{wallet.status.totalBalanceStr ? wallet.status.totalBalanceStr : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' · ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' )}}

+ Scanning funds... - + \ No newline at end of file diff --git a/src/pages/home/home.ts b/src/pages/home/home.ts index f9b23094f..1649baa0f 100644 --- a/src/pages/home/home.ts +++ b/src/pages/home/home.ts @@ -3,38 +3,59 @@ import { NavController } from 'ionic-angular'; import { AddPage } from "../add/add"; import { ProfileProvider } from '../../providers/profile/profile'; import { ReleaseProvider } from '../../providers/release/release'; +import { WalletProvider } from '../../providers/wallet/wallet'; +import { BwcErrorProvider } from '../../providers/bwc-error/bwc-error'; +import * as _ from 'lodash'; @Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { - public wallets; + public wallets: any; constructor( - public navCtrl: NavController, - private profile: ProfileProvider, - private release: ReleaseProvider, + private navCtrl: NavController, + private profileProvider: ProfileProvider, + private releaseProvider: ReleaseProvider, + private walletProvider: WalletProvider, + private bwcErrorProvider: BwcErrorProvider ) { - this.release.getLatestAppVersion() - .catch((err) => { - console.log('Error:', err) - }) - .then((version) => { - console.log('Current app version:', version); - var result = this.release.checkForUpdates(version); - console.log('Update available:', result.updateAvailable); - }); + this.checkUpdate(); + this.wallets = this.profileProvider.getWallets(); + console.log(this.wallets); + this.updateAllWallets(); } ionViewDidLoad() { console.log('ionViewDidLoad HomePage'); - - this.wallets = this.profile.getWallets(); - console.log('[home.ts:20]', this.wallets); //TODO } - goToAddView() { + private updateAllWallets(): void { + _.each(this.wallets, (wallet: any) => { + this.walletProvider.getStatus(wallet, {}).then((status: any) => { + wallet.status = status; + this.profileProvider.setLastKnownBalance(wallet.id, wallet.status.totalBalanceStr); + }).catch((err) => { + wallet.error = (err === 'WALLET_NOT_REGISTERED') ? 'Wallet not registered' : this.bwcErrorProvider.msg(err); + console.log(err); + }); + }); + } + + private checkUpdate(): void { + this.releaseProvider.getLatestAppVersion() + .then((version) => { + console.log('Current app version:', version); + var result = this.releaseProvider.checkForUpdates(version); + console.log('Update available:', result.updateAvailable); + }) + .catch((err) => { + console.log('Error:', err); + }) + } + + public goToAddView(): void { this.navCtrl.push(AddPage); } } diff --git a/src/providers/profile/profile.ts b/src/providers/profile/profile.ts index 2ccf3a56a..6a037c374 100644 --- a/src/providers/profile/profile.ts +++ b/src/providers/profile/profile.ts @@ -111,6 +111,7 @@ export class ProfileProvider { wallet.m = wallet.credentials.m; wallet.n = wallet.credentials.n; wallet.coin = wallet.credentials.coin; + wallet.status = {}; this.updateWalletSettings(wallet); this.wallet[walletId] = wallet; @@ -155,7 +156,7 @@ export class ProfileProvider { wallet.setNotificationsInterval(this.UPDATE_PERIOD); wallet.openWallet((err: any) => { if (wallet.status !== true) - this.logger.debug('Wallet + ' + walletId + ' status:' + wallet.status) + this.logger.debug('Wallet + ' + walletId + ' status:' + JSON.stringify(wallet.status)); }); }); @@ -209,9 +210,9 @@ export class ProfileProvider { let now = Math.floor(Date.now() / 1000); let showRange = 600; // 10min; - this.getLastKnownBalance(wallet.id).then((data: string) => { + this.getLastKnownBalance(wallet.id).then((data: any) => { if (data) { - let parseData: any = JSON.parse(data); + let parseData: any = data; wallet.cachedBalance = parseData.balance; wallet.cachedBalanceUpdatedOn = (parseData.updatedOn < now - showRange) ? parseData.updatedOn : null; } @@ -222,11 +223,8 @@ export class ProfileProvider { }); } - public setLastKnownBalance(wid: string, balance: number): Promise { - return new Promise((resolve, reject) => { - this.persistenceProvider.setBalanceCache(wid, { balance: balance, updatedOn: Math.floor(Date.now() / 1000), }); - return resolve(); - }); + public setLastKnownBalance(wid: string, balance: number): void { + this.persistenceProvider.setBalanceCache(wid, { balance: balance, updatedOn: Math.floor(Date.now() / 1000), }); } private runValidation(wallet: any, delay?: number, retryDelay?: number) { diff --git a/src/providers/wallet/wallet.ts b/src/providers/wallet/wallet.ts index d7c0fef80..cd07e78a9 100644 --- a/src/providers/wallet/wallet.ts +++ b/src/providers/wallet/wallet.ts @@ -144,7 +144,7 @@ export class WalletProvider { } return reject(err); } - return resolve(null); + return resolve(ret); }); }) }; @@ -246,8 +246,10 @@ export class WalletProvider { }; let _getStatus = (initStatusHash: any, tries: number): Promise => { + return new Promise((resolve, reject) => { if (isStatusCached() && !opts.force) { + this.logger.debug('Wallet status cache hit:' + wallet.id); cacheStatus(wallet.cachedStatus); processPendingTxps(wallet.cachedStatus); @@ -258,6 +260,7 @@ export class WalletProvider { this.logger.debug('Updating Status:', wallet.credentials.walletName, tries); get().then((status) => { + let currentStatusHash = walletStatusHash(status); this.logger.debug('Status update. hash:' + currentStatusHash + ' Try:' + tries); if (opts.untilItChanges && initStatusHash == currentStatusHash && tries < this.WALLET_STATUS_MAX_TRIES && walletId == wallet.credentials.walletId) { @@ -283,7 +286,11 @@ export class WalletProvider { }); }; - _getStatus(walletStatusHash(null), 0); + _getStatus(walletStatusHash(null), 0).then((status) => { + resolve(status); + }).catch((err) => { + return reject(err); + });; }); }