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);
+ });;
});
}