mirror of https://github.com/BTCPrivate/copay.git
Merge pull request #7984 from gabrielbazan7/feat/tstranslations
[V4] FEAT: ts translations
This commit is contained in:
commit
3a2bc48b5d
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, Events } from 'ionic-angular';
|
import { NavController, NavParams, Events } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { WalletDetailsPage } from '../../../pages/wallet-details/wallet-details';
|
import { WalletDetailsPage } from '../../../pages/wallet-details/wallet-details';
|
||||||
|
@ -40,7 +41,8 @@ export class CopayersPage {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider,
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
private walletProvider: WalletProvider
|
private walletProvider: WalletProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.secret = null;
|
this.secret = null;
|
||||||
}
|
}
|
||||||
|
@ -77,15 +79,16 @@ export class CopayersPage {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, 'Could not update wallet')); // TODO: GetTextCatalog
|
let message = this.translate.instant('Could not update wallet');
|
||||||
|
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, message));
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public showDeletePopup(): void {
|
public showDeletePopup(): void {
|
||||||
let title = 'Confirm'; // TODO: GetTextCatalog
|
let title = this.translate.instant('Confirm');
|
||||||
let msg = 'Are you sure you want to cancel and delete this wallet?'; // TODO: GetTextCatalog
|
let msg = this.translate.instant('Are you sure you want to cancel and delete this wallet?');
|
||||||
this.popupProvider.ionicConfirm(title, msg, 'Ok', 'Cancel').then((res: any) => {
|
this.popupProvider.ionicConfirm(title, msg).then((res: any) => {
|
||||||
if (res) this.deleteWallet();
|
if (res) this.deleteWallet();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -100,7 +103,8 @@ export class CopayersPage {
|
||||||
this.navCtrl.parent.select(0);
|
this.navCtrl.parent.select(0);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.onGoingProcessProvider.set('deletingWallet', false);
|
this.onGoingProcessProvider.set('deletingWallet', false);
|
||||||
this.popupProvider.ionicAlert('Error', err.message || err); // TODO: GetTextCatalog
|
let errorText = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(errorText, err.message || err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component, OnInit } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { CopayersPage } from '../copayers/copayers';
|
import { CopayersPage } from '../copayers/copayers';
|
||||||
|
@ -61,7 +62,8 @@ export class CreateWalletPage implements OnInit {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider,
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private walletProvider: WalletProvider
|
private walletProvider: WalletProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
|
|
||||||
this.isShared = this.navParams.get('isShared');
|
this.isShared = this.navParams.get('isShared');
|
||||||
|
@ -167,7 +169,9 @@ export class CreateWalletPage implements OnInit {
|
||||||
|
|
||||||
let pathData = this.derivationPathHelperProvider.parse(this.createForm.value.derivationPath);
|
let pathData = this.derivationPathHelperProvider.parse(this.createForm.value.derivationPath);
|
||||||
if (!pathData) {
|
if (!pathData) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Invalid derivation path', 'Ok'); // TODO: GetTextCatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Invalid derivation path');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,7 +181,9 @@ export class CreateWalletPage implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setSeed && !opts.mnemonic && !opts.extendedPrivateKey) {
|
if (setSeed && !opts.mnemonic && !opts.extendedPrivateKey) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Please enter the wallet recovery phrase', 'Ok'); // TODO: GetTextCatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Please enter the wallet recovery phrase');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +211,8 @@ export class CreateWalletPage implements OnInit {
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.onGoingProcessProvider.set('creatingWallet', false);
|
this.onGoingProcessProvider.set('creatingWallet', false);
|
||||||
this.logger.warn(err);
|
this.logger.warn(err);
|
||||||
this.popupProvider.ionicAlert('Error', err, 'Ok'); // TODO: GetTextCatalog
|
let title = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(title, err);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { TabsPage } from '../../tabs/tabs';
|
import { TabsPage } from '../../tabs/tabs';
|
||||||
|
@ -52,7 +53,8 @@ export class ImportWalletPage {
|
||||||
private platformProvider: PlatformProvider,
|
private platformProvider: PlatformProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider,
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
private profileProvider: ProfileProvider
|
private profileProvider: ProfileProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.reader = new FileReader();
|
this.reader = new FileReader();
|
||||||
this.defaults = this.configProvider.getDefaults();
|
this.defaults = this.configProvider.getDefaults();
|
||||||
|
@ -131,7 +133,9 @@ export class ImportWalletPage {
|
||||||
|
|
||||||
if (parsedCode.length != 5) {
|
if (parsedCode.length != 5) {
|
||||||
/// Trying to import a malformed wallet export QR code
|
/// Trying to import a malformed wallet export QR code
|
||||||
this.popupProvider.ionicAlert('Error', 'Incorrect code format', 'Ok'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Incorrect code format');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,8 +147,11 @@ export class ImportWalletPage {
|
||||||
hasPassphrase: parsedCode[4] == 'true' ? true : false
|
hasPassphrase: parsedCode[4] == 'true' ? true : false
|
||||||
};
|
};
|
||||||
|
|
||||||
if (info.type == '1' && info.hasPassphrase)
|
if (info.type == '1' && info.hasPassphrase) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Password required. Make sure to enter your password in advanced options', 'Ok'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Password required. Make sure to enter your password in advanced options');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
this.testnetEnabled = info.network == 'testnet' ? true : false;
|
this.testnetEnabled = info.network == 'testnet' ? true : false;
|
||||||
this.importForm.controls['derivationPath'].setValue(info.derivationPath);
|
this.importForm.controls['derivationPath'].setValue(info.derivationPath);
|
||||||
|
@ -162,12 +169,13 @@ export class ImportWalletPage {
|
||||||
try {
|
try {
|
||||||
str2 = this.bwcProvider.getSJCL().decrypt(this.importForm.value.filePassword, str);
|
str2 = this.bwcProvider.getSJCL().decrypt(this.importForm.value.filePassword, str);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
err = 'Could not decrypt file, check your password'; //TODO gettextcatalog
|
err = this.translate.instant('Could not decrypt file, check your password');
|
||||||
this.logger.warn(e);
|
this.logger.warn(e);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
this.popupProvider.ionicAlert('Error', err, 'Ok'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(title, err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +189,8 @@ export class ImportWalletPage {
|
||||||
this.finish(wallet);
|
this.finish(wallet);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.onGoingProcessProvider.set('importingWallet', false);
|
this.onGoingProcessProvider.set('importingWallet', false);
|
||||||
this.popupProvider.ionicAlert('Error', err, 'Ok'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(title, err);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
}, 100);
|
}, 100);
|
||||||
|
@ -216,7 +225,8 @@ export class ImportWalletPage {
|
||||||
if (err instanceof this.errors.NOT_AUTHORIZED) {
|
if (err instanceof this.errors.NOT_AUTHORIZED) {
|
||||||
this.importErr = true;
|
this.importErr = true;
|
||||||
} else {
|
} else {
|
||||||
this.popupProvider.ionicAlert('Error', err, 'Ok'); // TODO: gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(title, err);
|
||||||
}
|
}
|
||||||
this.onGoingProcessProvider.set('importingWallet', false);
|
this.onGoingProcessProvider.set('importingWallet', false);
|
||||||
return;
|
return;
|
||||||
|
@ -234,7 +244,8 @@ export class ImportWalletPage {
|
||||||
if (err instanceof this.errors.NOT_AUTHORIZED) {
|
if (err instanceof this.errors.NOT_AUTHORIZED) {
|
||||||
this.importErr = true;
|
this.importErr = true;
|
||||||
} else {
|
} else {
|
||||||
this.popupProvider.ionicAlert('Error', err, 'Ok'); // TODO: gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(title, err);
|
||||||
}
|
}
|
||||||
this.onGoingProcessProvider.set('importingWallet', false);
|
this.onGoingProcessProvider.set('importingWallet', false);
|
||||||
return;
|
return;
|
||||||
|
@ -253,7 +264,9 @@ export class ImportWalletPage {
|
||||||
|
|
||||||
public importFromFile(): void {
|
public importFromFile(): void {
|
||||||
if (!this.importForm.valid) {
|
if (!this.importForm.valid) {
|
||||||
this.popupProvider.ionicAlert('Error', 'There is an error in the form', 'Ok'); // TODO: gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('There is an error in the form');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,7 +274,9 @@ export class ImportWalletPage {
|
||||||
let backupText = this.importForm.value.backupText;
|
let backupText = this.importForm.value.backupText;
|
||||||
|
|
||||||
if (!backupFile && !backupText) {
|
if (!backupFile && !backupText) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Please, select your backup file', 'Ok'); // TODO: gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Please, select your backup file');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,7 +292,9 @@ export class ImportWalletPage {
|
||||||
|
|
||||||
public importFromMnemonic(): void {
|
public importFromMnemonic(): void {
|
||||||
if (!this.importForm.valid) {
|
if (!this.importForm.valid) {
|
||||||
this.popupProvider.ionicAlert('Error', 'There is an error in the form', 'Ok'); // TODO: gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('There is an error in the form');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +306,9 @@ export class ImportWalletPage {
|
||||||
let pathData: any = this.derivationPathHelperProvider.parse(this.importForm.value.derivationPath);
|
let pathData: any = this.derivationPathHelperProvider.parse(this.importForm.value.derivationPath);
|
||||||
|
|
||||||
if (!pathData) {
|
if (!pathData) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Invalid derivation path', 'Ok'); // TODO: gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Invalid derivation path');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,7 +320,9 @@ export class ImportWalletPage {
|
||||||
let words: string = this.importForm.value.words || null;
|
let words: string = this.importForm.value.words || null;
|
||||||
|
|
||||||
if (!words) {
|
if (!words) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Please enter the recovery phrase', 'Ok');
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Please enter the recovery phrase');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
} else if (words.indexOf('xprv') == 0 || words.indexOf('tprv') == 0) {
|
} else if (words.indexOf('xprv') == 0 || words.indexOf('tprv') == 0) {
|
||||||
return this.importExtendedPrivateKey(words, opts);
|
return this.importExtendedPrivateKey(words, opts);
|
||||||
|
@ -309,7 +330,9 @@ export class ImportWalletPage {
|
||||||
let wordList: Array<any> = words.split(/[\u3000\s]+/);
|
let wordList: Array<any> = words.split(/[\u3000\s]+/);
|
||||||
|
|
||||||
if ((wordList.length % 3) != 0) {
|
if ((wordList.length % 3) != 0) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Wrong number of recovery words: ' + wordList.length, 'Ok');
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Wrong number of recovery words:');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle + ' ' + wordList.length);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { CopayersPage } from '../copayers/copayers';
|
import { CopayersPage } from '../copayers/copayers';
|
||||||
|
@ -38,7 +39,8 @@ export class JoinWalletPage {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private walletProvider: WalletProvider,
|
private walletProvider: WalletProvider,
|
||||||
private logger: Logger
|
private logger: Logger,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.defaults = this.configProvider.getDefaults();
|
this.defaults = this.configProvider.getDefaults();
|
||||||
|
|
||||||
|
@ -120,7 +122,9 @@ export class JoinWalletPage {
|
||||||
|
|
||||||
let pathData = this.derivationPathHelperProvider.parse(this.joinForm.value.derivationPath);
|
let pathData = this.derivationPathHelperProvider.parse(this.joinForm.value.derivationPath);
|
||||||
if (!pathData) {
|
if (!pathData) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Invalid derivation path'); // TODO: GetTextCatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Invalid derivation path');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +133,9 @@ export class JoinWalletPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setSeed && !opts.mnemonic && !opts.extendedPrivateKey) {
|
if (setSeed && !opts.mnemonic && !opts.extendedPrivateKey) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Please enter the wallet recovery phrase', 'Ok'); // TODO: GetTextCatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Please enter the wallet recovery phrase');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +157,8 @@ export class JoinWalletPage {
|
||||||
}
|
}
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.onGoingProcessProvider.set('joiningWallet', false);
|
this.onGoingProcessProvider.set('joiningWallet', false);
|
||||||
this.popupProvider.ionicAlert('Error', err, 'Ok'); // TODO: GetTextCatalog
|
let title = this.translate.instant('Error');
|
||||||
|
this.popupProvider.ionicAlert(title, err);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import * as _ from "lodash";
|
import * as _ from "lodash";
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
|
@ -38,6 +39,7 @@ export class SendFeedbackPage {
|
||||||
private feedbackProvider: FeedbackProvider,
|
private feedbackProvider: FeedbackProvider,
|
||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.feedbackForm = this.formBuilder.group({
|
this.feedbackForm = this.formBuilder.group({
|
||||||
comment: ['', Validators.compose([Validators.minLength(1), Validators.required])]
|
comment: ['', Validators.compose([Validators.minLength(1), Validators.required])]
|
||||||
|
@ -50,28 +52,28 @@ export class SendFeedbackPage {
|
||||||
|
|
||||||
switch (this.score) {
|
switch (this.score) {
|
||||||
case 1:
|
case 1:
|
||||||
this.reaction = "Ouch!";
|
this.reaction = this.translate.instant("Ouch!");
|
||||||
this.comment = "There's obviously something we're doing wrong. How could we improve your experience?"; //TODO gettextcatalog
|
this.comment = this.translate.instant("There's obviously something we're doing wrong. How could we improve your experience?");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
this.reaction = "Oh no!";
|
this.reaction = this.translate.instant("Oh no!");
|
||||||
this.comment = "There's obviously something we're doing wrong. How could we improve your experience?"; //TODO gettextcatalog
|
this.comment = this.translate.instant("There's obviously something we're doing wrong. How could we improve your experience?");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
this.reaction = "Hmm...";
|
this.reaction = this.translate.instant("Hmm...");
|
||||||
this.comment = "We'd love to do better. How could we improve your experience?"; //TODO gettextcatalog
|
this.comment = this.translate.instant("We'd love to do better. How could we improve your experience?");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
this.reaction = "Thanks!";
|
this.reaction = this.translate.instant("Thanks!");
|
||||||
this.comment = "That's exciting to hear. We'd love to earn that fifth star from you – how could we improve your experience?"; //TODO gettextcatalog
|
this.comment = this.translate.instant("That's exciting to hear. We'd love to earn that fifth star from you – how could we improve your experience?");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
this.reaction = "Thank you!";
|
this.reaction = this.translate.instant("Thank you!");
|
||||||
this.comment = "We're always looking for ways to improve " + this.appName + ". Is there anything we could do better?";
|
this.comment = "We're always looking for ways to improve" + " " + this.appName + ". Is there anything we could do better?"; // TODO: translate
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.justFeedback = true;
|
this.justFeedback = true;
|
||||||
this.comment = "We're always looking for ways to improve " + this.appName + ". How could we improve your experience?";
|
this.comment = "We're always looking for ways to improve" + " " + this.appName + ". How could we improve your experience?"; // TODO: translate
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,9 +96,9 @@ export class SendFeedbackPage {
|
||||||
if (goHome) return;
|
if (goHome) return;
|
||||||
this.onGoingProcessProvider.set('sendingFeedback', false);
|
this.onGoingProcessProvider.set('sendingFeedback', false);
|
||||||
if (!this.score) {
|
if (!this.score) {
|
||||||
let title = 'Thank you!'; //TODO gettextcatalog
|
let title = this.translate.instant('Thank you!');
|
||||||
let message = 'A member of the team will review your feedback as soon as possible.'; //TODO gettextcatalog
|
let message = this.translate.instant('A member of the team will review your feedback as soon as possible.');
|
||||||
let okText = 'Finish'; //TODO gettextcatalog
|
let okText = this.translate.instant('Finish');
|
||||||
this.popupProvider.ionicAlert(title, message, okText).then(() => {
|
this.popupProvider.ionicAlert(title, message, okText).then(() => {
|
||||||
this.feedback = '';
|
this.feedback = '';
|
||||||
this.navCtrl.pop();
|
this.navCtrl.pop();
|
||||||
|
@ -108,7 +110,9 @@ export class SendFeedbackPage {
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
if (goHome) return;
|
if (goHome) return;
|
||||||
this.onGoingProcessProvider.set('sendingFeedback', false);
|
this.onGoingProcessProvider.set('sendingFeedback', false);
|
||||||
this.popupProvider.ionicAlert('Error', 'Feedback could not be submitted. Please try again later.'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Feedback could not be submitted. Please try again later.');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
});
|
});
|
||||||
if (goHome) this.navCtrl.push(HomePage);
|
if (goHome) this.navCtrl.push(HomePage);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from "@angular/core";
|
import { Component } from "@angular/core";
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
import { ModalController, NavController } from 'ionic-angular';
|
import { ModalController, NavController } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { ProfileProvider } from '../../../providers/profile/profile';
|
import { ProfileProvider } from '../../../providers/profile/profile';
|
||||||
|
@ -32,7 +33,8 @@ export class ActivityPage {
|
||||||
private modalCtrl: ModalController,
|
private modalCtrl: ModalController,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider,
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
private walletProvider: WalletProvider,
|
private walletProvider: WalletProvider,
|
||||||
private popupProvider: PopupProvider
|
private popupProvider: PopupProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.fetchingNotifications = true;
|
this.fetchingNotifications = true;
|
||||||
}
|
}
|
||||||
|
@ -73,7 +75,9 @@ export class ActivityPage {
|
||||||
modal.present();
|
modal.present();
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
this.logger.warn('No txp found');
|
this.logger.warn('No txp found');
|
||||||
this.popupProvider.ionicAlert('Error', 'Transaction not found'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Transaction not found');
|
||||||
|
this.popupProvider.ionicAlert(title, subtitle);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, Events, ModalController } from 'ionic-angular';
|
import { NavController, Events, ModalController } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { ActivityPage } from './activity/activity';
|
import { ActivityPage } from './activity/activity';
|
||||||
|
@ -87,6 +88,7 @@ export class HomePage {
|
||||||
private homeIntegrationsProvider: HomeIntegrationsProvider,
|
private homeIntegrationsProvider: HomeIntegrationsProvider,
|
||||||
private persistenceProvider: PersistenceProvider,
|
private persistenceProvider: PersistenceProvider,
|
||||||
private feedbackProvider: FeedbackProvider,
|
private feedbackProvider: FeedbackProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.cachedBalanceUpdateOn = '';
|
this.cachedBalanceUpdateOn = '';
|
||||||
this.isNW = this.platformProvider.isNW;
|
this.isNW = this.platformProvider.isNW;
|
||||||
|
@ -332,7 +334,9 @@ export class HomePage {
|
||||||
this.openTxpModal(_txp);
|
this.openTxpModal(_txp);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.logger.warn('No txp found');
|
this.logger.warn('No txp found');
|
||||||
return this.popupProvider.ionicAlert('Error', 'Transaction not found'); //TODO gettextcatalog
|
let title = this.translate.instant('Error');
|
||||||
|
let subtitle = this.translate.instant('Transaction not found');
|
||||||
|
return this.popupProvider.ionicAlert(title, subtitle);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -367,10 +371,10 @@ export class HomePage {
|
||||||
public goToDownload(): void {
|
public goToDownload(): void {
|
||||||
let url = 'https://github.com/bitpay/copay/releases/latest';
|
let url = 'https://github.com/bitpay/copay/releases/latest';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = 'Update Available'; //TODO gettextcatalog
|
let title = this.translate.instant('Update Available');
|
||||||
let message = 'An update to this app is available. For your security, please update to the latest version.'; //TODO gettextcatalog
|
let message = this.translate.instant('An update to this app is available. For your security, please update to the latest version.');
|
||||||
let okText = 'View Update'; //TODO gettextcatalog
|
let okText = this.translate.instant('View Update');
|
||||||
let cancelText = 'Go Back'; //TODO gettextcatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from "@angular/core";
|
import { Component } from "@angular/core";
|
||||||
import { NavController, Events } from 'ionic-angular';
|
import { NavController, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { AppProvider } from '../../../providers/app/app';
|
import { AppProvider } from '../../../providers/app/app';
|
||||||
|
@ -26,6 +27,7 @@ export class FeedbackCardPage {
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private persistenceProvider: PersistenceProvider,
|
private persistenceProvider: PersistenceProvider,
|
||||||
private events: Events,
|
private events: Events,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.appName = this.appProvider.info.nameCase;
|
this.appName = this.appProvider.info.nameCase;
|
||||||
this.score = 0;
|
this.score = 0;
|
||||||
|
@ -45,19 +47,19 @@ export class FeedbackCardPage {
|
||||||
this.score = score;
|
this.score = score;
|
||||||
switch (this.score) {
|
switch (this.score) {
|
||||||
case 1:
|
case 1:
|
||||||
this.button_title = "I think this app is terrible"; //TODO gettextcatalog
|
this.button_title = this.translate.instant("I think this app is terrible");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
this.button_title = "I don't like it"; //TODO gettextcatalog
|
this.button_title = this.translate.instant("I don't like it");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
this.button_title = "Meh - it's alright"; //TODO gettextcatalog
|
this.button_title = this.translate.instant("Meh - it's alright");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
this.button_title = "I like the app"; //TODO gettextcatalog
|
this.button_title = this.translate.instant("I like the app");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
this.button_title = "This app is fantastic!"; //TODO gettextcatalog
|
this.button_title = this.translate.instant("This app is fantastic!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
|
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../providers/logger/logger';
|
import { Logger } from '../../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
|
|
||||||
|
@ -64,7 +65,8 @@ export class BuyAmazonPage {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private txFormatProvider: TxFormatProvider,
|
private txFormatProvider: TxFormatProvider,
|
||||||
private walletProvider: WalletProvider
|
private walletProvider: WalletProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.FEE_TOO_HIGH_LIMIT_PER = 15;
|
this.FEE_TOO_HIGH_LIMIT_PER = 15;
|
||||||
this.coin = 'btc';
|
this.coin = 'btc';
|
||||||
|
@ -82,7 +84,7 @@ export class BuyAmazonPage {
|
||||||
|
|
||||||
let limitPerDay = this.amazonProvider.limitPerDay;
|
let limitPerDay = this.amazonProvider.limitPerDay;
|
||||||
|
|
||||||
this.limitPerDayMessage = "Purchase Amount is limited to " + limitPerDay + " " + this.currency + " per day"; // TODO: gettextCatalog
|
this.limitPerDayMessage = "Purchase Amount is limited to " + limitPerDay + " " + this.currency + " per day"; // TODO: translate
|
||||||
|
|
||||||
if (this.amount > this.amazonProvider.limitPerDay) {
|
if (this.amount > this.amazonProvider.limitPerDay) {
|
||||||
this.showErrorAndBack(null, this.limitPerDayMessage);
|
this.showErrorAndBack(null, this.limitPerDayMessage);
|
||||||
|
@ -97,7 +99,7 @@ export class BuyAmazonPage {
|
||||||
coin: this.coin
|
coin: this.coin
|
||||||
});
|
});
|
||||||
if (_.isEmpty(this.wallets)) {
|
if (_.isEmpty(this.wallets)) {
|
||||||
this.showErrorAndBack(null, 'No wallets available'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('No wallets available'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.onWalletSelect(this.wallets[0]); // Default first wallet
|
this.onWalletSelect(this.wallets[0]); // Default first wallet
|
||||||
|
@ -122,7 +124,7 @@ export class BuyAmazonPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
private showErrorAndBack(title: string, msg: any) {
|
private showErrorAndBack(title: string, msg: any) {
|
||||||
title = title ? title : 'Error'; // TODO: gettextCatalog
|
title = title ? title : this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
@ -132,7 +134,7 @@ export class BuyAmazonPage {
|
||||||
|
|
||||||
private showError = function (title: string, msg: any): Promise<any> {
|
private showError = function (title: string, msg: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
title = title || 'Error'; // TODO: gettextCatalog
|
title = title || this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
@ -144,7 +146,7 @@ export class BuyAmazonPage {
|
||||||
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
||||||
let err = 'No signing proposal: No private key'; // TODO: gettextCatalog
|
let err = this.translate.instant('No signing proposal: No private key');
|
||||||
this.logger.info(err);
|
this.logger.info(err);
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
@ -184,15 +186,15 @@ export class BuyAmazonPage {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.amazonProvider.createBitPayInvoice(data, (err: any, dataInvoice: any) => {
|
this.amazonProvider.createBitPayInvoice(data, (err: any, dataInvoice: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
let err_title = 'Error creating the invoice'; // TODO: gettextCatalog
|
let err_title = this.translate.instant('Error creating the invoice');
|
||||||
let err_msg;
|
let err_msg;
|
||||||
if (err && err.message && err.message.match(/suspended/i)) {
|
if (err && err.message && err.message.match(/suspended/i)) {
|
||||||
err_title = 'Service not available'; // TODO: gettextCatalog
|
err_title = this.translate.instant('Service not available');
|
||||||
err_msg = 'Amazon.com is not available at this moment. Please try back later.'; // TODO: gettextCatalog
|
err_msg = this.translate.instant('Amazon.com is not available at this moment. Please try back later.');
|
||||||
} else if (err && err.message) {
|
} else if (err && err.message) {
|
||||||
err_msg = err.message;
|
err_msg = err.message;
|
||||||
} else {
|
} else {
|
||||||
err_msg = 'Could not access to Amazon.com'; // TODO: gettextCatalog
|
err_msg = this.translate.instant('Could not access to Amazon.com');
|
||||||
};
|
};
|
||||||
|
|
||||||
return reject({
|
return reject({
|
||||||
|
@ -205,14 +207,14 @@ export class BuyAmazonPage {
|
||||||
|
|
||||||
if (!accessKey) {
|
if (!accessKey) {
|
||||||
return reject({
|
return reject({
|
||||||
message: 'No access key defined' // TODO: gettextCatalog
|
message: this.translate.instant('No access key defined')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.amazonProvider.getBitPayInvoice(dataInvoice.invoiceId, (err: any, invoice: any) => {
|
this.amazonProvider.getBitPayInvoice(dataInvoice.invoiceId, (err: any, invoice: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return reject({
|
return reject({
|
||||||
message: 'Could not get the invoice' // TODO: gettextCatalog
|
message: this.translate.instant('Could not get the invoice')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,8 +230,8 @@ export class BuyAmazonPage {
|
||||||
|
|
||||||
if (!payProUrl) {
|
if (!payProUrl) {
|
||||||
return reject({
|
return reject({
|
||||||
title: 'Error in Payment Protocol', // TODO: gettextCatalog
|
title: this.translate.instant('Error in Payment Protocol'),
|
||||||
message: 'Invalid URL' // TODO: gettextCatalog
|
message: this.translate.instant('Invalid URL')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,7 +259,7 @@ export class BuyAmazonPage {
|
||||||
return resolve(ctxp);
|
return resolve(ctxp);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
return reject({
|
return reject({
|
||||||
title: 'Could not create transaction', // TODO: gettextCatalog
|
title: this.translate.instant('Could not create transaction'),
|
||||||
message: this.bwcErrorProvider.msg(err)
|
message: this.bwcErrorProvider.msg(err)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -288,7 +290,7 @@ export class BuyAmazonPage {
|
||||||
}, (err: any) => {
|
}, (err: any) => {
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
this.onGoingProcessProvider.set('buyingGiftCard', false);
|
this.onGoingProcessProvider.set('buyingGiftCard', false);
|
||||||
this.showError(null, 'Gift card expired'); // TODO: gettextCatalog
|
this.showError(null, this.translate.instant('Gift card expired'));
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -334,7 +336,7 @@ export class BuyAmazonPage {
|
||||||
invoice['buyerPaidBtcMinerFee'] = invoice.buyerPaidBtcMinerFee || 0;
|
invoice['buyerPaidBtcMinerFee'] = invoice.buyerPaidBtcMinerFee || 0;
|
||||||
let invoiceFeeSat = parseInt((invoice.buyerPaidBtcMinerFee * 100000000).toFixed());
|
let invoiceFeeSat = parseInt((invoice.buyerPaidBtcMinerFee * 100000000).toFixed());
|
||||||
|
|
||||||
this.message = this.amountUnitStr + " for Amazon.com Gift Card"; // TODO: gettextCatalog
|
this.message = this.amountUnitStr + " for Amazon.com Gift Card"; // TODO: translate
|
||||||
|
|
||||||
this.createTx(wallet, invoice, this.message).then((ctxp: any) => {
|
this.createTx(wallet, invoice, this.message).then((ctxp: any) => {
|
||||||
this.onGoingProcessProvider.set('loadingTxInfo', false);
|
this.onGoingProcessProvider.set('loadingTxInfo', false);
|
||||||
|
@ -374,12 +376,12 @@ export class BuyAmazonPage {
|
||||||
|
|
||||||
public buyConfirm() {
|
public buyConfirm() {
|
||||||
if (!this.createdTx) {
|
if (!this.createdTx) {
|
||||||
this.showError(null, 'Transaction has not been created'); // TODO: gettextCatalog
|
this.showError(null, this.translate.instant('Transaction has not been created'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var title = 'Confirm'; // TODO: gettextCatalog
|
var title = this.translate.instant('Confirm');
|
||||||
var okText = 'OK'; // TODO: gettextCatalog
|
var okText = this.translate.instant('OK');
|
||||||
var cancelText = 'Cancel'; // TODO: gettextCatalog
|
var cancelText = this.translate.instant('Cancel');
|
||||||
this.popupProvider.ionicConfirm(title, this.message, okText, cancelText).then((ok) => {
|
this.popupProvider.ionicConfirm(title, this.message, okText, cancelText).then((ok) => {
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
return;
|
return;
|
||||||
|
@ -390,7 +392,7 @@ export class BuyAmazonPage {
|
||||||
this.checkTransaction(1, this.createdTx.giftData);
|
this.checkTransaction(1, this.createdTx.giftData);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this._resetValues();
|
this._resetValues();
|
||||||
this.showError('Could not send transaction', err); // TODO: gettextCatalog
|
this.showError(this.translate.instant('Could not send transaction'), err);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -103,7 +103,7 @@ export class SellCoinbasePage {
|
||||||
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
||||||
let err = 'No signing proposal: No private key'; // TODO: gettextCatalog
|
let err = 'No signing proposal: No private key';
|
||||||
this.logger.info(err);
|
this.logger.info(err);
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ export class GlideraSettingsPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
private showErrorAndBack(title: string, msg: any) {
|
private showErrorAndBack(title: string, msg: any) {
|
||||||
title = title ? title : 'Error'; // TODO: gettextCatalog
|
title = title ? title : 'Error';
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
|
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../providers/logger/logger';
|
import { Logger } from '../../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
|
|
||||||
|
@ -64,7 +65,8 @@ export class BuyMercadoLibrePage {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private txFormatProvider: TxFormatProvider,
|
private txFormatProvider: TxFormatProvider,
|
||||||
private walletProvider: WalletProvider
|
private walletProvider: WalletProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.FEE_TOO_HIGH_LIMIT_PER = 15;
|
this.FEE_TOO_HIGH_LIMIT_PER = 15;
|
||||||
this.coin = 'btc';
|
this.coin = 'btc';
|
||||||
|
@ -81,7 +83,7 @@ export class BuyMercadoLibrePage {
|
||||||
this.currency = this.navParams.data.currency.toUpperCase();
|
this.currency = this.navParams.data.currency.toUpperCase();
|
||||||
|
|
||||||
if (this.amount > 2000 || this.amount < 50) {
|
if (this.amount > 2000 || this.amount < 50) {
|
||||||
this.showErrorAndBack(null, 'Purchase amount must be a value between 50 and 2000'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('Purchase amount must be a value between 50 and 2000'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +94,7 @@ export class BuyMercadoLibrePage {
|
||||||
coin: this.coin
|
coin: this.coin
|
||||||
});
|
});
|
||||||
if (_.isEmpty(this.wallets)) {
|
if (_.isEmpty(this.wallets)) {
|
||||||
this.showErrorAndBack(null, 'No wallets available'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('No wallets available'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.onWalletSelect(this.wallets[0]); // Default first wallet
|
this.onWalletSelect(this.wallets[0]); // Default first wallet
|
||||||
|
@ -117,7 +119,7 @@ export class BuyMercadoLibrePage {
|
||||||
}
|
}
|
||||||
|
|
||||||
private showErrorAndBack(title: string, msg: any) {
|
private showErrorAndBack(title: string, msg: any) {
|
||||||
title = title ? title : 'Error'; // TODO: gettextCatalog
|
title = title ? title : this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
@ -127,7 +129,7 @@ export class BuyMercadoLibrePage {
|
||||||
|
|
||||||
private showError = function (title: string, msg: any): Promise<any> {
|
private showError = function (title: string, msg: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
title = title || 'Error'; // TODO: gettextCatalog
|
title = title || this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
@ -139,7 +141,7 @@ export class BuyMercadoLibrePage {
|
||||||
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
||||||
let err = 'No signing proposal: No private key'; // TODO: gettextCatalog
|
let err = this.translate.instant('No signing proposal: No private key');
|
||||||
this.logger.info(err);
|
this.logger.info(err);
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
@ -179,15 +181,15 @@ export class BuyMercadoLibrePage {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.mercadoLibreProvider.createBitPayInvoice(data, (err: any, dataInvoice: any) => {
|
this.mercadoLibreProvider.createBitPayInvoice(data, (err: any, dataInvoice: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
let err_title = 'Error creating the invoice'; // TODO: gettextCatalog
|
let err_title = this.translate.instant('Error creating the invoice');
|
||||||
let err_msg;
|
let err_msg;
|
||||||
if (err && err.message && err.message.match(/suspended/i)) {
|
if (err && err.message && err.message.match(/suspended/i)) {
|
||||||
err_title = 'Service not available'; // TODO: gettextCatalog
|
err_title = this.translate.instant('Service not available');
|
||||||
err_msg = 'Mercadolibre Gift Card Service is not available at this moment. Please try back later.'; // TODO: gettextCatalog
|
err_msg = this.translate.instant('Mercadolibre Gift Card Service is not available at this moment. Please try back later.');
|
||||||
} else if (err && err.message) {
|
} else if (err && err.message) {
|
||||||
err_msg = err.message;
|
err_msg = err.message;
|
||||||
} else {
|
} else {
|
||||||
err_msg = 'Could not access Gift Card Service'; // TODO: gettextCatalog
|
err_msg = this.translate.instant('Could not access Gift Card Service');
|
||||||
};
|
};
|
||||||
|
|
||||||
return reject({
|
return reject({
|
||||||
|
@ -200,14 +202,14 @@ export class BuyMercadoLibrePage {
|
||||||
|
|
||||||
if (!accessKey) {
|
if (!accessKey) {
|
||||||
return reject({
|
return reject({
|
||||||
message: 'No access key defined' // TODO: gettextCatalog
|
message: this.translate.instant('No access key defined')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mercadoLibreProvider.getBitPayInvoice(dataInvoice.invoiceId, (err: any, invoice: any) => {
|
this.mercadoLibreProvider.getBitPayInvoice(dataInvoice.invoiceId, (err: any, invoice: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return reject({
|
return reject({
|
||||||
message: 'Could not get the invoice' // TODO: gettextCatalog
|
message: this.translate.instant('Could not get the invoice')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,8 +225,8 @@ export class BuyMercadoLibrePage {
|
||||||
|
|
||||||
if (!payProUrl) {
|
if (!payProUrl) {
|
||||||
return reject({
|
return reject({
|
||||||
title: 'Error in Payment Protocol', // TODO: gettextCatalog
|
title: this.translate.instant('Error in Payment Protocol'),
|
||||||
message: 'Invalid URL' // TODO: gettextCatalog
|
message: this.translate.instant('Invalid URL')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,7 +254,7 @@ export class BuyMercadoLibrePage {
|
||||||
return resolve(ctxp);
|
return resolve(ctxp);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
return reject({
|
return reject({
|
||||||
title: 'Could not create transaction', // TODO: gettextCatalog
|
title: this.translate.instant('Could not create transaction'),
|
||||||
message: this.bwcErrorProvider.msg(err)
|
message: this.bwcErrorProvider.msg(err)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -323,7 +325,7 @@ export class BuyMercadoLibrePage {
|
||||||
invoice['buyerPaidBtcMinerFee'] = invoice.buyerPaidBtcMinerFee || 0;
|
invoice['buyerPaidBtcMinerFee'] = invoice.buyerPaidBtcMinerFee || 0;
|
||||||
let invoiceFeeSat = parseInt((invoice.buyerPaidBtcMinerFee * 100000000).toFixed());
|
let invoiceFeeSat = parseInt((invoice.buyerPaidBtcMinerFee * 100000000).toFixed());
|
||||||
|
|
||||||
this.message = this.amountUnitStr + " for Mercado Livre Brazil Gift Car"; // TODO: gettextCatalog
|
this.message = this.amountUnitStr + " for Mercado Livre Brazil Gift Car"; // TODO: translate
|
||||||
|
|
||||||
this.createTx(wallet, invoice, this.message).then((ctxp: any) => {
|
this.createTx(wallet, invoice, this.message).then((ctxp: any) => {
|
||||||
this.onGoingProcessProvider.set('loadingTxInfo', false);
|
this.onGoingProcessProvider.set('loadingTxInfo', false);
|
||||||
|
@ -363,13 +365,11 @@ export class BuyMercadoLibrePage {
|
||||||
|
|
||||||
public buyConfirm() {
|
public buyConfirm() {
|
||||||
if (!this.createdTx) {
|
if (!this.createdTx) {
|
||||||
this.showError(null, 'Transaction has not been created'); // TODO: gettextCatalog
|
this.showError(null, this.translate.instant('Transaction has not been created'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var title = 'Confirm'; // TODO: gettextCatalog
|
var title = this.translate.instant('Confirm');
|
||||||
var okText = 'OK'; // TODO: gettextCatalog
|
this.popupProvider.ionicConfirm(title, this.message).then((ok) => {
|
||||||
var cancelText = 'Cancel'; // TODO: gettextCatalog
|
|
||||||
this.popupProvider.ionicConfirm(title, this.message, okText, cancelText).then((ok) => {
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -379,7 +379,7 @@ export class BuyMercadoLibrePage {
|
||||||
this.checkTransaction(1, this.createdTx.giftData);
|
this.checkTransaction(1, this.createdTx.giftData);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this._resetValues();
|
this._resetValues();
|
||||||
this.showError('Could not send transaction', err); // TODO: gettextCatalog
|
this.showError(this.translate.instant('Could not send transaction'), err);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -56,9 +56,9 @@ export class MercadoLibreCardDetailsPage {
|
||||||
let url = 'https://help.bitpay.com/requestHelp';
|
let url = 'https://help.bitpay.com/requestHelp';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = null;
|
let title = null;
|
||||||
let message = 'Help and support information is available at the website.'; //TODO: getTextCatalog
|
let message = 'A informação de ajuda e suporte está disponível no site.';
|
||||||
let okText = 'Open'; //TODO: getTextCatalog
|
let okText = 'Abrir';
|
||||||
let cancelText = 'Go Back'; //TODO: getTextCatalog
|
let cancelText = 'Volte';
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../providers/logger/logger';
|
import { Logger } from '../../../../providers/logger/logger';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { ShapeshiftPage } from '../shapeshift';
|
import { ShapeshiftPage } from '../shapeshift';
|
||||||
|
@ -73,7 +74,8 @@ export class ShapeshiftConfirmPage {
|
||||||
private shapeshiftProvider: ShapeshiftProvider,
|
private shapeshiftProvider: ShapeshiftProvider,
|
||||||
private txFormatProvider: TxFormatProvider,
|
private txFormatProvider: TxFormatProvider,
|
||||||
private walletProvider: WalletProvider,
|
private walletProvider: WalletProvider,
|
||||||
private modalCtrl: ModalController
|
private modalCtrl: ModalController,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.configWallet = this.configProvider.get().wallet;
|
this.configWallet = this.configProvider.get().wallet;
|
||||||
this.currencyIsoCode = 'USD'; // Only USD
|
this.currencyIsoCode = 'USD'; // Only USD
|
||||||
|
@ -93,7 +95,7 @@ export class ShapeshiftConfirmPage {
|
||||||
this.toWallet = this.profileProvider.getWallet(this.toWalletId);
|
this.toWallet = this.profileProvider.getWallet(this.toWalletId);
|
||||||
|
|
||||||
if (_.isEmpty(this.fromWallet) || _.isEmpty(this.toWallet)) {
|
if (_.isEmpty(this.fromWallet) || _.isEmpty(this.toWallet)) {
|
||||||
this.showErrorAndBack(null, 'No wallet found'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('No wallet found'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,11 +108,13 @@ export class ShapeshiftConfirmPage {
|
||||||
let amountNumber = Number(this.amount);
|
let amountNumber = Number(this.amount);
|
||||||
|
|
||||||
if (amountNumber < min) {
|
if (amountNumber < min) {
|
||||||
this.showErrorAndBack(null, 'Minimum amount required is ' + min); // TODO: gettextCatalog
|
let message = 'Minimum amount required is ' + min; // TODO: translate
|
||||||
|
this.showErrorAndBack(null, message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (amountNumber > max) {
|
if (amountNumber > max) {
|
||||||
this.showErrorAndBack(null, 'Maximum amount allowed is ' + max); // TODO: gettextCatalog
|
let message = 'Maximum amount allowed is ' + max; // TODO: translate
|
||||||
|
this.showErrorAndBack(null, message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.createShift();
|
this.createShift();
|
||||||
|
@ -126,7 +130,7 @@ export class ShapeshiftConfirmPage {
|
||||||
};
|
};
|
||||||
|
|
||||||
private showErrorAndBack(title: string, msg: any) {
|
private showErrorAndBack(title: string, msg: any) {
|
||||||
title = title ? title : 'Error'; // TODO: gettextCatalog
|
title = title ? title : this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
@ -137,7 +141,7 @@ export class ShapeshiftConfirmPage {
|
||||||
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
private publishAndSign(wallet: any, txp: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
|
||||||
let err = 'No signing proposal: No private key'; // TODO: gettextCatalog
|
let err = this.translate.instant('No signing proposal: No private key');
|
||||||
this.logger.info(err);
|
this.logger.info(err);
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
@ -233,7 +237,7 @@ export class ShapeshiftConfirmPage {
|
||||||
return resolve(ctxp);
|
return resolve(ctxp);
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
return reject({
|
return reject({
|
||||||
title: 'Could not create transaction', // TODO: gettextCatalog
|
title: this.translate.instant('Could not create transaction'),
|
||||||
message: this.bwcErrorProvider.msg(err)
|
message: this.bwcErrorProvider.msg(err)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -323,14 +327,14 @@ export class ShapeshiftConfirmPage {
|
||||||
|
|
||||||
public confirmTx(): void {
|
public confirmTx(): void {
|
||||||
if (!this.createdTx) {
|
if (!this.createdTx) {
|
||||||
this.showErrorAndBack(null, 'Transaction has not been created'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('Transaction has not been created'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let fromCoin = this.fromWallet.coin.toUpperCase();
|
let fromCoin = this.fromWallet.coin.toUpperCase();
|
||||||
let toCoin = this.toWallet.coin.toUpperCase();
|
let toCoin = this.toWallet.coin.toUpperCase();
|
||||||
let title = 'Confirm to shift ' + fromCoin + ' to ' + toCoin; // TODO: gettextCatalog
|
let title = 'Confirm to shift ' + fromCoin + ' to ' + toCoin; // TODO: translate
|
||||||
let okText = 'OK'; // TODO: gettextCatalog
|
let okText = this.translate.instant('OK');
|
||||||
let cancelText = 'Cancel'; // TODO: gettextCatalog
|
let cancelText = this.translate.instant('Cancel');
|
||||||
this.popupProvider.ionicConfirm(title, '', okText, cancelText).then((ok: any) => {
|
this.popupProvider.ionicConfirm(title, '', okText, cancelText).then((ok: any) => {
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
return;
|
return;
|
||||||
|
@ -342,7 +346,7 @@ export class ShapeshiftConfirmPage {
|
||||||
this.txSent = txSent;
|
this.txSent = txSent;
|
||||||
this.saveShapeshiftData();
|
this.saveShapeshiftData();
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.showErrorAndBack(null, 'Could not send transaction'), err; // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('Could not send transaction')), err;
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { NavController, Events } from 'ionic-angular';
|
import { NavController, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../providers/logger/logger';
|
import { Logger } from '../../../../providers/logger/logger';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { AmountPage } from './../../../send/amount/amount';
|
import { AmountPage } from './../../../send/amount/amount';
|
||||||
|
@ -39,7 +40,8 @@ export class ShapeshiftShiftPage {
|
||||||
private navCtrl: NavController,
|
private navCtrl: NavController,
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private shapeshiftProvider: ShapeshiftProvider
|
private shapeshiftProvider: ShapeshiftProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.walletsBtc = [];
|
this.walletsBtc = [];
|
||||||
this.walletsBch = [];
|
this.walletsBch = [];
|
||||||
|
@ -63,7 +65,7 @@ export class ShapeshiftShiftPage {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (_.isEmpty(this.walletsBtc) || _.isEmpty(this.walletsBch)) {
|
if (_.isEmpty(this.walletsBtc) || _.isEmpty(this.walletsBch)) {
|
||||||
this.showErrorAndBack(null, 'No wallets available to use ShapeShift'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('No wallets available to use ShapeShift'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +76,7 @@ export class ShapeshiftShiftPage {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (_.isEmpty(this.fromWallets)) {
|
if (_.isEmpty(this.fromWallets)) {
|
||||||
this.showErrorAndBack(null, 'No wallets with funds'); // TODO: gettextCatalog
|
this.showErrorAndBack(null, this.translate.instant('No wallets with funds'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +97,7 @@ export class ShapeshiftShiftPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
private showErrorAndBack(title: string, msg: any): void {
|
private showErrorAndBack(title: string, msg: any): void {
|
||||||
title = title ? title : 'Error'; // TODO: gettextCatalog
|
title = title ? title : this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
msg = (msg && msg.errors) ? msg.errors[0].message : msg;
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, Events, ModalController } from 'ionic-angular';
|
import { NavController, NavParams, Events, ModalController } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { BwcProvider } from '../../providers/bwc/bwc';
|
import { BwcProvider } from '../../providers/bwc/bwc';
|
||||||
|
@ -47,7 +48,8 @@ export class PaperWalletPage {
|
||||||
private feeProvider: FeeProvider,
|
private feeProvider: FeeProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private events: Events,
|
private events: Events,
|
||||||
private modalCtrl: ModalController
|
private modalCtrl: ModalController,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.bitcore = this.bwcProvider.getBitcore();
|
this.bitcore = this.bwcProvider.getBitcore();
|
||||||
}
|
}
|
||||||
|
@ -71,7 +73,7 @@ export class PaperWalletPage {
|
||||||
if (!this.wallet) return;
|
if (!this.wallet) return;
|
||||||
if (!this.isPkEncrypted) this.scanFunds();
|
if (!this.isPkEncrypted) this.scanFunds();
|
||||||
else {
|
else {
|
||||||
let message = 'Private key encrypted. Enter password'; //TODO gettextcatalog
|
let message = this.translate.instant('Private key encrypted. Enter password');
|
||||||
this.popupProvider.ionicPrompt(null, message, null).then((res) => {
|
this.popupProvider.ionicPrompt(null, message, null).then((res) => {
|
||||||
this.passphrase = res;
|
this.passphrase = res;
|
||||||
this.scanFunds();
|
this.scanFunds();
|
||||||
|
@ -118,13 +120,13 @@ export class PaperWalletPage {
|
||||||
this.privateKey = data.privateKey;
|
this.privateKey = data.privateKey;
|
||||||
this.balanceSat = data.balance;
|
this.balanceSat = data.balance;
|
||||||
if (this.balanceSat <= 0) {
|
if (this.balanceSat <= 0) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Not funds found'); //TODO gettextcatalog
|
this.popupProvider.ionicAlert('Error', this.translate.instant('Not funds found'));
|
||||||
this.navCtrl.pop();
|
this.navCtrl.pop();
|
||||||
}
|
}
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.onGoingProcessProvider.set('scanning', false);
|
this.onGoingProcessProvider.set('scanning', false);
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
this.popupProvider.ionicAlert('Error scanning funds:', err || err.toString());//TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error scanning funds:'), err || err.toString());
|
||||||
this.navCtrl.pop();
|
this.navCtrl.pop();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -164,7 +166,7 @@ export class PaperWalletPage {
|
||||||
this.openSuccessModal();
|
this.openSuccessModal();
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
this.popupProvider.ionicAlert('Error sweeping wallet:', err || err.toString());//TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error sweeping wallet:'), err || err.toString());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,8 +184,8 @@ export class PaperWalletPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public openSuccessModal(): void {
|
public openSuccessModal(): void {
|
||||||
let successComment = "Check the transaction on your wallet details"; //TODO gettextcatalog
|
let successComment = this.translate.instant("Check the transaction on your wallet details");
|
||||||
let successText = 'Sweep Completed'; //TODO gettextcatalog
|
let successText = this.translate.instant('Sweep Completed');
|
||||||
let modal = this.modalCtrl.create(SuccessModalPage, { successText: successText, successComment: successComment }, { showBackdrop: true, enableBackdropDismiss: false });
|
let modal = this.modalCtrl.create(SuccessModalPage, { successText: successText, successComment: successComment }, { showBackdrop: true, enableBackdropDismiss: false });
|
||||||
modal.present();
|
modal.present();
|
||||||
modal.onDidDismiss(() => {
|
modal.onDidDismiss(() => {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, Events, ModalController } from 'ionic-angular';
|
import { NavController, Events, ModalController } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { PlatformProvider } from '../../providers/platform/platform';
|
import { PlatformProvider } from '../../providers/platform/platform';
|
||||||
|
@ -45,7 +46,8 @@ export class ScanPage {
|
||||||
private events: Events,
|
private events: Events,
|
||||||
private modalCtrl: ModalController,
|
private modalCtrl: ModalController,
|
||||||
private externalLinkProvider: ExternalLinkProvider,
|
private externalLinkProvider: ExternalLinkProvider,
|
||||||
private logger: Logger
|
private logger: Logger,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.lightActive = false;
|
this.lightActive = false;
|
||||||
this.canEnableLight = true;
|
this.canEnableLight = true;
|
||||||
|
@ -78,7 +80,7 @@ export class ScanPage {
|
||||||
ionViewDidEnter() {
|
ionViewDidEnter() {
|
||||||
//TODO support for browser
|
//TODO support for browser
|
||||||
if (!this.platform.isCordova) {
|
if (!this.platform.isCordova) {
|
||||||
this.notSupportedMessage = "Scanner not supported"; //TODO gettextcatalog
|
this.notSupportedMessage = this.translate.instant("Scanner not supported");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// try initializing and refreshing status any time the view is entered
|
// try initializing and refreshing status any time the view is entered
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { ViewController } from 'ionic-angular';
|
import { ViewController } from 'ionic-angular';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Providers
|
// Providers
|
||||||
import { FeeProvider } from '../../../providers/fee/fee';
|
import { FeeProvider } from '../../../providers/fee/fee';
|
||||||
|
@ -37,13 +38,12 @@ export class ChooseFeeLevelPage {
|
||||||
public showMaxWarning: boolean;
|
public showMaxWarning: boolean;
|
||||||
public showMinWarning: boolean;
|
public showMinWarning: boolean;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private viewCtrl: ViewController,
|
private viewCtrl: ViewController,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private feeProvider: FeeProvider
|
private feeProvider: FeeProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
// From parent controller
|
// From parent controller
|
||||||
this.network = this.viewCtrl.data.network;
|
this.network = this.viewCtrl.data.network;
|
||||||
|
@ -53,7 +53,7 @@ export class ChooseFeeLevelPage {
|
||||||
this.customFeePerKB = this.viewCtrl.data.customFeePerKB ? this.viewCtrl.data.customFeePerKB : null;
|
this.customFeePerKB = this.viewCtrl.data.customFeePerKB ? this.viewCtrl.data.customFeePerKB : null;
|
||||||
this.feePerSatByte = this.viewCtrl.data.feePerSatByte ? this.viewCtrl.data.feePerSatByte : null;
|
this.feePerSatByte = this.viewCtrl.data.feePerSatByte ? this.viewCtrl.data.feePerSatByte : null;
|
||||||
|
|
||||||
if (_.isEmpty(this.feeLevel)) this.showErrorAndClose(null, 'Fee level is not defined'); // TODO: GetTextCatalog
|
if (_.isEmpty(this.feeLevel)) this.showErrorAndClose(null, this.translate.instant('Fee level is not defined'));
|
||||||
this.selectedFee = this.feeLevel;
|
this.selectedFee = this.feeLevel;
|
||||||
|
|
||||||
this.feeOpts = Object.keys(this.feeProvider.feeOpts);
|
this.feeOpts = Object.keys(this.feeProvider.feeOpts);
|
||||||
|
@ -61,7 +61,7 @@ export class ChooseFeeLevelPage {
|
||||||
this.feeProvider.getFeeLevels(this.coin).then((levels: any) => {
|
this.feeProvider.getFeeLevels(this.coin).then((levels: any) => {
|
||||||
this.loadingFee = false;
|
this.loadingFee = false;
|
||||||
if (_.isEmpty(levels)) {
|
if (_.isEmpty(levels)) {
|
||||||
this.showErrorAndClose(null, 'Could not get fee levels'); // TODO: GetTextCatalog
|
this.showErrorAndClose(null, this.translate.instant('Could not get fee levels'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.feeLevels = levels;
|
this.feeLevels = levels;
|
||||||
|
@ -78,7 +78,7 @@ export class ChooseFeeLevelPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
private showErrorAndClose(title: string, msg: string): void {
|
private showErrorAndClose(title: string, msg: string): void {
|
||||||
title = title ? title : 'Error'; // TODO: GetTextCatalog
|
title = title ? title : this.translate.instant('Error');
|
||||||
this.logger.error(msg);
|
this.logger.error(msg);
|
||||||
this.popupProvider.ionicAlert(title, msg).then(() => {
|
this.popupProvider.ionicAlert(title, msg).then(() => {
|
||||||
this.viewCtrl.dismiss();
|
this.viewCtrl.dismiss();
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
|
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { PayProPage } from '../../paypro/paypro';
|
import { PayProPage } from '../../paypro/paypro';
|
||||||
|
@ -72,7 +73,8 @@ export class ConfirmPage {
|
||||||
private txConfirmNotificationProvider: TxConfirmNotificationProvider,
|
private txConfirmNotificationProvider: TxConfirmNotificationProvider,
|
||||||
private modalCtrl: ModalController,
|
private modalCtrl: ModalController,
|
||||||
private txFormatProvider: TxFormatProvider,
|
private txFormatProvider: TxFormatProvider,
|
||||||
private events: Events
|
private events: Events,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.bitcoreCash = this.bwcProvider.getBitcoreCash();
|
this.bitcoreCash = this.bwcProvider.getBitcoreCash();
|
||||||
this.CONFIRM_LIMIT_USD = 20;
|
this.CONFIRM_LIMIT_USD = 20;
|
||||||
|
@ -110,7 +112,7 @@ export class ConfirmPage {
|
||||||
|
|
||||||
this.tx.feeLevelName = this.feeProvider.feeOpts[this.tx.feeLevel];
|
this.tx.feeLevelName = this.feeProvider.feeOpts[this.tx.feeLevel];
|
||||||
this.showAddress = false;
|
this.showAddress = false;
|
||||||
this.walletSelectorTitle = 'Send from'; // TODO gettextCatalog
|
this.walletSelectorTitle = this.translate.instant('Send from');
|
||||||
}
|
}
|
||||||
|
|
||||||
ionViewDidLoad() {
|
ionViewDidLoad() {
|
||||||
|
@ -143,7 +145,7 @@ export class ConfirmPage {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!this.wallets || !this.wallets.length) {
|
if (!this.wallets || !this.wallets.length) {
|
||||||
this.setNoWallet('No wallets available', true); // TODO gettextCatalog
|
this.setNoWallet(this.translate.instant('No wallets available'), true);
|
||||||
return resolve();
|
return resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +167,7 @@ export class ConfirmPage {
|
||||||
return reject('Could not update any wallet');
|
return reject('Could not update any wallet');
|
||||||
|
|
||||||
if (_.isEmpty(filteredWallets)) {
|
if (_.isEmpty(filteredWallets)) {
|
||||||
this.setNoWallet('Insufficient funds', true); // TODO gettextCatalog
|
this.setNoWallet(this.translate.instant('Insufficient funds'), true);
|
||||||
return reject('Insufficient funds');
|
return reject('Insufficient funds');
|
||||||
}
|
}
|
||||||
this.wallets = _.clone(filteredWallets);
|
this.wallets = _.clone(filteredWallets);
|
||||||
|
@ -178,7 +180,7 @@ export class ConfirmPage {
|
||||||
return reject('Could not update any wallet');
|
return reject('Could not update any wallet');
|
||||||
|
|
||||||
if (_.isEmpty(filteredWallets)) {
|
if (_.isEmpty(filteredWallets)) {
|
||||||
this.setNoWallet('Insufficient funds', true); // TODO gettextCatalog
|
this.setNoWallet(this.translate.instant('Insufficient funds'), true);
|
||||||
return reject('Insufficient funds for fee');
|
return reject('Insufficient funds for fee');
|
||||||
}
|
}
|
||||||
this.wallets = _.clone(filteredWallets);
|
this.wallets = _.clone(filteredWallets);
|
||||||
|
@ -198,7 +200,7 @@ export class ConfirmPage {
|
||||||
|
|
||||||
private exitWithError(err: any) {
|
private exitWithError(err: any) {
|
||||||
this.logger.info('Error setting wallet selector:' + err);
|
this.logger.info('Error setting wallet selector:' + err);
|
||||||
this.popupProvider.ionicAlert("", this.bwcErrorProvider.msg(err)).then(() => { // TODO gettextCatalog
|
this.popupProvider.ionicAlert("", this.bwcErrorProvider.msg(err)).then(() => {
|
||||||
this.navCtrl.popToRoot();
|
this.navCtrl.popToRoot();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -226,21 +228,21 @@ export class ConfirmPage {
|
||||||
private setButtonText(isMultisig: boolean, isPayPro: boolean): void {
|
private setButtonText(isMultisig: boolean, isPayPro: boolean): void {
|
||||||
if (isPayPro) {
|
if (isPayPro) {
|
||||||
if (this.isCordova && !this.isWindowsPhoneApp) {
|
if (this.isCordova && !this.isWindowsPhoneApp) {
|
||||||
this.buttonText = 'Slide to pay'; // TODO gettextCatalog
|
this.buttonText = this.translate.instant('Slide to pay');
|
||||||
} else {
|
} else {
|
||||||
this.buttonText = 'Click to pay'; // TODO gettextCatalog
|
this.buttonText = this.translate.instant('Click to pay');
|
||||||
}
|
}
|
||||||
} else if (isMultisig) {
|
} else if (isMultisig) {
|
||||||
if (this.isCordova && !this.isWindowsPhoneApp) {
|
if (this.isCordova && !this.isWindowsPhoneApp) {
|
||||||
this.buttonText = 'Slide to accept'; // TODO gettextCatalog
|
this.buttonText = this.translate.instant('Slide to accept');
|
||||||
} else {
|
} else {
|
||||||
this.buttonText = 'Click to accept'; // TODO gettextCatalog
|
this.buttonText = this.translate.instant('Click to accept');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (this.isCordova && !this.isWindowsPhoneApp) {
|
if (this.isCordova && !this.isWindowsPhoneApp) {
|
||||||
this.buttonText = 'Slide to send'; // TODO gettextCatalog
|
this.buttonText = this.translate.instant('Slide to send');
|
||||||
} else {
|
} else {
|
||||||
this.buttonText = 'Click to send'; // TODO gettextCatalog
|
this.buttonText = this.translate.instant('Click to send');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,7 +261,7 @@ export class ConfirmPage {
|
||||||
|
|
||||||
if (now > expirationTime) {
|
if (now > expirationTime) {
|
||||||
this.paymentExpired = true;
|
this.paymentExpired = true;
|
||||||
this.remainingTimeStr = 'Expired'; // TODO gettextCatalog
|
this.remainingTimeStr = this.translate.instant('Expired');
|
||||||
if (countDown) {
|
if (countDown) {
|
||||||
/* later */
|
/* later */
|
||||||
clearInterval(countDown);
|
clearInterval(countDown);
|
||||||
|
@ -325,10 +327,10 @@ export class ConfirmPage {
|
||||||
this.logger.debug('Send max info', sendMaxInfo);
|
this.logger.debug('Send max info', sendMaxInfo);
|
||||||
|
|
||||||
if (sendMaxInfo.amount == 0) {
|
if (sendMaxInfo.amount == 0) {
|
||||||
this.setNoWallet('Insufficient funds for fee', false); // TODO gettextCatalog
|
this.setNoWallet(this.translate.instant('Insufficient funds for fee'), false);
|
||||||
this.popupProvider.ionicAlert('Error', 'Not enough funds for fee').then(() => {
|
this.popupProvider.ionicAlert('Error', 'Not enough funds for fee').then(() => {
|
||||||
return resolve('no_funds');
|
return resolve('no_funds');
|
||||||
}); // TODO gettextCatalog
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.sendMaxInfo = sendMaxInfo;
|
tx.sendMaxInfo = sendMaxInfo;
|
||||||
|
@ -350,7 +352,7 @@ export class ConfirmPage {
|
||||||
});
|
});
|
||||||
|
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
let msg = 'Error getting SendMax information'; // TODO gettextCatalog
|
let msg = this.translate.instant('Error getting SendMax information');
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -414,12 +416,14 @@ export class ConfirmPage {
|
||||||
let warningMsg = [];
|
let warningMsg = [];
|
||||||
if (sendMaxInfo.utxosBelowFee > 0) {
|
if (sendMaxInfo.utxosBelowFee > 0) {
|
||||||
let amountBelowFeeStr = (sendMaxInfo.amountBelowFee / 1e8);
|
let amountBelowFeeStr = (sendMaxInfo.amountBelowFee / 1e8);
|
||||||
warningMsg.push("A total of " + amountBelowFeeStr + " " + this.tx.coin.toUpperCase() + " were excluded. These funds come from UTXOs smaller than the network fee provided.");// TODO gettextCatalog
|
let message = "A total of " + amountBelowFeeStr + " " + this.tx.coin.toUpperCase() + " were excluded. These funds come from UTXOs smaller than the network fee provided."; // TODO: translate
|
||||||
|
warningMsg.push(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sendMaxInfo.utxosAboveMaxSize > 0) {
|
if (sendMaxInfo.utxosAboveMaxSize > 0) {
|
||||||
let amountAboveMaxSizeStr = (sendMaxInfo.amountAboveMaxSize / 1e8);
|
let amountAboveMaxSizeStr = (sendMaxInfo.amountAboveMaxSize / 1e8);
|
||||||
warningMsg.push("A total of " + amountAboveMaxSizeStr + " " + this.tx.coin.toUpperCase() + " were excluded. The maximum size allowed for a transaction was exceeded.");// TODO gettextCatalog
|
let message = "A total of " + amountAboveMaxSizeStr + " " + this.tx.coin.toUpperCase() + " were excluded. The maximum size allowed for a transaction was exceeded."; // TODO: translate
|
||||||
|
warningMsg.push(message);
|
||||||
}
|
}
|
||||||
return warningMsg.join('\n');
|
return warningMsg.join('\n');
|
||||||
};
|
};
|
||||||
|
@ -429,14 +433,14 @@ export class ConfirmPage {
|
||||||
|
|
||||||
// ToDo: use a credential's (or fc's) function for this
|
// ToDo: use a credential's (or fc's) function for this
|
||||||
if (tx.description && !wallet.credentials.sharedEncryptingKey) {
|
if (tx.description && !wallet.credentials.sharedEncryptingKey) {
|
||||||
let msg = 'Could not add message to imported wallet without shared encrypting key'; // TODO gettextCatalog
|
let msg = this.translate.instant('Could not add message to imported wallet without shared encrypting key');
|
||||||
this.logger.warn(msg);
|
this.logger.warn(msg);
|
||||||
this.setSendError(msg);
|
this.setSendError(msg);
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx.amount > Number.MAX_SAFE_INTEGER) {
|
if (tx.amount > Number.MAX_SAFE_INTEGER) {
|
||||||
let msg = 'Amount too big'; // TODO gettextCatalog
|
let msg = this.translate.instant('Amount too big');
|
||||||
this.logger.warn(msg);
|
this.logger.warn(msg);
|
||||||
this.setSendError(msg);
|
this.setSendError(msg);
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
|
@ -477,7 +481,7 @@ export class ConfirmPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
private setSendError(msg: string) {
|
private setSendError(msg: string) {
|
||||||
this.popupProvider.ionicAlert('Error at confirm', this.bwcErrorProvider.msg(msg)); // TODO gettextCatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error at confirm'), this.bwcErrorProvider.msg(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
public toggleAddress(): void {
|
public toggleAddress(): void {
|
||||||
|
@ -489,7 +493,7 @@ export class ConfirmPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public showDescriptionPopup(tx) {
|
public showDescriptionPopup(tx) {
|
||||||
let message = 'Add description'; // TODO gettextCatalog
|
let message = this.translate.instant('Add description');
|
||||||
let opts = {
|
let opts = {
|
||||||
defaultText: tx.description
|
defaultText: tx.description
|
||||||
};
|
};
|
||||||
|
@ -504,7 +508,7 @@ export class ConfirmPage {
|
||||||
if (!tx || !wallet) return;
|
if (!tx || !wallet) return;
|
||||||
|
|
||||||
if (this.paymentExpired) {
|
if (this.paymentExpired) {
|
||||||
this.popupProvider.ionicAlert(null, 'This bitcoin payment request has expired.'); // TODO gettextCatalog
|
this.popupProvider.ionicAlert(null, this.translate.instant('This bitcoin payment request has expired.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,9 +530,9 @@ export class ConfirmPage {
|
||||||
let amount = (this.tx.amount / 1e8).toFixed(8);
|
let amount = (this.tx.amount / 1e8).toFixed(8);
|
||||||
let unit = this.config.wallet.settings.unitName;
|
let unit = this.config.wallet.settings.unitName;
|
||||||
let name = wallet.name;
|
let name = wallet.name;
|
||||||
let message = 'Sending ' + amount + ' ' + unit + ' from your ' + name + ' wallet'; // TODO gettextCatalog
|
let message = 'Sending ' + amount + ' ' + unit + ' from your ' + name + ' wallet'; // TODO: translate
|
||||||
let okText = 'Confirm'; // TODO gettextCatalog
|
let okText = this.translate.instant('Confirm');
|
||||||
let cancelText = 'Cancel'; // TODO gettextCatalog
|
let cancelText = this.translate.instant('Cancel');
|
||||||
this.popupProvider.ionicConfirm(null, message, okText, cancelText).then((ok: boolean) => {
|
this.popupProvider.ionicConfirm(null, message, okText, cancelText).then((ok: boolean) => {
|
||||||
return resolve(!ok);
|
return resolve(!ok);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//pages
|
//pages
|
||||||
import { TermsOfUsePage } from './terms-of-use/terms-of-use';
|
import { TermsOfUsePage } from './terms-of-use/terms-of-use';
|
||||||
|
@ -23,7 +24,8 @@ export class AboutPage {
|
||||||
private navCtrl: NavController,
|
private navCtrl: NavController,
|
||||||
private app: AppProvider,
|
private app: AppProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private externalLinkProvider: ExternalLinkProvider
|
private externalLinkProvider: ExternalLinkProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
ionViewDidLoad() {
|
ionViewDidLoad() {
|
||||||
|
@ -40,10 +42,10 @@ export class AboutPage {
|
||||||
public openExternalLink(): void {
|
public openExternalLink(): void {
|
||||||
let url = 'https://github.com/bitpay/' + this.app.info.gitHubRepoName + '/tree/' + this.app.info.commitHash + '';
|
let url = 'https://github.com/bitpay/' + this.app.info.gitHubRepoName + '/tree/' + this.app.info.commitHash + '';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = 'Open GitHub Project'; //TODO gettextcatalog
|
let title = this.translate.instant('Open GitHub Project');
|
||||||
let message = 'You can see the latest developments and contribute to this open source app by visiting our project on GitHub.'; //TODO gettextcatalog
|
let message = this.translate.instant('You can see the latest developments and contribute to this open source app by visiting our project on GitHub.');
|
||||||
let okText = 'Open GitHub'; //TODO gettextcatalog
|
let okText = this.translate.instant('Open GitHub');
|
||||||
let cancelText = 'Go Back'; //TODO gettextcatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { DOCUMENT } from "@angular/platform-browser";
|
import { DOCUMENT } from "@angular/platform-browser";
|
||||||
import { Inject } from '@angular/core';
|
import { Inject } from '@angular/core';
|
||||||
import { ActionSheetController, ToastController } from 'ionic-angular';
|
import { ActionSheetController, ToastController } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//native
|
//native
|
||||||
import { SocialSharing } from '@ionic-native/social-sharing';
|
import { SocialSharing } from '@ionic-native/social-sharing';
|
||||||
|
@ -34,7 +35,8 @@ export class SessionLogPage {
|
||||||
private socialSharing: SocialSharing,
|
private socialSharing: SocialSharing,
|
||||||
private actionSheetCtrl: ActionSheetController,
|
private actionSheetCtrl: ActionSheetController,
|
||||||
private toastCtrl: ToastController,
|
private toastCtrl: ToastController,
|
||||||
private platformProvider: PlatformProvider
|
private platformProvider: PlatformProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.dom = dom;
|
this.dom = dom;
|
||||||
this.config = this.configProvider.get();
|
this.config = this.configProvider.get();
|
||||||
|
@ -84,7 +86,7 @@ export class SessionLogPage {
|
||||||
textarea.value = this.prepareLogs();
|
textarea.value = this.prepareLogs();
|
||||||
textarea.select();
|
textarea.select();
|
||||||
this.dom.execCommand('copy');
|
this.dom.execCommand('copy');
|
||||||
let message = 'Copied to clipboard' //TODO gettextcatalog
|
let message = this.translate.instant('Copied to clipboard');
|
||||||
let showSuccess = this.toastCtrl.create({
|
let showSuccess = this.toastCtrl.create({
|
||||||
message: message,
|
message: message,
|
||||||
duration: 1000,
|
duration: 1000,
|
||||||
|
@ -107,8 +109,8 @@ export class SessionLogPage {
|
||||||
|
|
||||||
public showOptionsMenu(): void {
|
public showOptionsMenu(): void {
|
||||||
|
|
||||||
let copyText = 'Copy to clipboard' //TODO gettextcatalog
|
let copyText = this.translate.instant('Copy to clipboard');
|
||||||
let emailText = 'Send by email' //TODO gettextcatalog
|
let emailText = this.translate.instant('Send by email');
|
||||||
let button = [];
|
let button = [];
|
||||||
|
|
||||||
if (this.isCordova) {
|
if (this.isCordova) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
import { AmountPage } from '../../../../pages/send/amount/amount';
|
import { AmountPage } from '../../../../pages/send/amount/amount';
|
||||||
|
@ -31,7 +32,8 @@ export class AddressbookViewPage {
|
||||||
private bwcProvider: BwcProvider,
|
private bwcProvider: BwcProvider,
|
||||||
private navCtrl: NavController,
|
private navCtrl: NavController,
|
||||||
private navParams: NavParams,
|
private navParams: NavParams,
|
||||||
private popupProvider: PopupProvider
|
private popupProvider: PopupProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.bitcoreCash = this.bwcProvider.getBitcoreCash();
|
this.bitcoreCash = this.bwcProvider.getBitcoreCash();
|
||||||
this.address = this.navParams.data.contact.address;
|
this.address = this.navParams.data.contact.address;
|
||||||
|
@ -61,14 +63,14 @@ export class AddressbookViewPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public remove(addr: string): void {
|
public remove(addr: string): void {
|
||||||
var title = 'Warning!'; // Todo: gettextCatalog
|
var title = this.translate.instant('Warning!');
|
||||||
var message = 'Are you sure you want to delete this contact?'; // Todo: gettextCatalog
|
var message = this.translate.instant('Are you sure you want to delete this contact?');
|
||||||
this.popupProvider.ionicConfirm(title, message, null, null).then((res: any) => {
|
this.popupProvider.ionicConfirm(title, message, null, null).then((res: any) => {
|
||||||
if (!res) return;
|
if (!res) return;
|
||||||
this.addressBookProvider.remove(addr).then((ab) => {
|
this.addressBookProvider.remove(addr).then((ab) => {
|
||||||
this.navCtrl.pop();
|
this.navCtrl.pop();
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.popupProvider.ionicAlert('Error', err); // Todo: gettextCatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from "@angular/core";
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
import { Logger } from "../../../providers/logger/logger";
|
import { Logger } from "../../../providers/logger/logger";
|
||||||
import * as lodash from 'lodash';
|
import * as lodash from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Providers
|
// Providers
|
||||||
import { WalletProvider } from "../../../providers/wallet/wallet";
|
import { WalletProvider } from "../../../providers/wallet/wallet";
|
||||||
|
@ -39,6 +40,7 @@ export class BitcoinCashPage {
|
||||||
private bwcErrorProvider: BwcErrorProvider,
|
private bwcErrorProvider: BwcErrorProvider,
|
||||||
private bwcProvider: BwcProvider,
|
private bwcProvider: BwcProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.walletsBTC = this.profileProvider.getWallets({
|
this.walletsBTC = this.profileProvider.getWallets({
|
||||||
coin: 'btc',
|
coin: 'btc',
|
||||||
|
@ -66,13 +68,13 @@ export class BitcoinCashPage {
|
||||||
|
|
||||||
lodash.each(this.walletsBTC, (w) => {
|
lodash.each(this.walletsBTC, (w) => {
|
||||||
if (w.credentials.derivationStrategy != 'BIP44') {
|
if (w.credentials.derivationStrategy != 'BIP44') {
|
||||||
w.excludeReason = 'Non BIP44 wallet'; // TODO gettextcatalog
|
w.excludeReason = this.translate.instant('Non BIP44 wallet');
|
||||||
this.nonEligibleWallets.push(w);
|
this.nonEligibleWallets.push(w);
|
||||||
} else if (!w.canSign()) {
|
} else if (!w.canSign()) {
|
||||||
w.excludeReason = 'Read only wallet'; // TODO gettextcatalog
|
w.excludeReason = this.translate.instant('Read only wallet');
|
||||||
this.nonEligibleWallets.push(w);
|
this.nonEligibleWallets.push(w);
|
||||||
} else if (w.needsBackup) {
|
} else if (w.needsBackup) {
|
||||||
w.excludeReason = 'Backup needed'; // TODO gettextcatalog
|
w.excludeReason = this.translate.instant('Backup needed');
|
||||||
this.nonEligibleWallets.push(w);
|
this.nonEligibleWallets.push(w);
|
||||||
} else {
|
} else {
|
||||||
this.availableWallets.push(w);
|
this.availableWallets.push(w);
|
||||||
|
@ -94,9 +96,9 @@ export class BitcoinCashPage {
|
||||||
openRecoveryToolLink(): void {
|
openRecoveryToolLink(): void {
|
||||||
let url = 'https://bitpay.github.io/copay-recovery/';
|
let url = 'https://bitpay.github.io/copay-recovery/';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = 'Open the recovery tool'; //TODO gettextcatalog
|
let title = this.translate.instant('Open the recovery tool');
|
||||||
let okText = 'Open'; //TODO gettextcatalog
|
let okText = this.translate.instant('Open');
|
||||||
let cancelText = 'Go Back'; //TODO gettextcatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, null, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, null, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { LanguageProvider } from '../../../providers/language/language';
|
import { LanguageProvider } from '../../../providers/language/language';
|
||||||
|
@ -17,7 +18,8 @@ export class LanguagePage {
|
||||||
constructor(
|
constructor(
|
||||||
private navCtrl: NavController,
|
private navCtrl: NavController,
|
||||||
private languageProvider: LanguageProvider,
|
private languageProvider: LanguageProvider,
|
||||||
private externalLinkProvider: ExternalLinkProvider
|
private externalLinkProvider: ExternalLinkProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.currentLanguage = this.languageProvider.getCurrent();
|
this.currentLanguage = this.languageProvider.getCurrent();
|
||||||
this.languages = this.languageProvider.getAvailables();
|
this.languages = this.languageProvider.getAvailables();
|
||||||
|
@ -26,10 +28,10 @@ export class LanguagePage {
|
||||||
public openExternalLink(): void {
|
public openExternalLink(): void {
|
||||||
let url = 'https://crowdin.com/project/copay';
|
let url = 'https://crowdin.com/project/copay';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = 'Open Translation Community'; //TODO gettextcatalog
|
let title = this.translate.instant('Open Translation Community');
|
||||||
let message = 'You can make contributions by signing up on our Crowdin community translation website. We’re looking forward to hearing from you!'; //TODO gettextcatalog
|
let message = this.translate.instant('You can make contributions by signing up on our Crowdin community translation website. We’re looking forward to hearing from you!');
|
||||||
let okText = 'Open Crowdin'; //TODO gettextcatalog
|
let okText = this.translate.instant('Open Crowdin');
|
||||||
let cancelText = 'Go Back'; //TODO gettextcatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { ModalController } from 'ionic-angular';
|
import { ModalController } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//pages
|
//pages
|
||||||
import { PinModalPage } from '../../pin/pin';
|
import { PinModalPage } from '../../pin/pin';
|
||||||
|
@ -25,7 +26,8 @@ export class LockPage {
|
||||||
private modalCtrl: ModalController,
|
private modalCtrl: ModalController,
|
||||||
private configProvider: ConfigProvider,
|
private configProvider: ConfigProvider,
|
||||||
private touchIdProvider: TouchIdProvider,
|
private touchIdProvider: TouchIdProvider,
|
||||||
private profileProvider: ProfileProvider
|
private profileProvider: ProfileProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.checkLockOptions();
|
this.checkLockOptions();
|
||||||
}
|
}
|
||||||
|
@ -82,7 +84,7 @@ export class LockPage {
|
||||||
let lock = { method: 'Disabled', value: null, bannedUntil: null };
|
let lock = { method: 'Disabled', value: null, bannedUntil: null };
|
||||||
this.configProvider.set({ lock });
|
this.configProvider.set({ lock });
|
||||||
this.checkLockOptions();
|
this.checkLockOptions();
|
||||||
}).catch(()=>{
|
}).catch(() => {
|
||||||
this.checkLockOptions();
|
this.checkLockOptions();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -101,10 +103,10 @@ export class LockPage {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (singleLivenetWallet) {
|
if (singleLivenetWallet) {
|
||||||
this.needsBackupMsg = 'Backup your wallet before using this function'; //TODO gettextCatalog
|
this.needsBackupMsg = this.translate.instant('Backup your wallet before using this function');
|
||||||
return true;
|
return true;
|
||||||
} else if (atLeastOneLivenetWallet) {
|
} else if (atLeastOneLivenetWallet) {
|
||||||
this.needsBackupMsg = 'Backup all your wallets before using this function'; //TODO gettextCatalog
|
this.needsBackupMsg = this.translate.instant('Backup all your wallets before using this function');
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
this.needsBackupMsg = null;
|
this.needsBackupMsg = null;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { AppProvider } from '../../providers/app/app';
|
import { AppProvider } from '../../providers/app/app';
|
||||||
|
@ -53,7 +54,8 @@ export class SettingsPage {
|
||||||
private configProvider: ConfigProvider,
|
private configProvider: ConfigProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private homeIntegrationsProvider: HomeIntegrationsProvider,
|
private homeIntegrationsProvider: HomeIntegrationsProvider,
|
||||||
private platformProvider: PlatformProvider
|
private platformProvider: PlatformProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.appName = this.app.info.nameCase;
|
this.appName = this.app.info.nameCase;
|
||||||
this.currentLanguageName = this.language.getName(this.language.getCurrent());
|
this.currentLanguageName = this.language.getName(this.language.getCurrent());
|
||||||
|
@ -133,7 +135,7 @@ export class SettingsPage {
|
||||||
this.navCtrl.push(FeedbackCompletePage, { score: 4, skipped: true, fromSettings: true });
|
this.navCtrl.push(FeedbackCompletePage, { score: 4, skipped: true, fromSettings: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
public openIntegrationSettings(name: string): void {
|
public openIntegrationSettings(name: string): void {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case 'coinbase':
|
case 'coinbase':
|
||||||
this.navCtrl.push(CoinbaseSettingsPage);
|
this.navCtrl.push(CoinbaseSettingsPage);
|
||||||
|
@ -145,12 +147,12 @@ export class SettingsPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public openHelpExternalLink(): void {
|
public openHelpExternalLink(): void {
|
||||||
var url = this.appName == 'Copay' ? 'https://github.com/bitpay/copay/issues' : 'https://help.bitpay.com/bitpay-app';
|
let url = this.appName == 'Copay' ? 'https://github.com/bitpay/copay/issues' : 'https://help.bitpay.com/bitpay-app';
|
||||||
var optIn = true;
|
let optIn = true;
|
||||||
var title = null;
|
let title = null;
|
||||||
var message = 'Help and support information is available at the website.'; // TODO gettextCatalog
|
let message = this.translate.instant('Help and support information is available at the website.');
|
||||||
var okText = 'Open'; // TODO gettextCatalog
|
let okText = this.translate.instant('Open');
|
||||||
var cancelText = 'Go Back'; // TODO gettextCatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, ModalController } from 'ionic-angular';
|
import { NavController, NavParams, ModalController } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../../providers/logger/logger';
|
import { Logger } from '../../../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { ProfileProvider } from '../../../../../providers/profile/profile';
|
import { ProfileProvider } from '../../../../../providers/profile/profile';
|
||||||
|
@ -50,7 +51,8 @@ export class WalletAddressesPage {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider,
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
private modalCtrl: ModalController,
|
private modalCtrl: ModalController,
|
||||||
private txFormatProvider: TxFormatProvider
|
private txFormatProvider: TxFormatProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.UNUSED_ADDRESS_LIMIT = 5;
|
this.UNUSED_ADDRESS_LIMIT = 5;
|
||||||
this.BALANCE_ADDRESS_LIMIT = 5;
|
this.BALANCE_ADDRESS_LIMIT = 5;
|
||||||
|
@ -81,12 +83,12 @@ export class WalletAddressesPage {
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, 'Could not update wallet')); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, this.translate.instant('Could not update wallet')));
|
||||||
});
|
});
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, 'Could not update wallet')); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, this.translate.instant('Could not update wallet')));
|
||||||
});
|
});
|
||||||
|
|
||||||
this.walletProvider.getLowUtxos(this.wallet).then((resp) => {
|
this.walletProvider.getLowUtxos(this.wallet).then((resp) => {
|
||||||
|
@ -124,7 +126,7 @@ export class WalletAddressesPage {
|
||||||
this.walletProvider.getMainAddresses(this.wallet, { limit: 1 }).then((_addr: any) => {
|
this.walletProvider.getMainAddresses(this.wallet, { limit: 1 }).then((_addr: any) => {
|
||||||
this.onGoingProcessProvider.set('generatingNewAddress', false);
|
this.onGoingProcessProvider.set('generatingNewAddress', false);
|
||||||
if (addr != _addr[0].address) {
|
if (addr != _addr[0].address) {
|
||||||
this.popupProvider.ionicAlert('Error', 'New address could not be generated. Please try again.'); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), this.translate.instant('New address could not be generated. Please try again.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.noBalance = [_addr[0]].concat(this.noBalance);
|
this.noBalance = [_addr[0]].concat(this.noBalance);
|
||||||
|
@ -133,7 +135,7 @@ export class WalletAddressesPage {
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
this.onGoingProcessProvider.set('generatingNewAddress', false);
|
this.onGoingProcessProvider.set('generatingNewAddress', false);
|
||||||
this.popupProvider.ionicAlert('Error', err); //TODO getextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
this.logger.error(err);
|
this.logger.error(err);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../../providers/logger/logger';
|
import { Logger } from '../../../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { ProfileProvider } from '../../../../../providers/profile/profile';
|
import { ProfileProvider } from '../../../../../providers/profile/profile';
|
||||||
|
@ -24,7 +25,8 @@ export class WalletDeletePage {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider,
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
private pushNotificationsProvider: PushNotificationsProvider,
|
private pushNotificationsProvider: PushNotificationsProvider,
|
||||||
private logger: Logger
|
private logger: Logger,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,14 +41,14 @@ export class WalletDeletePage {
|
||||||
}
|
}
|
||||||
|
|
||||||
public showDeletePopup(): void {
|
public showDeletePopup(): void {
|
||||||
var title = 'Warning!'; //TODO gettextcatalog
|
let title = this.translate.instant('Warning!');
|
||||||
var message = 'Are you sure you want to delete this wallet?'; //TODO gettextcatalog
|
let message = this.translate.instant('Are you sure you want to delete this wallet?');
|
||||||
this.popupProvider.ionicConfirm(title, message, null, null).then((res) => {
|
this.popupProvider.ionicConfirm(title, message, null, null).then((res) => {
|
||||||
if (res) this.deleteWallet();
|
if (res) this.deleteWallet();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
public deleteWallet() {
|
public deleteWallet(): void {
|
||||||
this.onGoingProcessProvider.set('deletingWallet', true);
|
this.onGoingProcessProvider.set('deletingWallet', true);
|
||||||
this.profileProvider.deleteWalletClient(this.wallet).then(() => {
|
this.profileProvider.deleteWalletClient(this.wallet).then(() => {
|
||||||
this.onGoingProcessProvider.set('deletingWallet', false);
|
this.onGoingProcessProvider.set('deletingWallet', false);
|
||||||
|
@ -54,7 +56,7 @@ export class WalletDeletePage {
|
||||||
this.navCtrl.popToRoot();
|
this.navCtrl.popToRoot();
|
||||||
this.navCtrl.parent.select(0);
|
this.navCtrl.parent.select(0);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
this.popupProvider.ionicAlert('Error', err.message || err);//TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err.message || err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, ToastController } from 'ionic-angular';
|
import { NavController, NavParams, ToastController } from 'ionic-angular';
|
||||||
import { Logger } from '../../../../../providers/logger/logger';
|
import { Logger } from '../../../../../providers/logger/logger';
|
||||||
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
import { Validators, FormBuilder, FormGroup } from '@angular/forms';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//native
|
//native
|
||||||
import { SocialSharing } from '@ionic-native/social-sharing';
|
import { SocialSharing } from '@ionic-native/social-sharing';
|
||||||
|
@ -52,7 +53,8 @@ export class WalletExportPage {
|
||||||
private socialSharing: SocialSharing,
|
private socialSharing: SocialSharing,
|
||||||
private appProvider: AppProvider,
|
private appProvider: AppProvider,
|
||||||
private clipboard: Clipboard,
|
private clipboard: Clipboard,
|
||||||
public toastCtrl: ToastController
|
public toastCtrl: ToastController,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.exportWalletForm = this.formBuilder.group({
|
this.exportWalletForm = this.formBuilder.group({
|
||||||
password: ['', Validators.required],
|
password: ['', Validators.required],
|
||||||
|
@ -121,10 +123,10 @@ export class WalletExportPage {
|
||||||
|
|
||||||
this.segments = 'qrCode';
|
this.segments = 'qrCode';
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
this.popupProvider.ionicAlert('Error', err); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
this.popupProvider.ionicAlert('Error', err); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -158,13 +160,13 @@ export class WalletExportPage {
|
||||||
this.navCtrl.popToRoot();
|
this.navCtrl.popToRoot();
|
||||||
this.navCtrl.parent.select(0);
|
this.navCtrl.parent.select(0);
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
this.popupProvider.ionicAlert('Error', 'Failed to export'); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), this.translate.instant('Failed to export'));
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.popupProvider.ionicAlert('Error', 'Failed to export'); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), this.translate.instant('Failed to export'));
|
||||||
});
|
});
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
this.popupProvider.ionicAlert('Error', err);
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,15 +199,15 @@ export class WalletExportPage {
|
||||||
|
|
||||||
var ew = this.backupProvider.walletExport(this.exportWalletForm.value.password, opts, this.navParams.data.walletId);
|
var ew = this.backupProvider.walletExport(this.exportWalletForm.value.password, opts, this.navParams.data.walletId);
|
||||||
if (!ew) {
|
if (!ew) {
|
||||||
this.popupProvider.ionicAlert('Error', 'Failed to export'); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), this.translate.instant('Failed to export'));
|
||||||
}
|
}
|
||||||
return resolve(ew);
|
return resolve(ew);
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
this.popupProvider.ionicAlert('Error', 'Failed to export'); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), this.translate.instant('Failed to export'));
|
||||||
return resolve();
|
return resolve();
|
||||||
});
|
});
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
this.popupProvider.ionicAlert('Error', err); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
return resolve();
|
return resolve();
|
||||||
});;
|
});;
|
||||||
});
|
});
|
||||||
|
@ -224,7 +226,7 @@ export class WalletExportPage {
|
||||||
var ew = backup;
|
var ew = backup;
|
||||||
if (!ew) return;
|
if (!ew) return;
|
||||||
this.clipboard.copy(ew);
|
this.clipboard.copy(ew);
|
||||||
let copyMessage = 'Copied to clipboard' //TODO gettextcatalog
|
let copyMessage = this.translate.instant('Copied to clipboard');
|
||||||
let showSuccess = this.toastCtrl.create({
|
let showSuccess = this.toastCtrl.create({
|
||||||
message: copyMessage,
|
message: copyMessage,
|
||||||
duration: 1000,
|
duration: 1000,
|
||||||
|
@ -234,7 +236,7 @@ export class WalletExportPage {
|
||||||
};
|
};
|
||||||
|
|
||||||
public sendWalletBackup(): void {
|
public sendWalletBackup(): void {
|
||||||
let preparingMessage = 'Preparing backup...' //TODO gettextcatalog
|
let preparingMessage = this.translate.instant('Preparing backup...');
|
||||||
let showSuccess = this.toastCtrl.create({
|
let showSuccess = this.toastCtrl.create({
|
||||||
message: preparingMessage,
|
message: preparingMessage,
|
||||||
duration: 1000,
|
duration: 1000,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams } from 'ionic-angular';
|
import { NavController, NavParams } from 'ionic-angular';
|
||||||
import { Logger } from '../../../providers/logger/logger';
|
import { Logger } from '../../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { ProfileProvider } from '../../../providers/profile/profile';
|
import { ProfileProvider } from '../../../providers/profile/profile';
|
||||||
|
@ -42,6 +43,7 @@ export class WalletSettingsPage {
|
||||||
private navCtrl: NavController,
|
private navCtrl: NavController,
|
||||||
private navParams: NavParams,
|
private navParams: NavParams,
|
||||||
private touchIdProvider: TouchIdProvider,
|
private touchIdProvider: TouchIdProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,9 +100,9 @@ export class WalletSettingsPage {
|
||||||
let url = 'https://github.com/bitpay/copay/wiki/COPAY---FAQ#what-the-spending-password-does';
|
let url = 'https://github.com/bitpay/copay/wiki/COPAY---FAQ#what-the-spending-password-does';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = null;
|
let title = null;
|
||||||
let message = 'Read more in our Wiki'; //TODO gettextcatalog
|
let message = this.translate.instant('Read more in our Wiki');
|
||||||
let okText = 'Open';//TODO gettextcatalog
|
let okText = this.translate.instant('Open');
|
||||||
let cancelText = 'Go Back';//TODO gettextcatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { ViewController, NavParams } from 'ionic-angular';
|
import { ViewController, NavParams } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'page-success',
|
selector: 'page-success',
|
||||||
|
@ -12,9 +13,10 @@ export class SuccessModalPage {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private viewCtrl: ViewController,
|
private viewCtrl: ViewController,
|
||||||
private navParams: NavParams
|
private navParams: NavParams,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.successText = this.navParams.data.successText ? this.navParams.data.successText : 'Payment Sent';
|
this.successText = this.navParams.data.successText ? this.navParams.data.successText : this.translate.instant('Payment Sent');
|
||||||
this.successComment = this.navParams.data.successComment ? this.navParams.data.successComment : '';
|
this.successComment = this.navParams.data.successComment ? this.navParams.data.successComment : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Component } from "@angular/core";
|
||||||
import { NavController, NavParams, Events } from 'ionic-angular';
|
import { NavController, NavParams, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
import * as _ from "lodash";
|
import * as _ from "lodash";
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Providers
|
// Providers
|
||||||
import { AddressBookProvider } from '../../providers/address-book/address-book';
|
import { AddressBookProvider } from '../../providers/address-book/address-book';
|
||||||
|
@ -50,12 +51,13 @@ export class TxDetailsPage {
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private txConfirmNotificationProvider: TxConfirmNotificationProvider,
|
private txConfirmNotificationProvider: TxConfirmNotificationProvider,
|
||||||
private txFormatProvider: TxFormatProvider,
|
private txFormatProvider: TxFormatProvider,
|
||||||
private walletProvider: WalletProvider
|
private walletProvider: WalletProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.config = this.configProvider.get();
|
this.config = this.configProvider.get();
|
||||||
|
|
||||||
this.txId = this.navParams.data.txid;
|
this.txId = this.navParams.data.txid;
|
||||||
this.title = 'Transaction'; // Todo: gettextCatalog
|
this.title = this.translate.instant('Transaction');
|
||||||
this.wallet = this.profileProvider.getWallet(this.navParams.data.walletId);
|
this.wallet = this.profileProvider.getWallet(this.navParams.data.walletId);
|
||||||
this.color = this.wallet.color;
|
this.color = this.wallet.color;
|
||||||
this.copayerId = this.wallet.credentials.copayerId;
|
this.copayerId = this.wallet.credentials.copayerId;
|
||||||
|
@ -95,9 +97,9 @@ export class TxDetailsPage {
|
||||||
let url = 'https://github.com/bitpay/copay/wiki/COPAY---FAQ#amount-too-low-to-spend';
|
let url = 'https://github.com/bitpay/copay/wiki/COPAY---FAQ#amount-too-low-to-spend';
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = null;
|
let title = null;
|
||||||
let message = 'Read more in our Wiki'; // Todo: gettextCatalog
|
let message = this.translate.instant('Read more in our Wiki');
|
||||||
let okText = 'Open'; // Todo: gettextCatalog
|
let okText = this.translate.instant('Open');
|
||||||
let cancelText = 'Go Back'; // Todo: gettextCatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,10 +118,10 @@ export class TxDetailsPage {
|
||||||
if (this.btx.action != 'sent' && this.btx.action != 'moved' || !this.isShared) return;
|
if (this.btx.action != 'sent' && this.btx.action != 'moved' || !this.isShared) return;
|
||||||
|
|
||||||
let actionDescriptions = {
|
let actionDescriptions = {
|
||||||
created: 'Proposal Created', // Todo: gettextCatalog
|
created: this.translate.instant('Proposal Created'),
|
||||||
accept: 'Accepted', // Todo: gettextCatalog
|
accept: this.translate.instant('Accepted'),
|
||||||
reject: 'Rejected', // Todo: gettextCatalog
|
reject: this.translate.instant('Rejected'),
|
||||||
broadcasted: 'Broadcasted' // Todo: gettextCatalog
|
broadcasted: this.translate.instant('Broadcasted')
|
||||||
};
|
};
|
||||||
|
|
||||||
this.actionList.push({
|
this.actionList.push({
|
||||||
|
@ -163,9 +165,9 @@ export class TxDetailsPage {
|
||||||
this.btx.feeRateStr = (this.btx.fees / (this.btx.amount + this.btx.fees) * 100).toFixed(2) + '%';
|
this.btx.feeRateStr = (this.btx.fees / (this.btx.amount + this.btx.fees) * 100).toFixed(2) + '%';
|
||||||
|
|
||||||
if (this.btx.action != 'invalid') {
|
if (this.btx.action != 'invalid') {
|
||||||
if (this.btx.action == 'sent') this.title = 'Sent Funds'; // Todo: gettextCatalog
|
if (this.btx.action == 'sent') this.title = this.translate.instant('Sent Funds');
|
||||||
if (this.btx.action == 'received') this.title = 'Received Funds'; // Todo: gettextCatalog
|
if (this.btx.action == 'received') this.title = this.translate.instant('Received Funds');
|
||||||
if (this.btx.action == 'moved') this.title = 'Moved Funds'; // Todo: gettextCatalog
|
if (this.btx.action == 'moved') this.title = this.translate.instant('Moved Funds');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.updateMemo();
|
this.updateMemo();
|
||||||
|
@ -183,7 +185,7 @@ export class TxDetailsPage {
|
||||||
if (!opts.hideLoading) this.onGoingProcess.set('loadingTxInfo', false);
|
if (!opts.hideLoading) this.onGoingProcess.set('loadingTxInfo', false);
|
||||||
this.logger.warn('Error getting transaction: ' + err);
|
this.logger.warn('Error getting transaction: ' + err);
|
||||||
this.navCtrl.pop();
|
this.navCtrl.pop();
|
||||||
return this.popupProvider.ionicAlert('Error', 'Transaction not available at this time'); // Todo: gettextCatalog
|
return this.popupProvider.ionicAlert('Error', this.translate.instant('Transaction not available at this time'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +196,7 @@ export class TxDetailsPage {
|
||||||
}
|
}
|
||||||
if (this.btx.note && this.btx.note.body) opts.defaultText = this.btx.note.body;
|
if (this.btx.note && this.btx.note.body) opts.defaultText = this.btx.note.body;
|
||||||
|
|
||||||
this.popupProvider.ionicPrompt(this.wallet.name, 'Memo', opts).then((text: string) => { // Todo: gettextCatalog
|
this.popupProvider.ionicPrompt(this.wallet.name, this.translate.instant('Memo'), opts).then((text: string) => {
|
||||||
if (typeof text == "undefined") return;
|
if (typeof text == "undefined") return;
|
||||||
|
|
||||||
this.btx.note = {
|
this.btx.note = {
|
||||||
|
@ -220,9 +222,9 @@ export class TxDetailsPage {
|
||||||
let url = 'https://' + (this.getShortNetworkName() == 'test' ? 'test-' : '') + this.blockexplorerUrl + '/tx/' + btx.txid;
|
let url = 'https://' + (this.getShortNetworkName() == 'test' ? 'test-' : '') + this.blockexplorerUrl + '/tx/' + btx.txid;
|
||||||
let optIn = true;
|
let optIn = true;
|
||||||
let title = null;
|
let title = null;
|
||||||
let message = 'View Transaction on Insight'; // Todo: gettextCatalog
|
let message = this.translate.instant('View Transaction on Insight');
|
||||||
let okText = 'Open Insight'; // Todo: gettextCatalog
|
let okText = this.translate.instant('Open Insight');
|
||||||
let cancelText = 'Go Back'; // Todo: gettextCatalog
|
let cancelText = this.translate.instant('Go Back');
|
||||||
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavParams, Events, ViewController } from 'ionic-angular';
|
import { NavParams, Events, ViewController } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { PlatformProvider } from '../../providers/platform/platform';
|
import { PlatformProvider } from '../../providers/platform/platform';
|
||||||
|
@ -52,7 +53,8 @@ export class TxpDetailsPage {
|
||||||
private viewCtrl: ViewController,
|
private viewCtrl: ViewController,
|
||||||
private configProvider: ConfigProvider,
|
private configProvider: ConfigProvider,
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private txFormatProvider: TxFormatProvider
|
private txFormatProvider: TxFormatProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
let config = this.configProvider.get().wallet;
|
let config = this.configProvider.get().wallet;
|
||||||
this.tx = this.navParams.data.tx;
|
this.tx = this.navParams.data.tx;
|
||||||
|
@ -118,18 +120,18 @@ export class TxpDetailsPage {
|
||||||
|
|
||||||
if (lastSigner) {
|
if (lastSigner) {
|
||||||
if (this.isCordova && !this.isWindowsPhoneApp) {
|
if (this.isCordova && !this.isWindowsPhoneApp) {
|
||||||
this.buttonText = 'Slide to send'; //TODO gettextcatalog
|
this.buttonText = this.translate.instant('Slide to send');
|
||||||
} else {
|
} else {
|
||||||
this.buttonText = 'Click to send';//TODO gettextcatalog
|
this.buttonText = this.translate.instant('Click to send');
|
||||||
}
|
}
|
||||||
this.successText = 'Payment Sent';//TODO gettextcatalog
|
this.successText = this.translate.instant('Payment Sent');
|
||||||
} else {
|
} else {
|
||||||
if (this.isCordova && !this.isWindowsPhoneApp) {
|
if (this.isCordova && !this.isWindowsPhoneApp) {
|
||||||
this.buttonText = 'Slide to accept';//TODO gettextcatalog
|
this.buttonText = this.translate.instant('Slide to accept');
|
||||||
} else {
|
} else {
|
||||||
this.buttonText = 'Click to accept';//TODO gettextcatalog
|
this.buttonText = this.translate.instant('Click to accept');
|
||||||
}
|
}
|
||||||
this.successText = 'Payment Accepted';//TODO gettextcatalog
|
this.successText = this.translate.instant('Payment Accepted');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,10 +141,10 @@ export class TxpDetailsPage {
|
||||||
if (!this.isShared) return;
|
if (!this.isShared) return;
|
||||||
|
|
||||||
var actionDescriptions = {
|
var actionDescriptions = {
|
||||||
created: 'Proposal Created', //TODO gettextcatalog
|
created: this.translate.instant('Proposal Created'),
|
||||||
accept: 'Accepted', //TODO gettextcatalog
|
accept: this.translate.instant('Accepted'),
|
||||||
reject: 'Rejected', //TODO gettextcatalog
|
reject: this.translate.instant('Rejected'),
|
||||||
broadcasted: 'Broadcasted', //TODO gettextcatalog
|
broadcasted: this.translate.instant('Broadcasted'),
|
||||||
};
|
};
|
||||||
|
|
||||||
this.actionList.push({
|
this.actionList.push({
|
||||||
|
@ -203,7 +205,7 @@ export class TxpDetailsPage {
|
||||||
|
|
||||||
private setError(err: any, prefix: string): void {
|
private setError(err: any, prefix: string): void {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
this.popupProvider.ionicAlert('Error', this.bwcError.msg(err, prefix)); //TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), this.bwcError.msg(err, prefix));
|
||||||
}
|
}
|
||||||
|
|
||||||
public sign(): void {
|
public sign(): void {
|
||||||
|
@ -212,27 +214,27 @@ export class TxpDetailsPage {
|
||||||
this.events.publish('UpdateTx');
|
this.events.publish('UpdateTx');
|
||||||
//this.success(); TODO
|
//this.success(); TODO
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.setError(err, 'Could not send payment'); //TODO gettextcatalog
|
this.setError(err, ('Could not send payment'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public reject(txp: any): void {
|
public reject(txp: any): void {
|
||||||
let title = 'Warning!'; //TODO gettextcatalog
|
let title = this.translate.instant('Warning!');
|
||||||
let msg = 'Are you sure you want to reject this transaction?'; //TODO gettextcatalog
|
let msg = this.translate.instant('Are you sure you want to reject this transaction?');
|
||||||
this.popupProvider.ionicConfirm(title, msg, null, null).then((res: boolean) => {
|
this.popupProvider.ionicConfirm(title, msg, null, null).then((res: boolean) => {
|
||||||
if (!res) return
|
if (!res) return
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.walletProvider.reject(this.wallet, this.tx).then((txpr) => {
|
this.walletProvider.reject(this.wallet, this.tx).then((txpr) => {
|
||||||
this.close();
|
this.close();
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
this.setError(err, 'Could not reject payment'); //TODO gettextcatalog
|
this.setError(err, this.translate.instant('Could not reject payment'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public remove(): void {
|
public remove(): void {
|
||||||
let title = 'Warning!'; //TODO gettextcatalog
|
let title = this.translate.instant('Warning!');
|
||||||
let msg = 'Are you sure you want to remove this transaction?'; //TODO gettextcatalog
|
let msg = this.translate.instant('Are you sure you want to remove this transaction?');
|
||||||
this.popupProvider.ionicConfirm(title, msg, null, null).then((res: boolean) => {
|
this.popupProvider.ionicConfirm(title, msg, null, null).then((res: boolean) => {
|
||||||
if (!res) return;
|
if (!res) return;
|
||||||
this.onGoingProcessProvider.set('removeTx', true);
|
this.onGoingProcessProvider.set('removeTx', true);
|
||||||
|
@ -242,7 +244,7 @@ export class TxpDetailsPage {
|
||||||
}).catch((err: any) => {
|
}).catch((err: any) => {
|
||||||
if (err && !(err.message && err.message.match(/Unexpected/))) {
|
if (err && !(err.message && err.message.match(/Unexpected/))) {
|
||||||
this.events.publish('UpdateTx');
|
this.events.publish('UpdateTx');
|
||||||
this.setError(err, 'Could not delete payment proposal'); //TODO gettextcatalog
|
this.setError(err, this.translate.instant('Could not delete payment proposal'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { NavController, NavParams, Events } from 'ionic-angular';
|
import { NavController, NavParams, Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { WalletProvider } from '../../providers/wallet/wallet';
|
import { WalletProvider } from '../../providers/wallet/wallet';
|
||||||
|
@ -49,7 +50,8 @@ export class WalletDetailsPage {
|
||||||
private bwcError: BwcErrorProvider,
|
private bwcError: BwcErrorProvider,
|
||||||
private events: Events,
|
private events: Events,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private timeProvider: TimeProvider
|
private timeProvider: TimeProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
let clearCache = this.navParams.data.clearCache;
|
let clearCache = this.navParams.data.clearCache;
|
||||||
this.wallet = this.profileProvider.getWallet(this.navParams.data.walletId);
|
this.wallet = this.profileProvider.getWallet(this.navParams.data.walletId);
|
||||||
|
@ -133,7 +135,7 @@ export class WalletDetailsPage {
|
||||||
this.updateTxHistoryError = false;
|
this.updateTxHistoryError = false;
|
||||||
this.updatingTxHistoryProgress = 0;
|
this.updatingTxHistoryProgress = 0;
|
||||||
|
|
||||||
let progressFn = (function(txs, newTxs) {
|
let progressFn = (function (txs, newTxs) {
|
||||||
if (newTxs > 5) this.thistory = null;
|
if (newTxs > 5) this.thistory = null;
|
||||||
this.updatingTxHistoryProgress = newTxs;
|
this.updatingTxHistoryProgress = newTxs;
|
||||||
}).bind(this);
|
}).bind(this);
|
||||||
|
@ -192,7 +194,7 @@ export class WalletDetailsPage {
|
||||||
if (err === 'WALLET_NOT_REGISTERED') {
|
if (err === 'WALLET_NOT_REGISTERED') {
|
||||||
this.walletNotRegistered = true;
|
this.walletNotRegistered = true;
|
||||||
} else {
|
} else {
|
||||||
this.updateStatusError = this.bwcError.msg(err, 'Could not update wallet'); // TODO: translate
|
this.updateStatusError = this.bwcError.msg(err, this.translate.instant('Could not update wallet'));
|
||||||
}
|
}
|
||||||
this.wallet.status = null;
|
this.wallet.status = null;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class BwcErrorProvider {
|
export class BwcErrorProvider {
|
||||||
|
|
||||||
constructor() {}
|
constructor(
|
||||||
|
private translate: TranslateService
|
||||||
|
) { }
|
||||||
|
|
||||||
public msg(err: any, prefix?: string): string {
|
public msg(err: any, prefix?: string): string {
|
||||||
if (!err)
|
if (!err)
|
||||||
|
@ -22,128 +25,127 @@ export class BwcErrorProvider {
|
||||||
let body = '';
|
let body = '';
|
||||||
prefix = prefix || '';
|
prefix = prefix || '';
|
||||||
|
|
||||||
// TODO: GetTextCatalog for errors
|
|
||||||
if (name) {
|
if (name) {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case 'INVALID_BACKUP':
|
case 'INVALID_BACKUP':
|
||||||
body = 'Wallet Recovery Phrase is invalid';
|
body = this.translate.instant('Wallet Recovery Phrase is invalid');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_DOES_NOT_EXIST':
|
case 'WALLET_DOES_NOT_EXIST':
|
||||||
body = 'Wallet not registered at the wallet service. Recreate it from "Create Wallet" using "Advanced Options" to set your recovery phrase';
|
body = this.translate.instant('Wallet not registered at the wallet service. Recreate it from "Create Wallet" using "Advanced Options" to set your recovery phrase');
|
||||||
break;
|
break;
|
||||||
case 'MISSING_PRIVATE_KEY':
|
case 'MISSING_PRIVATE_KEY':
|
||||||
body = 'Missing private keys to sign';
|
body = this.translate.instant('Missing private keys to sign');
|
||||||
break;
|
break;
|
||||||
case 'ENCRYPTED_PRIVATE_KEY':
|
case 'ENCRYPTED_PRIVATE_KEY':
|
||||||
body = 'Private key is encrypted, cannot sign';
|
body = this.translate.instant('Private key is encrypted, cannot sign');
|
||||||
break;
|
break;
|
||||||
case 'SERVER_COMPROMISED':
|
case 'SERVER_COMPROMISED':
|
||||||
body = 'Server response could not be verified';
|
body = this.translate.instant('Server response could not be verified');
|
||||||
break;
|
break;
|
||||||
case 'COULD_NOT_BUILD_TRANSACTION':
|
case 'COULD_NOT_BUILD_TRANSACTION':
|
||||||
body = 'Could not build transaction';
|
body = this.translate.instant('Could not build transaction');
|
||||||
break;
|
break;
|
||||||
case 'INSUFFICIENT_FUNDS':
|
case 'INSUFFICIENT_FUNDS':
|
||||||
body = 'Insufficient funds';
|
body = this.translate.instant('Insufficient funds');
|
||||||
break;
|
break;
|
||||||
case 'CONNECTION_ERROR':
|
case 'CONNECTION_ERROR':
|
||||||
body = 'Network error';
|
body = this.translate.instant('Network error');
|
||||||
break;
|
break;
|
||||||
case 'NOT_FOUND':
|
case 'NOT_FOUND':
|
||||||
body = 'Wallet service not found';
|
body = this.translate.instant('Wallet service not found');
|
||||||
break;
|
break;
|
||||||
case 'ECONNRESET_ERROR':
|
case 'ECONNRESET_ERROR':
|
||||||
body = 'Connection reset by peer';
|
body = this.translate.instant('Connection reset by peer');
|
||||||
break;
|
break;
|
||||||
case 'BAD_RESPONSE_CODE':
|
case 'BAD_RESPONSE_CODE':
|
||||||
body = 'The request could not be understood by the server';
|
body = this.translate.instant('The request could not be understood by the server');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_ALREADY_EXISTS':
|
case 'WALLET_ALREADY_EXISTS':
|
||||||
body = 'Wallet already exists';
|
body = this.translate.instant('Wallet already exists');
|
||||||
break;
|
break;
|
||||||
case 'COPAYER_IN_WALLET':
|
case 'COPAYER_IN_WALLET':
|
||||||
body = 'Copayer already in this wallet';
|
body = this.translate.instant('Copayer already in this wallet');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_FULL':
|
case 'WALLET_FULL':
|
||||||
body = 'Wallet is full';
|
body = this.translate.instant('Wallet is full');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_NOT_FOUND':
|
case 'WALLET_NOT_FOUND':
|
||||||
body = 'Wallet not found';
|
body = this.translate.instant('Wallet not found');
|
||||||
break;
|
break;
|
||||||
case 'INSUFFICIENT_FUNDS_FOR_FEE':
|
case 'INSUFFICIENT_FUNDS_FOR_FEE':
|
||||||
body = 'Insufficient funds for fee';
|
body = this.translate.instant('Insufficient funds for fee');
|
||||||
break;
|
break;
|
||||||
case 'LOCKED_FUNDS':
|
case 'LOCKED_FUNDS':
|
||||||
body = 'Funds are locked by pending spend proposals';
|
body = this.translate.instant('Funds are locked by pending spend proposals');
|
||||||
break;
|
break;
|
||||||
case 'COPAYER_VOTED':
|
case 'COPAYER_VOTED':
|
||||||
body = 'Copayer already voted on this spend proposal';
|
body = this.translate.instant('Copayer already voted on this spend proposal');
|
||||||
break;
|
break;
|
||||||
case 'NOT_AUTHORIZED':
|
case 'NOT_AUTHORIZED':
|
||||||
body = 'Not authorized';
|
body = this.translate.instant('Not authorized');
|
||||||
break;
|
break;
|
||||||
case 'TX_ALREADY_BROADCASTED':
|
case 'TX_ALREADY_BROADCASTED':
|
||||||
body = 'Transaction already broadcasted';
|
body = this.translate.instant('Transaction already broadcasted');
|
||||||
break;
|
break;
|
||||||
case 'TX_CANNOT_CREATE':
|
case 'TX_CANNOT_CREATE':
|
||||||
body = 'Locktime in effect. Please wait to create a new spend proposal';
|
body = this.translate.instant('Locktime in effect. Please wait to create a new spend proposal');
|
||||||
break;
|
break;
|
||||||
case 'TX_CANNOT_REMOVE':
|
case 'TX_CANNOT_REMOVE':
|
||||||
body = 'Locktime in effect. Please wait to remove this spend proposal';
|
body = this.translate.instant('Locktime in effect. Please wait to remove this spend proposal');
|
||||||
break;
|
break;
|
||||||
case 'TX_NOT_ACCEPTED':
|
case 'TX_NOT_ACCEPTED':
|
||||||
body = 'Spend proposal is not accepted';
|
body = this.translate.instant('Spend proposal is not accepted');
|
||||||
break;
|
break;
|
||||||
case 'TX_NOT_FOUND':
|
case 'TX_NOT_FOUND':
|
||||||
body = 'Spend proposal not found';
|
body = this.translate.instant('Spend proposal not found');
|
||||||
break;
|
break;
|
||||||
case 'TX_NOT_PENDING':
|
case 'TX_NOT_PENDING':
|
||||||
body = 'The spend proposal is not pending';
|
body = this.translate.instant('The spend proposal is not pending');
|
||||||
break;
|
break;
|
||||||
case 'UPGRADE_NEEDED':
|
case 'UPGRADE_NEEDED':
|
||||||
body = 'Please upgrade Copay to perform this action';
|
body = this.translate.instant('Please upgrade Copay to perform this action');
|
||||||
break;
|
break;
|
||||||
case 'BAD_SIGNATURES':
|
case 'BAD_SIGNATURES':
|
||||||
body = 'Signatures rejected by server';
|
body = this.translate.instant('Signatures rejected by server');
|
||||||
break;
|
break;
|
||||||
case 'COPAYER_DATA_MISMATCH':
|
case 'COPAYER_DATA_MISMATCH':
|
||||||
body = 'Copayer data mismatch';
|
body = this.translate.instant('Copayer data mismatch');
|
||||||
break;
|
break;
|
||||||
case 'DUST_AMOUNT':
|
case 'DUST_AMOUNT':
|
||||||
body = 'Amount below minimum allowed';
|
body = this.translate.instant('Amount below minimum allowed');
|
||||||
break;
|
break;
|
||||||
case 'INCORRECT_ADDRESS_NETWORK':
|
case 'INCORRECT_ADDRESS_NETWORK':
|
||||||
body = 'Incorrect network address';
|
body = this.translate.instant('Incorrect network address');
|
||||||
break;
|
break;
|
||||||
case 'COPAYER_REGISTERED':
|
case 'COPAYER_REGISTERED':
|
||||||
body = 'Key already associated with an existing wallet';
|
body = this.translate.instant('Key already associated with an existing wallet');
|
||||||
break;
|
break;
|
||||||
case 'INVALID_ADDRESS':
|
case 'INVALID_ADDRESS':
|
||||||
body = 'Invalid address';
|
body = this.translate.instant('Invalid address');
|
||||||
break;
|
break;
|
||||||
case 'MAIN_ADDRESS_GAP_REACHED':
|
case 'MAIN_ADDRESS_GAP_REACHED':
|
||||||
body = 'Empty addresses limit reached. New addresses cannot be generated.';
|
body = this.translate.instant('Empty addresses limit reached. New addresses cannot be generated.');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_LOCKED':
|
case 'WALLET_LOCKED':
|
||||||
body = 'Wallet is locked';
|
body = this.translate.instant('Wallet is locked');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_NOT_COMPLETE':
|
case 'WALLET_NOT_COMPLETE':
|
||||||
body = 'Wallet is not complete';
|
body = this.translate.instant('Wallet is not complete');
|
||||||
break;
|
break;
|
||||||
case 'WALLET_NEEDS_BACKUP':
|
case 'WALLET_NEEDS_BACKUP':
|
||||||
body = 'Wallet needs backup';
|
body = this.translate.instant('Wallet needs backup');
|
||||||
break;
|
break;
|
||||||
case 'MISSING_PARAMETER':
|
case 'MISSING_PARAMETER':
|
||||||
body = 'Missing parameter';
|
body = this.translate.instant('Missing parameter');
|
||||||
break;
|
break;
|
||||||
case 'NO_PASSWORD_GIVEN':
|
case 'NO_PASSWORD_GIVEN':
|
||||||
body = 'Spending Password needed';
|
body = this.translate.instant('Spending Password needed');
|
||||||
break;
|
break;
|
||||||
case 'PASSWORD_INCORRECT':
|
case 'PASSWORD_INCORRECT':
|
||||||
body = 'Wrong spending password';
|
body = this.translate.instant('Wrong spending password');
|
||||||
break;
|
break;
|
||||||
case 'EXCEEDED_DAILY_LIMIT':
|
case 'EXCEEDED_DAILY_LIMIT':
|
||||||
body = 'Exceeded daily limit of $500 per user';
|
body = this.translate.instant('Exceeded daily limit of $500 per user');
|
||||||
break;
|
break;
|
||||||
case 'ERROR':
|
case 'ERROR':
|
||||||
body = (err.message || err.error);
|
body = (err.message || err.error);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { ConfigProvider } from '../../providers/config/config';
|
import { ConfigProvider } from '../../providers/config/config';
|
||||||
|
@ -13,12 +14,12 @@ export class FeeProvider {
|
||||||
private CACHE_TIME_TS: number = 60;
|
private CACHE_TIME_TS: number = 60;
|
||||||
// Constant fee options to translate
|
// Constant fee options to translate
|
||||||
public feeOpts: any = {
|
public feeOpts: any = {
|
||||||
urgent: 'Urgent', //TODO gettextcatalog
|
urgent: this.translate.instant('Urgent'),
|
||||||
priority: 'Priority',//TODO gettextcatalog
|
priority: this.translate.instant('Priority'),
|
||||||
normal: 'Normal',//TODO gettextcatalog
|
normal: this.translate.instant('Normal'),
|
||||||
economy: 'Economy',//TODO gettextcatalog
|
economy: this.translate.instant('Economy'),
|
||||||
superEconomy: 'Super Economy',//TODO gettextcatalog
|
superEconomy: this.translate.instant('Super Economy'),
|
||||||
custom: 'Custom'//TODO gettextcatalog
|
custom: this.translate.instant('Custom')
|
||||||
};
|
};
|
||||||
private cache: any = {
|
private cache: any = {
|
||||||
updateTs: 0,
|
updateTs: 0,
|
||||||
|
@ -28,7 +29,8 @@ export class FeeProvider {
|
||||||
constructor(
|
constructor(
|
||||||
private configProvider: ConfigProvider,
|
private configProvider: ConfigProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private bwcProvider: BwcProvider
|
private bwcProvider: BwcProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.logger.info('FeeProvider initialized.');
|
this.logger.info('FeeProvider initialized.');
|
||||||
}
|
}
|
||||||
|
@ -54,7 +56,7 @@ export class FeeProvider {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!feeLevelRate || !feeLevelRate.feePerKb) {
|
if (!feeLevelRate || !feeLevelRate.feePerKb) {
|
||||||
let msg = "Could not get dynamic fee for level: " + feeLevel; //TODO gettextcatalog
|
let msg = this.translate.instant('Could not get dynamic fee for level:') + ' ' + feeLevel;
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,11 +91,11 @@ export class FeeProvider {
|
||||||
|
|
||||||
walletClient.getFeeLevels(coin, 'livenet', (errLivenet, levelsLivenet) => {
|
walletClient.getFeeLevels(coin, 'livenet', (errLivenet, levelsLivenet) => {
|
||||||
if (errLivenet) {
|
if (errLivenet) {
|
||||||
return reject('Could not get dynamic fee'); //TODO gettextcatalog
|
return reject(this.translate.instant('Could not get dynamic fee'));
|
||||||
}
|
}
|
||||||
walletClient.getFeeLevels('btc', 'testnet', (errTestnet, levelsTestnet) => {
|
walletClient.getFeeLevels('btc', 'testnet', (errTestnet, levelsTestnet) => {
|
||||||
if (errTestnet) {
|
if (errTestnet) {
|
||||||
return reject('Could not get dynamic fee'); //TODO gettextcatalog
|
return reject(this.translate.instant('Could not get dynamic fee'));
|
||||||
}
|
}
|
||||||
this.cache.updateTs = Date.now();
|
this.cache.updateTs = Date.now();
|
||||||
this.cache.coin = coin;
|
this.cache.coin = coin;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Events, NavController, App } from 'ionic-angular';
|
import { Events, NavController, App } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { BwcProvider } from '../bwc/bwc';
|
import { BwcProvider } from '../bwc/bwc';
|
||||||
|
@ -31,7 +32,8 @@ export class IncomingDataProvider {
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private appProvider: AppProvider,
|
private appProvider: AppProvider,
|
||||||
private addressProvider: AddressProvider
|
private addressProvider: AddressProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.logger.info('IncomingDataProvider initialized.');
|
this.logger.info('IncomingDataProvider initialized.');
|
||||||
}
|
}
|
||||||
|
@ -71,7 +73,7 @@ export class IncomingDataProvider {
|
||||||
this.handlePayPro(details, coin);
|
this.handlePayPro(details, coin);
|
||||||
}).catch((err: string) => {
|
}).catch((err: string) => {
|
||||||
if (addr && amount) this.goSend(addr, amount, message, coin);
|
if (addr && amount) this.goSend(addr, amount, message, coin);
|
||||||
else this.popupProvider.ionicAlert('Error', err); //TODO gettextcatalog
|
else this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.goSend(addr, amount, message, coin);
|
this.goSend(addr, amount, message, coin);
|
||||||
|
@ -100,7 +102,7 @@ export class IncomingDataProvider {
|
||||||
if (addr && amount)
|
if (addr && amount)
|
||||||
this.goSend(addr, amount, message, coin);
|
this.goSend(addr, amount, message, coin);
|
||||||
else
|
else
|
||||||
this.popupProvider.ionicAlert('Error', err);//TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.goSend(addr, amount, message, coin);
|
this.goSend(addr, amount, message, coin);
|
||||||
|
@ -123,7 +125,9 @@ export class IncomingDataProvider {
|
||||||
|
|
||||||
// Translate address
|
// Translate address
|
||||||
this.logger.debug('address transalated to:' + addr);
|
this.logger.debug('address transalated to:' + addr);
|
||||||
this.popupProvider.ionicConfirm('Bitcoin cash Payment', 'Payment address was translated to new Bitcoin Cash address format: ' + addr, 'OK', 'Cancel').then((res: boolean) => {
|
let title = this.translate.instant('Bitcoin cash Payment');
|
||||||
|
let msg = this.translate.instant('Payment address was translated to new Bitcoin Cash address format: {{addr}}', { addr: addr });
|
||||||
|
this.popupProvider.ionicConfirm(title, msg).then((res: boolean) => {
|
||||||
if (!res) return false;
|
if (!res) return false;
|
||||||
|
|
||||||
message = parsed.message;
|
message = parsed.message;
|
||||||
|
@ -137,7 +141,7 @@ export class IncomingDataProvider {
|
||||||
if (addr && amount)
|
if (addr && amount)
|
||||||
this.goSend(addr, amount, message, coin);
|
this.goSend(addr, amount, message, coin);
|
||||||
else
|
else
|
||||||
this.popupProvider.ionicAlert('Error', err);//TODO gettextcatalog
|
this.popupProvider.ionicAlert(this.translate.instant('Error'), err);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.goSend(addr, amount, message, coin);
|
this.goSend(addr, amount, message, coin);
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
|
||||||
import { LoadingController } from 'ionic-angular';
|
import { LoadingController } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class OnGoingProcessProvider {
|
export class OnGoingProcessProvider {
|
||||||
|
@ -14,49 +15,49 @@ export class OnGoingProcessProvider {
|
||||||
constructor(
|
constructor(
|
||||||
private loadingCtrl: LoadingController,
|
private loadingCtrl: LoadingController,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.logger.info('OnGoingProcessProvider initialized.');
|
this.logger.info('OnGoingProcessProvider initialized.');
|
||||||
// TODO gettextcatalog()
|
|
||||||
// TODO GET - CLEAR - CHECK DecimalPipe for FILTER WITH TRANSLATE
|
// TODO GET - CLEAR - CHECK DecimalPipe for FILTER WITH TRANSLATE
|
||||||
this.processNames = {
|
this.processNames = {
|
||||||
'broadcastingTx': 'Broadcasting transaction...',
|
'broadcastingTx': this.translate.instant('Broadcasting transaction...'),
|
||||||
'calculatingFee': 'Calculating fee...',
|
'calculatingFee': this.translate.instant('Calculating fee...'),
|
||||||
'connectingCoinbase': 'Connecting to Coinbase...',
|
'connectingCoinbase': this.translate.instant('Connecting to Coinbase...'),
|
||||||
'connectingGlidera': 'Connecting to Glidera...',
|
'connectingGlidera': this.translate.instant('Connecting to Glidera...'),
|
||||||
'connectingShapeshift': 'Connecting to Shapeshift...',
|
'connectingShapeshift': this.translate.instant('Connecting to Shapeshift...'),
|
||||||
'creatingTx': 'Creating transaction...',
|
'creatingTx': this.translate.instant('Creating transaction...'),
|
||||||
'creatingWallet': 'Creating Wallet...',
|
'creatingWallet': this.translate.instant('Creating Wallet...'),
|
||||||
'deletingWallet': 'Deleting Wallet...',
|
'deletingWallet': this.translate.instant('Deleting Wallet...'),
|
||||||
'extractingWalletInfo': 'Extracting Wallet information...',
|
'extractingWalletInfo': this.translate.instant('Extracting Wallet information...'),
|
||||||
'fetchingPayPro': 'Fetching payment information',
|
'fetchingPayPro': this.translate.instant('Fetching payment information'),
|
||||||
'generatingCSV': 'Generating .csv file...',
|
'generatingCSV': this.translate.instant('Generating .csv file...'),
|
||||||
'gettingFeeLevels': 'Getting fee levels...',
|
'gettingFeeLevels': this.translate.instant('Getting fee levels...'),
|
||||||
'importingWallet': 'Importing Wallet...',
|
'importingWallet': this.translate.instant('Importing Wallet...'),
|
||||||
'joiningWallet': 'Joining Wallet...',
|
'joiningWallet': this.translate.instant('Joining Wallet...'),
|
||||||
'recreating': 'Recreating Wallet...',
|
'recreating': this.translate.instant('Recreating Wallet...'),
|
||||||
'rejectTx': 'Rejecting payment proposal...',
|
'rejectTx': this.translate.instant('Rejecting payment proposal...'),
|
||||||
'removeTx': 'Deleting payment proposal...',
|
'removeTx': this.translate.instant('Deleting payment proposal...'),
|
||||||
'retrievingInputs': 'Retrieving inputs information',
|
'retrievingInputs': this.translate.instant('Retrieving inputs information'),
|
||||||
'scanning': 'Scanning Wallet funds...',
|
'scanning': this.translate.instant('Scanning Wallet funds...'),
|
||||||
'sendingTx': 'Sending transaction...',
|
'sendingTx': this.translate.instant('Sending transaction...'),
|
||||||
'signingTx': 'Signing transaction...',
|
'signingTx': this.translate.instant('Signing transaction...'),
|
||||||
'sweepingWallet': 'Sweeping Wallet...',
|
'sweepingWallet': this.translate.instant('Sweeping Wallet...'),
|
||||||
'validatingWords': 'Validating recovery phrase...',
|
'validatingWords': this.translate.instant('Validating recovery phrase...'),
|
||||||
'loadingTxInfo': 'Loading transaction info...',
|
'loadingTxInfo': this.translate.instant('Loading transaction info...'),
|
||||||
'sendingFeedback': 'Sending feedback...',
|
'sendingFeedback': this.translate.instant('Sending feedback...'),
|
||||||
'generatingNewAddress': 'Generating new address...',
|
'generatingNewAddress': this.translate.instant('Generating new address...'),
|
||||||
'sendingByEmail': 'Preparing addresses...',
|
'sendingByEmail': this.translate.instant('Preparing addresses...'),
|
||||||
'sending2faCode': 'Sending 2FA code...',
|
'sending2faCode': this.translate.instant('Sending 2FA code...'),
|
||||||
'buyingBitcoin': 'Buying Bitcoin...',
|
'buyingBitcoin': this.translate.instant('Buying Bitcoin...'),
|
||||||
'sellingBitcoin': 'Selling Bitcoin...',
|
'sellingBitcoin': this.translate.instant('Selling Bitcoin...'),
|
||||||
'fetchingBitPayAccount': 'Fetching BitPay Account...',
|
'fetchingBitPayAccount': this.translate.instant('Fetching BitPay Account...'),
|
||||||
'updatingGiftCards': 'Updating Gift Cards...',
|
'updatingGiftCards': this.translate.instant('Updating Gift Cards...'),
|
||||||
'updatingGiftCard': 'Updating Gift Card...',
|
'updatingGiftCard': this.translate.instant('Updating Gift Card...'),
|
||||||
'cancelingGiftCard': 'Canceling Gift Card...',
|
'cancelingGiftCard': this.translate.instant('Canceling Gift Card...'),
|
||||||
'creatingGiftCard': 'Creating Gift Card...',
|
'creatingGiftCard': this.translate.instant('Creating Gift Card...'),
|
||||||
'buyingGiftCard': 'Buying Gift Card...',
|
'buyingGiftCard': this.translate.instant('Buying Gift Card...'),
|
||||||
'topup': 'Top up in progress...',
|
'topup': this.translate.instant('Top up in progress...'),
|
||||||
'duplicatingWallet': 'Duplicating wallet...',
|
'duplicatingWallet': this.translate.instant('Duplicating wallet...'),
|
||||||
};
|
};
|
||||||
this.ongoingProcess = {};
|
this.ongoingProcess = {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
import { ProfileProvider } from '../profile/profile';
|
import { ProfileProvider } from '../profile/profile';
|
||||||
|
@ -10,7 +11,8 @@ export class PayproProvider {
|
||||||
constructor(
|
constructor(
|
||||||
private profileProvider: ProfileProvider,
|
private profileProvider: ProfileProvider,
|
||||||
private logger: Logger,
|
private logger: Logger,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.logger.info('PayproProvider initialized');
|
this.logger.info('PayproProvider initialized');
|
||||||
}
|
}
|
||||||
|
@ -35,7 +37,7 @@ export class PayproProvider {
|
||||||
if (err) return reject(err);
|
if (err) return reject(err);
|
||||||
else if (!paypro.verified) {
|
else if (!paypro.verified) {
|
||||||
this.logger.warn('Failed to verify payment protocol signatures');
|
this.logger.warn('Failed to verify payment protocol signatures');
|
||||||
return reject('Payment Protocol Invalid'); //TODO gettextcatalog
|
return reject(this.translate.instant('Payment Protocol Invalid'));
|
||||||
}
|
}
|
||||||
return resolve(paypro);
|
return resolve(paypro);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { AlertController } from 'ionic-angular';
|
import { AlertController } from 'ionic-angular';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PopupProvider {
|
export class PopupProvider {
|
||||||
constructor(
|
constructor(
|
||||||
private alertCtrl: AlertController,
|
private alertCtrl: AlertController,
|
||||||
private logger: Logger
|
private logger: Logger,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +20,7 @@ export class PopupProvider {
|
||||||
enableBackdropDismiss: false,
|
enableBackdropDismiss: false,
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: okText ? okText : 'OK',
|
text: okText ? okText : this.translate.instant('Ok'),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
this.logger.info('Ok clicked');
|
this.logger.info('Ok clicked');
|
||||||
resolve();
|
resolve();
|
||||||
|
@ -38,14 +39,14 @@ export class PopupProvider {
|
||||||
message: message,
|
message: message,
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: cancelText ? cancelText : 'Cancel',
|
text: cancelText ? cancelText : this.translate.instant('Cancel'),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
this.logger.info('Disagree clicked');
|
this.logger.info('Disagree clicked');
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: okText ? okText : 'OK',
|
text: okText ? okText : this.translate.instant('Ok'),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
this.logger.info('Agree clicked');
|
this.logger.info('Agree clicked');
|
||||||
resolve(true);
|
resolve(true);
|
||||||
|
@ -75,14 +76,14 @@ export class PopupProvider {
|
||||||
],
|
],
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: cancelText ? cancelText : 'Cancel',
|
text: cancelText ? cancelText : this.translate.instant('Cancel'),
|
||||||
handler: data => {
|
handler: data => {
|
||||||
this.logger.info('Cancel clicked');
|
this.logger.info('Cancel clicked');
|
||||||
resolve(null);
|
resolve(null);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: okText ? okText : 'OK',
|
text: okText ? okText : this.translate.instant('Ok'),
|
||||||
handler: data => {
|
handler: data => {
|
||||||
this.logger.info('Saved clicked');
|
this.logger.info('Saved clicked');
|
||||||
resolve(data[0]);
|
resolve(data[0]);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Events } from 'ionic-angular';
|
import { Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
//providers
|
//providers
|
||||||
|
@ -38,7 +39,8 @@ export class ProfileProvider {
|
||||||
private languageProvider: LanguageProvider,
|
private languageProvider: LanguageProvider,
|
||||||
private events: Events,
|
private events: Events,
|
||||||
private popupProvider: PopupProvider,
|
private popupProvider: PopupProvider,
|
||||||
private onGoingProcessProvider: OnGoingProcessProvider
|
private onGoingProcessProvider: OnGoingProcessProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.throttledBwsEvent = _.throttle((n, wallet) => {
|
this.throttledBwsEvent = _.throttle((n, wallet) => {
|
||||||
this.newBwsEvent(n, wallet);
|
this.newBwsEvent(n, wallet);
|
||||||
|
@ -311,7 +313,7 @@ export class ProfileProvider {
|
||||||
password: opts.password
|
password: opts.password
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return reject('Could not import. Check input file and spending password'); // TODO getTextCatalog
|
return reject(this.translate.instant('Could not import. Check input file and spending password'));
|
||||||
}
|
}
|
||||||
|
|
||||||
let strParsed: any = JSON.parse(str);
|
let strParsed: any = JSON.parse(str);
|
||||||
|
@ -351,10 +353,10 @@ export class ProfileProvider {
|
||||||
|
|
||||||
private showWarningNoEncrypt(): Promise<any> {
|
private showWarningNoEncrypt(): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let title = 'Are you sure?'; //TODO gettextcatalog
|
let title = this.translate.instant('Are you sure?');
|
||||||
let msg = 'Your wallet keys will be stored in plan text in this device, if an other app access the store it will be able to access your Bitcoin'; //TODO gettextcatalog
|
let msg = this.translate.instant('Your wallet keys will be stored in plan text in this device, if an other app access the store it will be able to access your Bitcoin');
|
||||||
let okText = 'Yes'; //TODO gettextcatalog
|
let okText = this.translate.instant('Yes');
|
||||||
let cancelText = 'No'; //TODO gettextcatalog
|
let cancelText = this.translate.instant('No');
|
||||||
this.popupProvider.ionicConfirm(title, msg, okText, cancelText).then((res: any) => {
|
this.popupProvider.ionicConfirm(title, msg, okText, cancelText).then((res: any) => {
|
||||||
return resolve(res);
|
return resolve(res);
|
||||||
});
|
});
|
||||||
|
@ -363,19 +365,19 @@ export class ProfileProvider {
|
||||||
|
|
||||||
private encrypt(wallet: any): Promise<any> {
|
private encrypt(wallet: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let title = 'Please enter a password to encrypt your wallet keys on this device storage'; //TODO gettextcatalog
|
let title = this.translate.instant('Please enter a password to encrypt your wallet keys on this device storage');
|
||||||
let warnMsg = 'Your wallet key will be encrypted. The Spending Password cannot be recovered. Be sure to write it down.'; //TODO gettextcatalog
|
let warnMsg = this.translate.instant('Your wallet key will be encrypted. The Spending Password cannot be recovered. Be sure to write it down.');
|
||||||
this.askPassword(warnMsg, title).then((password: string) => {
|
this.askPassword(warnMsg, title).then((password: string) => {
|
||||||
if (!password) {
|
if (!password) {
|
||||||
this.showWarningNoEncrypt().then((res: any) => {
|
this.showWarningNoEncrypt().then((res: any) => {
|
||||||
if (res) return resolve(); //TODO gettextcatalog
|
if (res) return resolve();
|
||||||
this.encrypt(wallet).then(() => {
|
this.encrypt(wallet).then(() => {
|
||||||
return resolve();
|
return resolve();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
title = 'Confirm your new spending password'; //TODO gettextcatalog
|
title = this.translate.instant('Confirm your new spending password');
|
||||||
this.askPassword(warnMsg, title).then((password2: string) => {
|
this.askPassword(warnMsg, title).then((password2: string) => {
|
||||||
if (!password2 || password != password2) {
|
if (!password2 || password != password2) {
|
||||||
this.encrypt(wallet).then(() => {
|
this.encrypt(wallet).then(() => {
|
||||||
|
@ -395,7 +397,7 @@ export class ProfileProvider {
|
||||||
private addAndBindWalletClient(wallet: any, opts: any): Promise<any> {
|
private addAndBindWalletClient(wallet: any, opts: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!wallet || !wallet.credentials) {
|
if (!wallet || !wallet.credentials) {
|
||||||
return reject('Could not access wallet'); // TODO gettextCatalog
|
return reject(this.translate.instant('Could not access wallet'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encrypt wallet
|
// Encrypt wallet
|
||||||
|
@ -406,7 +408,8 @@ export class ProfileProvider {
|
||||||
let walletId: string = wallet.credentials.walletId
|
let walletId: string = wallet.credentials.walletId
|
||||||
|
|
||||||
if (!this.profile.addWallet(JSON.parse(wallet.export()))) {
|
if (!this.profile.addWallet(JSON.parse(wallet.export()))) {
|
||||||
return reject("Wallet already in " + this.appProvider.info.nameCase); // TODO gettextCatalog
|
let message = "Wallet already in " + this.appProvider.info.nameCase; // TODO: translate
|
||||||
|
return reject(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
let skipKeyValidation: boolean = this.shouldSkipValidation(walletId);
|
let skipKeyValidation: boolean = this.shouldSkipValidation(walletId);
|
||||||
|
@ -476,7 +479,7 @@ export class ProfileProvider {
|
||||||
walletClient.importFromExtendedPrivateKey(xPrivKey, opts, (err: any) => {
|
walletClient.importFromExtendedPrivateKey(xPrivKey, opts, (err: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err instanceof this.errors.NOT_AUTHORIZED) return reject(err);
|
if (err instanceof this.errors.NOT_AUTHORIZED) return reject(err);
|
||||||
this.bwcErrorProvider.cb(err, 'Could not import').then((msg: string) => { //TODO getTextCatalog
|
this.bwcErrorProvider.cb(err, this.translate.instant('Could not import')).then((msg: string) => {
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -521,7 +524,7 @@ export class ProfileProvider {
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.bwcErrorProvider.cb(err, 'Could not import').then((msg: string) => { //TODO getTextCatalog
|
this.bwcErrorProvider.cb(err, this.translate.instant('Could not import')).then((msg: string) => {
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -555,7 +558,7 @@ export class ProfileProvider {
|
||||||
if (err instanceof this.errors.NOT_AUTHORIZED)
|
if (err instanceof this.errors.NOT_AUTHORIZED)
|
||||||
err.name = 'WALLET_DOES_NOT_EXIST';
|
err.name = 'WALLET_DOES_NOT_EXIST';
|
||||||
|
|
||||||
this.bwcErrorProvider.cb(err, 'Could not import').then((msg: string) => { //TODO getTextCatalog
|
this.bwcErrorProvider.cb(err, this.translate.instant('Could not import')).then((msg: string) => {
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -708,7 +711,7 @@ export class ProfileProvider {
|
||||||
|
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
this.logger.info(ex);
|
this.logger.info(ex);
|
||||||
return reject('Could not create: Invalid wallet recovery phrase'); // TODO getTextCatalog
|
return reject(this.translate.instant('Could not create: Invalid wallet recovery phrase'));
|
||||||
}
|
}
|
||||||
} else if (opts.extendedPrivateKey) {
|
} else if (opts.extendedPrivateKey) {
|
||||||
try {
|
try {
|
||||||
|
@ -720,7 +723,7 @@ export class ProfileProvider {
|
||||||
});
|
});
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
this.logger.warn(ex);
|
this.logger.warn(ex);
|
||||||
return reject('Could not create using the specified extended private key'); // TODO GetTextCatalog
|
return reject(this.translate.instant('Could not create using the specified extended private key'));
|
||||||
}
|
}
|
||||||
} else if (opts.extendedPublicKey) {
|
} else if (opts.extendedPublicKey) {
|
||||||
try {
|
try {
|
||||||
|
@ -732,7 +735,7 @@ export class ProfileProvider {
|
||||||
walletClient.credentials.hwInfo = opts.hwInfo;
|
walletClient.credentials.hwInfo = opts.hwInfo;
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
this.logger.warn("Creating wallet from Extended Public Key Arg:", ex, opts);
|
this.logger.warn("Creating wallet from Extended Public Key Arg:", ex, opts);
|
||||||
return reject('Could not create using the specified extended public key'); // TODO GetTextCatalog
|
return reject(this.translate.instant('Could not create using the specified extended public key'));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let lang = this.languageProvider.getCurrent();
|
let lang = this.languageProvider.getCurrent();
|
||||||
|
@ -775,8 +778,8 @@ export class ProfileProvider {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.seedWallet(opts).then((walletClient: any) => {
|
this.seedWallet(opts).then((walletClient: any) => {
|
||||||
|
|
||||||
let name = opts.name || 'Personal Wallet'; // TODO GetTextCatalog
|
let name = opts.name || this.translate.instant('Personal Wallet');
|
||||||
let myName = opts.myName || 'me'; // TODO GetTextCatalog
|
let myName = opts.myName || this.translate.instant('me');
|
||||||
|
|
||||||
walletClient.createWallet(name, myName, opts.m, opts.n, {
|
walletClient.createWallet(name, myName, opts.m, opts.n, {
|
||||||
network: opts.networkName,
|
network: opts.networkName,
|
||||||
|
@ -785,7 +788,7 @@ export class ProfileProvider {
|
||||||
coin: opts.coin
|
coin: opts.coin
|
||||||
}, (err: any, secret: any) => {
|
}, (err: any, secret: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
this.bwcErrorProvider.cb(err, 'Error creating wallet').then((msg: string) => { //TODO getTextCatalog
|
this.bwcErrorProvider.cb(err, this.translate.instant('Error creating wallet')).then((msg: string) => {
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -826,11 +829,11 @@ export class ProfileProvider {
|
||||||
if (_.find(this.profile.credentials, {
|
if (_.find(this.profile.credentials, {
|
||||||
'walletId': walletData.walletId
|
'walletId': walletData.walletId
|
||||||
})) {
|
})) {
|
||||||
return reject('Cannot join the same wallet more that once'); // TODO getTextCatalog
|
return reject(this.translate.instant('Cannot join the same wallet more that once'));
|
||||||
}
|
}
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
this.logger.debug(ex);
|
this.logger.debug(ex);
|
||||||
return reject('Bad wallet invitation'); // TODO getTextCatalog
|
return reject(this.translate.instant('Bad wallet invitation'));
|
||||||
}
|
}
|
||||||
opts.networkName = walletData.network;
|
opts.networkName = walletData.network;
|
||||||
this.logger.debug('Joining Wallet:', opts);
|
this.logger.debug('Joining Wallet:', opts);
|
||||||
|
@ -840,7 +843,7 @@ export class ProfileProvider {
|
||||||
coin: opts.coin
|
coin: opts.coin
|
||||||
}, (err: any) => {
|
}, (err: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
this.bwcErrorProvider.cb(err, 'Could not join wallet').then((msg: string) => { //TODO getTextCatalog
|
this.bwcErrorProvider.cb(err, this.translate.instant('Could not join wallet')).then((msg: string) => {
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
|
||||||
import { Events } from 'ionic-angular';
|
import { Events } from 'ionic-angular';
|
||||||
import { Logger } from '../../providers/logger/logger';
|
import { Logger } from '../../providers/logger/logger';
|
||||||
import * as lodash from 'lodash';
|
import * as lodash from 'lodash';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
// Providers
|
// Providers
|
||||||
import { ConfigProvider } from '../config/config';
|
import { ConfigProvider } from '../config/config';
|
||||||
|
@ -51,7 +52,8 @@ export class WalletProvider {
|
||||||
private ongoingProcess: OnGoingProcessProvider,
|
private ongoingProcess: OnGoingProcessProvider,
|
||||||
private touchidProvider: TouchIdProvider,
|
private touchidProvider: TouchIdProvider,
|
||||||
private events: Events,
|
private events: Events,
|
||||||
private feeProvider: FeeProvider
|
private feeProvider: FeeProvider,
|
||||||
|
private translate: TranslateService
|
||||||
) {
|
) {
|
||||||
this.logger.info('WalletService initialized.');
|
this.logger.info('WalletService initialized.');
|
||||||
}
|
}
|
||||||
|
@ -368,7 +370,7 @@ export class WalletProvider {
|
||||||
|
|
||||||
wallet.createAddress({}, (err, addr) => {
|
wallet.createAddress({}, (err, addr) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
let prefix = 'Could not create address'; //TODO Gettextcatalog
|
let prefix = this.translate.instant('Could not create address');
|
||||||
if (err instanceof this.errors.CONNECTION_ERROR || (err.message && err.message.match(/5../))) {
|
if (err instanceof this.errors.CONNECTION_ERROR || (err.message && err.message.match(/5../))) {
|
||||||
this.logger.warn(err);
|
this.logger.warn(err);
|
||||||
return setTimeout(() => {
|
return setTimeout(() => {
|
||||||
|
@ -935,7 +937,7 @@ export class WalletProvider {
|
||||||
|
|
||||||
wallet.savePreferences(prefs, (err: any) => {
|
wallet.savePreferences(prefs, (err: any) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, 'Could not save preferences on the server')); //TODO Gettextcatalog
|
this.popupProvider.ionicAlert(this.bwcErrorProvider.msg(err, this.translate.instant('Could not save preferences on the server')));
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1091,13 +1093,13 @@ export class WalletProvider {
|
||||||
|
|
||||||
public encrypt(wallet: any): Promise<any> {
|
public encrypt(wallet: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
var title = 'Enter new spending password'; //TODO gettextcatalog
|
var title = this.translate.instant('Enter new spending password');
|
||||||
var warnMsg = 'Your wallet key will be encrypted. The Spending Password cannot be recovered. Be sure to write it down.'; //TODO gettextcatalog
|
var warnMsg = this.translate.instant('Your wallet key will be encrypted. The Spending Password cannot be recovered. Be sure to write it down.');
|
||||||
this.askPassword(warnMsg, title).then((password: string) => {
|
this.askPassword(warnMsg, title).then((password: string) => {
|
||||||
if (!password) return reject('no password'); //TODO gettextcatalog
|
if (!password) return reject(this.translate.instant('no password'));
|
||||||
title = 'Confirm your new spending password'; //TODO gettextcatalog
|
title = this.translate.instant('Confirm your new spending password');
|
||||||
this.askPassword(warnMsg, title).then((password2: string) => {
|
this.askPassword(warnMsg, title).then((password2: string) => {
|
||||||
if (!password2 || password != password2) return reject('password mismatch');
|
if (!password2 || password != password2) return reject(this.translate.instant('password mismatch'));
|
||||||
wallet.encryptPrivateKey(password);
|
wallet.encryptPrivateKey(password);
|
||||||
return resolve();
|
return resolve();
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
|
@ -1112,8 +1114,8 @@ export class WalletProvider {
|
||||||
public decrypt(wallet: any): Promise<any> {
|
public decrypt(wallet: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.logger.debug('Disabling private key encryption for' + wallet.name);
|
this.logger.debug('Disabling private key encryption for' + wallet.name);
|
||||||
this.askPassword(null, 'Enter Spending Password').then((password: string) => { //TODO gettextcatalog
|
this.askPassword(null, this.translate.instant('Enter Spending Password')).then((password: string) => {
|
||||||
if (!password) return reject('no password');
|
if (!password) return reject(this.translate.instant('no password'));
|
||||||
try {
|
try {
|
||||||
wallet.decryptPrivateKey(password);
|
wallet.decryptPrivateKey(password);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -1127,9 +1129,9 @@ export class WalletProvider {
|
||||||
public handleEncryptedWallet(wallet: any): Promise<any> {
|
public handleEncryptedWallet(wallet: any): Promise<any> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!this.isEncrypted(wallet)) return resolve();
|
if (!this.isEncrypted(wallet)) return resolve();
|
||||||
this.askPassword(wallet.name, 'Enter Spending Password').then((password: string) => { //TODO gettextcatalog
|
this.askPassword(wallet.name, this.translate.instant('Enter Spending Password')).then((password: string) => {
|
||||||
if (!password) return reject('No password');
|
if (!password) return reject(this.translate.instant('No password'));
|
||||||
if (!wallet.checkPassword(password)) return reject('Wrong password');
|
if (!wallet.checkPassword(password)) return reject(this.translate.instant('Wrong password'));
|
||||||
return resolve(password);
|
return resolve(password);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1199,7 +1201,7 @@ export class WalletProvider {
|
||||||
};
|
};
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
this.logger.warn('sign error:' + err);
|
this.logger.warn('sign error:' + err);
|
||||||
let msg = err && err.message ? err.message : 'The payment was created but could not be completed. Please try again from home screen'; //TODO gettextcatalog
|
let msg = err && err.message ? err.message : this.translate.instant('The payment was created but could not be completed. Please try again from home screen');
|
||||||
this.events.publish('Local/TxAction', wallet.id);
|
this.events.publish('Local/TxAction', wallet.id);
|
||||||
return reject(msg);
|
return reject(msg);
|
||||||
});
|
});
|
||||||
|
@ -1252,7 +1254,7 @@ export class WalletProvider {
|
||||||
|
|
||||||
// not supported yet
|
// not supported yet
|
||||||
if (wallet.credentials.derivationStrategy != 'BIP44' || !wallet.canSign())
|
if (wallet.credentials.derivationStrategy != 'BIP44' || !wallet.canSign())
|
||||||
return reject('Exporting via QR not supported for this wallet'); //TODO gettextcatalog
|
return reject(this.translate.instant('Exporting via QR not supported for this wallet'));
|
||||||
|
|
||||||
var keys = this.getKeysWithPassword(wallet, password);
|
var keys = this.getKeysWithPassword(wallet, password);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue