mirror of https://github.com/BTCPrivate/copay.git
Fix appConfig. Adds interface to configProvider. Fix build
This commit is contained in:
parent
fc05b738bd
commit
4cb54aad02
|
@ -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');
|
||||
|
||||
////////////////
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -152,7 +152,7 @@ let providers: any = [
|
|||
useFactory: persistenceProviderFactory,
|
||||
deps: [PlatformProvider, Logger],
|
||||
multi: false
|
||||
},
|
||||
}
|
||||
];
|
||||
|
||||
export function declarationsComponents() {
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
// --------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue