mirror of https://github.com/BTCPrivate/copay.git
Add config and language providers
This commit is contained in:
parent
fe2c7f2a19
commit
0876f50f67
|
@ -5,7 +5,6 @@ import { SplashScreen } from '@ionic-native/splash-screen';
|
||||||
|
|
||||||
import { Logger } from '@nsalaun/ng-logger';
|
import { Logger } from '@nsalaun/ng-logger';
|
||||||
import { AppProvider } from '../providers/app/app';
|
import { AppProvider } from '../providers/app/app';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
|
||||||
|
|
||||||
import { TabsPage } from '../pages/tabs/tabs';
|
import { TabsPage } from '../pages/tabs/tabs';
|
||||||
|
|
||||||
|
@ -20,8 +19,7 @@ export class CopayApp {
|
||||||
statusBar: StatusBar,
|
statusBar: StatusBar,
|
||||||
splashScreen: SplashScreen,
|
splashScreen: SplashScreen,
|
||||||
log: Logger,
|
log: Logger,
|
||||||
app: AppProvider,
|
app: AppProvider
|
||||||
translate: TranslateService
|
|
||||||
) {
|
) {
|
||||||
platform.ready().then(() => {
|
platform.ready().then(() => {
|
||||||
app.getName().subscribe((name) => {
|
app.getName().subscribe((name) => {
|
||||||
|
@ -40,8 +38,6 @@ export class CopayApp {
|
||||||
splashScreen.hide();
|
splashScreen.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
translate.setDefaultLang('en');
|
|
||||||
translate.use(platform.lang());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,8 @@ import { WalletProvider } from '../providers/wallet/wallet';
|
||||||
import { PersistenceProvider, persistenceProviderFactory } from '../providers/persistence/persistence';
|
import { PersistenceProvider, persistenceProviderFactory } from '../providers/persistence/persistence';
|
||||||
import { AppProvider } from '../providers/app/app';
|
import { AppProvider } from '../providers/app/app';
|
||||||
import { PlatformProvider } from '../providers/platform/platform';
|
import { PlatformProvider } from '../providers/platform/platform';
|
||||||
|
import { ConfigProvider } from '../providers/config/config';
|
||||||
|
import { LanguageProvider } from '../providers/language/language';
|
||||||
|
|
||||||
export function createTranslateLoader(http: Http) {
|
export function createTranslateLoader(http: Http) {
|
||||||
return new TranslatePoHttpLoader(http, './assets/i18n/', '.po');
|
return new TranslatePoHttpLoader(http, './assets/i18n/', '.po');
|
||||||
|
@ -85,6 +87,12 @@ export function createTranslateLoader(http: Http) {
|
||||||
provide: ErrorHandler,
|
provide: ErrorHandler,
|
||||||
useClass: IonicErrorHandler
|
useClass: IonicErrorHandler
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
provide: APP_INITIALIZER,
|
||||||
|
useFactory: (language: LanguageProvider) => () => language.load(),
|
||||||
|
deps: [LanguageProvider],
|
||||||
|
multi: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
provide: PersistenceProvider,
|
provide: PersistenceProvider,
|
||||||
useFactory: persistenceProviderFactory,
|
useFactory: persistenceProviderFactory,
|
||||||
|
@ -93,7 +101,9 @@ export function createTranslateLoader(http: Http) {
|
||||||
},
|
},
|
||||||
WalletProvider,
|
WalletProvider,
|
||||||
AppProvider,
|
AppProvider,
|
||||||
PlatformProvider
|
PlatformProvider,
|
||||||
|
ConfigProvider,
|
||||||
|
LanguageProvider
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class AppModule { }
|
export class AppModule { }
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Logger } from '@nsalaun/ng-logger';
|
||||||
|
import { Events } from 'ionic-angular';
|
||||||
|
import { PlatformProvider } from '../platform/platform';
|
||||||
|
|
||||||
|
import * as _ from "lodash";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ConfigProvider {
|
||||||
|
private configCache: object;
|
||||||
|
private configDefault: object = {
|
||||||
|
// wallet limits
|
||||||
|
limits: {
|
||||||
|
totalCopayers: 6,
|
||||||
|
mPlusN: 100
|
||||||
|
},
|
||||||
|
|
||||||
|
// wallet default config
|
||||||
|
wallet: {
|
||||||
|
requiredCopayers: 2,
|
||||||
|
totalCopayers: 3,
|
||||||
|
spendUnconfirmed: false,
|
||||||
|
reconnectDelay: 5000,
|
||||||
|
idleDurationMin: 4,
|
||||||
|
settings: {
|
||||||
|
unitName: 'BTC',
|
||||||
|
unitToSatoshi: 100000000,
|
||||||
|
unitDecimals: 8,
|
||||||
|
unitCode: 'btc',
|
||||||
|
alternativeName: 'US Dollar',
|
||||||
|
alternativeIsoCode: 'USD'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Bitcore wallet service URL
|
||||||
|
bws: {
|
||||||
|
url: 'https://bws.bitpay.com/bws/api'
|
||||||
|
},
|
||||||
|
|
||||||
|
download: {
|
||||||
|
bitpay: {
|
||||||
|
url: 'https://bitpay.com/wallet'
|
||||||
|
},
|
||||||
|
copay: {
|
||||||
|
url: 'https://copay.io/#download'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
rateApp: {
|
||||||
|
bitpay: {
|
||||||
|
ios: 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=1149581638&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8',
|
||||||
|
android: 'https://play.google.com/store/apps/details?id=com.bitpay.wallet',
|
||||||
|
wp: ''
|
||||||
|
},
|
||||||
|
copay: {
|
||||||
|
ios: 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=951330296&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8',
|
||||||
|
android: 'https://play.google.com/store/apps/details?id=com.bitpay.copay',
|
||||||
|
wp: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
lock: {
|
||||||
|
method: null,
|
||||||
|
value: null,
|
||||||
|
bannedUntil: null
|
||||||
|
},
|
||||||
|
|
||||||
|
// External services
|
||||||
|
recentTransactions: {
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
|
||||||
|
hideNextSteps: {
|
||||||
|
enabled: this.platform.isWP ? true : false
|
||||||
|
},
|
||||||
|
|
||||||
|
rates: {
|
||||||
|
url: 'https://insight.bitpay.com:443/api/rates'
|
||||||
|
},
|
||||||
|
|
||||||
|
release: {
|
||||||
|
url: 'https://api.github.com/repos/bitpay/copay/releases/latest'
|
||||||
|
},
|
||||||
|
|
||||||
|
pushNotificationsEnabled: true,
|
||||||
|
|
||||||
|
confirmedTxsNotifications: {
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
|
||||||
|
emailNotifications: {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
|
||||||
|
log: {
|
||||||
|
filter: 'debug'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private logger: Logger,
|
||||||
|
private events: Events,
|
||||||
|
private platform: PlatformProvider
|
||||||
|
) {
|
||||||
|
this.logger.debug('ConfigProvider initialized.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public load() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.configCache = _.clone(this.configDefault);
|
||||||
|
resolve(this.configCache);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
set(newOpts: object) {
|
||||||
|
let config = _.cloneDeep(this.configDefault);
|
||||||
|
|
||||||
|
if (_.isString(newOpts)) {
|
||||||
|
newOpts = JSON.parse(newOpts);
|
||||||
|
}
|
||||||
|
|
||||||
|
_.merge(config, this.configCache, newOpts);
|
||||||
|
this.configCache = config;
|
||||||
|
|
||||||
|
this.events.publish('config:updated', this.configCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
get() {
|
||||||
|
return this.configCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Logger } from '@nsalaun/ng-logger';
|
||||||
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
|
||||||
|
import { ConfigProvider } from '../config/config';
|
||||||
|
|
||||||
|
import * as _ from "lodash";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class LanguageProvider {
|
||||||
|
public availables: Array<any> = [
|
||||||
|
{
|
||||||
|
name: 'English',
|
||||||
|
isoCode: 'en'
|
||||||
|
}, {
|
||||||
|
name: 'Español',
|
||||||
|
isoCode: 'es'
|
||||||
|
}, {
|
||||||
|
name: 'Français',
|
||||||
|
isoCode: 'fr',
|
||||||
|
}, {
|
||||||
|
name: 'Italiano',
|
||||||
|
isoCode: 'it',
|
||||||
|
}, {
|
||||||
|
name: 'Polski',
|
||||||
|
isoCode: 'pl',
|
||||||
|
}, {
|
||||||
|
name: 'Deutsch',
|
||||||
|
isoCode: 'de',
|
||||||
|
}, {
|
||||||
|
name: '日本語',
|
||||||
|
isoCode: 'ja',
|
||||||
|
useIdeograms: true,
|
||||||
|
}, {
|
||||||
|
name: '中文(简体)',
|
||||||
|
isoCode: 'zh',
|
||||||
|
useIdeograms: true,
|
||||||
|
}, {
|
||||||
|
name: 'Pусский',
|
||||||
|
isoCode: 'ru',
|
||||||
|
}, {
|
||||||
|
name: 'Português',
|
||||||
|
isoCode: 'pt',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
public current: string;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private logger: Logger,
|
||||||
|
private translate: TranslateService,
|
||||||
|
private config: ConfigProvider
|
||||||
|
) {
|
||||||
|
this.logger.info('LanguageProvider initialized.');
|
||||||
|
}
|
||||||
|
|
||||||
|
load() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
// Get from browser
|
||||||
|
let browserLang = this.translate.getBrowserLang();
|
||||||
|
let validBrowserLang = this.getName(browserLang) ? true : false;
|
||||||
|
|
||||||
|
this.config.load().then((config) => {
|
||||||
|
let configLanguage = config['wallet']['settings']['defaultLanguage'];
|
||||||
|
if (configLanguage) this.current = configLanguage;
|
||||||
|
else {
|
||||||
|
if (validBrowserLang) this.current = browserLang;
|
||||||
|
else this.current = this.getDefaultLanguage(); // default
|
||||||
|
}
|
||||||
|
this.translate.setDefaultLang(this.current);
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
set(lang: string) {
|
||||||
|
this.current = lang;
|
||||||
|
this.translate.use(lang);
|
||||||
|
this.config.set({language: lang});
|
||||||
|
}
|
||||||
|
|
||||||
|
getName(lang: string) {
|
||||||
|
return _.result(_.find(this.availables, {
|
||||||
|
'isoCode': lang
|
||||||
|
}), 'name');
|
||||||
|
}
|
||||||
|
|
||||||
|
getDefaultLanguage() {
|
||||||
|
return this.availables[0]['isoCode'];
|
||||||
|
}
|
||||||
|
|
||||||
|
getCurrentLanguage() {
|
||||||
|
return this.current;
|
||||||
|
}
|
||||||
|
|
||||||
|
getLanguages() {
|
||||||
|
return this.availables;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue