import { Injectable } from "@angular/core"; import { Observable } from "rxjs/Observable"; import { Observer } from "rxjs/Observer"; import { OdooService } from "./odoo-service"; import { PouchService } from "./pouch-service"; import { getMetadataStorage } from "../odoo/utils/metadata-storage"; import "rxjs/add/observable/from"; import "rxjs/add/operator/concatMap"; import "rxjs/add/operator/map"; @Injectable() export class DownloadService { constructor( public odoo: OdooService, public pouch: PouchService ) { } /** * */ do(): Observable { return this.pouch.getAll("user") .concatMap(users => this.login(users.docs.shift())) .concatMap(logged => Observable.from(getMetadataStorage().getModels())) .concatMap(item => this.odoo.searchRead(item.model.name, []).map(r => { return Object.assign(r, { type: item.model.document }); })).concatMap(data => this.store(data)); } /** * */ protected login(user: any): Observable { this.odoo.initialize("http://localhost:8100"); return this.odoo.login(user.db, user.username, user.password); } /** * */ protected store(data: any): Observable { let type = data.type; let records = data.records; return Observable.from(records).concatMap(item => this.pouch.save(Object.assign(item, { type: type }))); } }