Merge pull request #6936 from Gamboster/feat/profileProviderV4

Feat: Profile provider v4
This commit is contained in:
Gustavo Maximiliano Cortez 2017-10-19 13:56:50 -03:00 committed by GitHub
commit 33f1a8780b
7 changed files with 1220 additions and 87 deletions

View File

@ -127,7 +127,7 @@
"codecov": "2.2.0",
"fs-extra": "^4.0.2",
"html-loader": "0.4.5",
"ionic": "3.13.0",
"ionic": "3.13.2",
"jasmine-core": "2.6.4",
"jasmine-spec-reporter": "4.1.1",
"karma": "1.7.0",
@ -179,4 +179,4 @@
"ios"
]
}
}
}

View File

@ -48,23 +48,21 @@ export class CopayApp {
this.splashScreen.hide();
}
// Check Profile
this.profile.get().then((profile: any) => {
if (profile) {
this.logger.info('Profile read. Go to HomePage.');
this.openLockModal();
this.rootPage = TabsPage;
} else {
// TODO: go to onboarding page
this.logger.warn('Profile does not exist. Go to Onboarding.');
this.rootPage = OnboardingPage;
}
this.profile.loadAndBindProfile().then((profile: any) => {
this.logger.info('Profile read. Go to HomePage.');
this.openLockModal();
if (profile) this.rootPage = TabsPage;
}).catch((err: any) => {
if (!err) this.profile.createProfile();
this.logger.warn(err);
this.rootPage = OnboardingPage;
});
});
}
openLockModal() {
let config = this.config.get();
let lockMethod = config['lock']['method'];
let config: any = this.config.get();
let lockMethod = config.lock.method;
if (!lockMethod) return;
if (lockMethod == 'PIN') this.openPINModal('checkPin');
if (lockMethod == 'Fingerprint') this.openFingerprintModal();

View File

@ -0,0 +1,121 @@
import * as moment from 'moment';
export class Profile {
public version: string;
public createdOn: Number;
public credentials: Array<any>;
public disclaimerAccepted: boolean;
public checked: Object;
public checkedUA?: any;
public dirty: boolean;
constructor() {
this.version = '1.0.0';
}
public create(opts?: any): any {
opts = opts ? opts : {};
let x = new Profile();
x.createdOn = Date.now();
x.credentials = opts.credentials || [];
x.disclaimerAccepted = false;
x.checked = {};
return x;
};
public fromObj(obj: any): any {
let x = new Profile();
x.createdOn = obj.createdOn;
x.credentials = obj.credentials;
x.disclaimerAccepted = obj.disclaimerAccepted;
x.checked = obj.checked || {};
x.checkedUA = obj.checkedUA || {};
if (x.credentials[0] && typeof x.credentials[0] != 'object')
throw ("credentials should be an object");
return x;
};
public fromString(str: string): any {
return this.fromObj(JSON.parse(str));
};
public toObj(): string {
delete this.dirty;
return JSON.stringify(this);
};
public hasWallet(walletId: string): boolean {
for (let i in this.credentials) {
let c = this.credentials[i];
if (c.walletId == walletId) return true;
};
return false;
};
public isChecked(ua: any, walletId: string): boolean {
return !!(this.checkedUA == ua && this.checked[walletId]);
};
public isDeviceChecked(ua: any): boolean {
return this.checkedUA == ua;
};
public setChecked(ua: any, walletId: string): void {
if (this.checkedUA != ua) {
this.checkedUA = ua;
this.checked = {};
}
this.checked[walletId] = true;
this.dirty = true;
};
public addWallet(credentials: any): boolean {
if (!credentials.walletId)
throw 'credentials must have .walletId';
if (this.hasWallet(credentials.walletId))
return false;
this.credentials.push(credentials);
this.dirty = true;
return true;
};
public updateWallet(credentials: any): boolean {
if (!credentials.walletId)
throw 'credentials must have .walletId';
if (!this.hasWallet(credentials.walletId))
return false;
this.credentials = this.credentials.map((c: any) => {
if (c.walletId != credentials.walletId) {
return c;
} else {
return credentials
}
});
this.dirty = true;
return true;
};
public deleteWallet(walletId: string): boolean {
if (!this.hasWallet(walletId))
return false;
this.credentials = this.credentials.filter(function (c) {
return c.walletId != walletId;
});
this.dirty = true;
return true;
};
}

View File

@ -17,19 +17,20 @@ export class HomePage {
private release: ReleaseProvider,
) {
this.release.getLatestAppVersion()
.catch((err) => {
console.log('Error:', err)})
.then((version) => {
console.log('Current app version:',version);
var result = this.release.checkForUpdates(version);
console.log('Update available:', result.updateAvailable);
});
.catch((err) => {
console.log('Error:', err)
})
.then((version) => {
console.log('Current app version:', version);
var result = this.release.checkForUpdates(version);
console.log('Update available:', result.updateAvailable);
});
}
ionViewDidLoad() {
console.log('ionViewDidLoad HomePage');
this.wallets = this.profile.bind();
this.wallets = this.profile.getWallets();
console.log('[home.ts:20]', this.wallets); //TODO
}

View File

@ -1,8 +1,6 @@
import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { ProfileProvider } from '../../providers/profile/profile';
import { TourPage } from './tour/tour';
import { TabsPage } from '../tabs/tabs';
@ -14,19 +12,12 @@ export class OnboardingPage {
constructor(
public navCtrl: NavController,
public navParams: NavParams,
private profile: ProfileProvider
public navParams: NavParams
) {
}
ionViewDidLoad() {
console.log('ionViewDidLoad OnboardingPage');
this.createProfile();
}
createProfile() {
// TODO: create a new profile
this.profile.create();
}
getStarted() {

View File

@ -117,7 +117,7 @@ export class ConfigProvider {
});
}
set(newOpts: object) {
public set(newOpts: object) {
let config = _.cloneDeep(this.configDefault);
if (_.isString(newOpts)) {
@ -125,15 +125,19 @@ export class ConfigProvider {
}
_.merge(config, this.configCache, newOpts);
this.configCache = config;
this.events.publish('config:updated', this.configCache);
this.persistence.storeConfig(this.configCache).then(() => {
this.logger.info('Config saved');
});
this.events.publish('config:updated', this.configCache);
}
get() {
public get(): Object {
return this.configCache;
}
public getDefaults(): Object {
return this.configDefault;
}
}

File diff suppressed because it is too large Load Diff