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 { 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());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 { }
|
||||
|
|
|
@ -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