Add config and language providers

This commit is contained in:
Gustavo Maximiliano Cortez 2017-08-15 11:25:39 -03:00
parent fe2c7f2a19
commit 0876f50f67
No known key found for this signature in database
GPG Key ID: 15EDAD8D9F2EB1AF
4 changed files with 243 additions and 6 deletions

View File

@ -5,7 +5,6 @@ import { SplashScreen } from '@ionic-native/splash-screen';
import { Logger } from '@nsalaun/ng-logger';
import { AppProvider } from '../providers/app/app';
import { TranslateService } from '@ngx-translate/core';
import { TabsPage } from '../pages/tabs/tabs';
@ -20,8 +19,7 @@ export class CopayApp {
statusBar: StatusBar,
splashScreen: SplashScreen,
log: Logger,
app: AppProvider,
translate: TranslateService
app: AppProvider
) {
platform.ready().then(() => {
app.getName().subscribe((name) => {
@ -40,8 +38,6 @@ export class CopayApp {
splashScreen.hide();
}
translate.setDefaultLang('en');
translate.use(platform.lang());
});
}
}

View File

@ -34,6 +34,8 @@ import { WalletProvider } from '../providers/wallet/wallet';
import { PersistenceProvider, persistenceProviderFactory } from '../providers/persistence/persistence';
import { AppProvider } from '../providers/app/app';
import { PlatformProvider } from '../providers/platform/platform';
import { ConfigProvider } from '../providers/config/config';
import { LanguageProvider } from '../providers/language/language';
export function createTranslateLoader(http: Http) {
return new TranslatePoHttpLoader(http, './assets/i18n/', '.po');
@ -85,6 +87,12 @@ export function createTranslateLoader(http: Http) {
provide: ErrorHandler,
useClass: IonicErrorHandler
},
{
provide: APP_INITIALIZER,
useFactory: (language: LanguageProvider) => () => language.load(),
deps: [LanguageProvider],
multi: true
},
{
provide: PersistenceProvider,
useFactory: persistenceProviderFactory,
@ -93,7 +101,9 @@ export function createTranslateLoader(http: Http) {
},
WalletProvider,
AppProvider,
PlatformProvider
PlatformProvider,
ConfigProvider,
LanguageProvider
]
})
export class AppModule { }

View File

@ -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;
}
}

View File

@ -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;
}
}