Fix appConfig. Adds interface to configProvider. Fix build

This commit is contained in:
Gustavo Maximiliano Cortez 2017-10-18 16:34:50 -03:00
parent fc05b738bd
commit 4cb54aad02
No known key found for this signature in database
GPG Key ID: 15EDAD8D9F2EB1AF
8 changed files with 242 additions and 140 deletions

View File

@ -74,7 +74,6 @@ Object.keys(templates).forEach(function(k) {
/////////////////
console.log('Copying ' + configDir + '/appConfig.json' + ' to assets');
configBlob = configBlob.replace('{', JSONheader);
fs.writeFileSync('../src/assets/appConfig.json', configBlob, 'utf8');
////////////////

View File

@ -7,7 +7,6 @@ import { Logger } from '@nsalaun/ng-logger';
import { AppProvider } from '../providers/app/app';
import { ProfileProvider } from '../providers/profile/profile';
import { ConfigProvider } from '../providers/config/config';
import { TouchIdProvider } from '../providers/touchid/touchid';
import { TabsPage } from '../pages/tabs/tabs';
import { OnboardingPage } from '../pages/onboarding/onboarding';
@ -15,8 +14,7 @@ import { PinModalPage } from '../pages/pin/pin';
import { FingerprintModalPage } from '../pages/fingerprint/fingerprint';
@Component({
templateUrl: 'app.html',
providers: [TouchIdProvider]
templateUrl: 'app.html'
})
export class CopayApp {
rootPage: any;

View File

@ -152,7 +152,7 @@ let providers: any = [
useFactory: persistenceProviderFactory,
deps: [PlatformProvider, Logger],
multi: false
},
}
];
export function declarationsComponents() {

View File

@ -8,39 +8,35 @@ import { ConfigProvider } from '../../providers/config/config';
import { TouchIdProvider } from '../../providers/touchid/touchid';
interface App {
WindowsStoreDisplayName: string;
WindowsStoreIdentityName: string;
androidVersion: string;
appDescription: string;
appUri: string;
packageName: string;
packageDescription: string;
packageNameId: string;
themeColor: string;
userVisibleName: string;
purposeLine: string;
bundleName: string;
commitHash: string;
description: string;
disclaimerUrl: string;
gitHubRepoBugs: string;
gitHubRepoName: string;
gitHubRepoUrl: string;
appUri: string;
name: string;
nameNoSpace: string;
nameCase: string;
nameCaseNoSpace: string;
nameNoSpace: string;
packageDescription: string;
packageName: string;
packageNameId: string;
purposeLine: string;
pushSenderId: string;
statusBarColor: string;
gitHubRepoName: string;
gitHubRepoUrl: string;
gitHubRepoBugs: string;
disclaimerUrl: string;
url: string;
userVisibleName: string;
version: string;
appDescription: string;
winAppName: string;
WindowsStoreIdentityName: string;
WindowsStoreDisplayName: string;
windowsAppId: string;
_enabledExtensions: {
amazon: boolean;
coinbase: boolean;
glidera: boolean;
}
pushSenderId: string;
description: string;
version: string;
androidVersion: string;
commitHash: string;
_extraCSS: string;
_enabledExtensions: object;
}
@Injectable()
@ -60,23 +56,21 @@ export class AppProvider {
public load() {
return new Promise((resolve, reject) => {
this.config.load().then((config) => {
// storage -> config -> language -> unit -> app
// Everything ok
this.language.init(config);
this.config.load().then(() => {
this.language.load();
this.touchid.init();
this.getInfo().subscribe((info) => {
this.info = info;
resolve(true);
resolve();
});
}).catch((err) => {
// Something may be wrong
reject(err);
this.logger.error(err);
reject();
});
});
}
getInfo() {
private getInfo() {
return this.http.get(this.jsonPath)
.map((res: Response) => res.json());
}

View File

@ -2,106 +2,193 @@ import { Injectable } from '@angular/core';
import { Logger } from '@nsalaun/ng-logger';
import { Events } from 'ionic-angular';
import { PersistenceProvider } from '../persistence/persistence';
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
},
interface Config {
limits: {
totalCopayers: number;
mPlusN: number;
};
// wallet default config
wallet: {
requiredCopayers: 2,
totalCopayers: 3,
spendUnconfirmed: false,
reconnectDelay: 5000,
idleDurationMin: 4,
wallet: {
requiredCopayers: number;
totalCopayers: number;
spendUnconfirmed: boolean;
reconnectDelay: number;
idleDurationMin: number;
settings: {
unitName: 'BTC',
unitToSatoshi: 100000000,
unitDecimals: 8,
unitCode: 'btc',
alternativeName: 'US Dollar',
alternativeIsoCode: 'USD'
}
},
unitName: string;
unitToSatoshi: number;
unitDecimals: number;
unitCode: string;
alternativeName: string;
alternativeIsoCode: string;
defaultLanguage: string;
};
};
// Bitcore wallet service URL
bws: {
url: 'https://bws.bitpay.com/bws/api'
},
bws: {
url: string;
};
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'
download: {
bitpay: {
url: string;
};
copay: {
url: string;
}
};
rateApp: {
bitpay: {
ios: string;
android: string;
wp: string;
};
copay: {
ios: string;
android: string;
wp: string;
};
};
lock: {
method: any;
value: any;
bannedUntil: any;
};
recentTransactions: {
enabled: boolean;
};
hideNextSteps: {
enabled: boolean;
};
rates: {
url: string;
};
release: {
url: string;
};
pushNotificationsEnabled: boolean;
confirmedTxsNotifications: {
enabled: boolean;
};
emailNotifications: {
enabled: boolean;
};
log: {
filter: string;
};
};
const configDefault: Config = {
// 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',
defaultLanguage: ''
}
},
// 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: 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'
}
};
@Injectable()
export class ConfigProvider {
private configCache: Config;
constructor(
private logger: Logger,
private events: Events,
private platform: PlatformProvider,
private persistence: PersistenceProvider
) {
this.logger.debug('ConfigProvider initialized.');
@ -109,16 +196,19 @@ export class ConfigProvider {
public load() {
return new Promise((resolve, reject) => {
this.persistence.getConfig().then((config: object) => {
this.persistence.getConfig().then((config: Config) => {
if (!_.isEmpty(config)) this.configCache = _.clone(config);
else this.configCache = _.clone(this.configDefault);
resolve(this.configCache);
else this.configCache = _.clone(configDefault);
resolve();
}).catch((err) => {
this.logger.error(err);
reject();
});
});
}
public set(newOpts: object) {
let config = _.cloneDeep(this.configDefault);
let config = _.cloneDeep(configDefault);
if (_.isString(newOpts)) {
newOpts = JSON.parse(newOpts);
@ -137,7 +227,7 @@ export class ConfigProvider {
}
public getDefaults(): Object {
return this.configDefault;
return configDefault;
}
}

View File

@ -56,14 +56,13 @@ export class LanguageProvider {
});
}
init(config: object) {
// Get from browser
let browserLang = this.translate.getBrowserLang();
let validBrowserLang = this.getName(browserLang) ? true : false;
let configLanguage = config['wallet']['settings']['defaultLanguage']; // TODO
if (configLanguage) this.current = configLanguage;
public load() {
let lang = this.config.get().wallet.settings.defaultLanguage;
if (!_.isEmpty(lang)) this.current = lang;
else {
// Get from browser
let browserLang = this.translate.getBrowserLang();
let validBrowserLang = this.getName(browserLang) ? true : false;
if (validBrowserLang) this.current = browserLang;
else this.current = this.getDefault();
}

View File

@ -21,11 +21,10 @@ export class TxFormatProvider {
private filter: Filter
) {
console.log('Hello TxFormatProvider Provider');
console.log("configProvider", this.config.get());
}
formatAmount(satoshis: number, fullPrecision?: boolean) {
let settings = this.config.get()['wallet']['settings']; // TODO
let settings = this.config.get().wallet.settings;
if (settings.unitCode == 'sat') return satoshis;
@ -64,7 +63,7 @@ export class TxFormatProvider {
formatAlternativeStr(coin: string, satoshis: number) {
return new Promise((resolve, reject) => {
if (isNaN(satoshis)) resolve();
let settings = this.config.get()['wallet']['settings']; // TODO
let settings = this.config.get().wallet.settings;
var v1 = parseFloat((this.rate.toFiat(satoshis, settings.alternativeIsoCode, coin)).toFixed(2));
var v1FormatFiat = this.filter.formatFiatAmount(v1);

View File

@ -19,7 +19,30 @@ $app-direction: ltr;
// To view all the possible Ionic variables, see:
// http://ionicframework.com/docs/theming/overriding-ionic-variables/
// TODO: Custom variables (backward compatibilities). Will be REMOVED
$v-primary-color: #192c3a;
$v-secondary-color: #31465b;
$v-accent-color: #1abb9b;
$v-dark-gray: #445 !default;
$v-mid-gray: #667 !default;
$v-light-gray: #9b9bab !default;
$v-title-gray: #c2c9d1 !default;
$v-subtle-gray: darken(#ffffff, 5%) !default;
$v-btn-active-color: #148e76;
$v-background-warning: #ffa500;
$v-background-success: #1abb9b;
$v-onboarding-color: #ffffff !default;
$v-onboarding-bar-header-color: #ffffff !default;
$v-onboarding-bar-header-button-color: #ffffff !default;
$v-onboarding-gradient-top-color: $v-primary-color !default;
$v-onboarding-gradient-bottom-color: $v-secondary-color !default;
$v-onboarding-checkbox-on-border: $v-accent-color;
$v-button-primary-bg: $v-accent-color !default;
$v-visible-radius: 6px !default;
// App iOS Variables
// --------------------------------------------------