import { Injectable } from '@angular/core'; import { DataSync } from '../data-sync/data-sync'; import { DbSvc } from '../db/db'; @Injectable() export class SyncManagerSvc { constructor(public dataSync: DataSync, public db: DbSvc) { } public list = []; public ignoreTableList = ['__WebKitDatabaseInfoTable__', 'AD_SysConfig', 'APP_Migration', 'APP_MigrationSql']; /* NOTE: Ignore List of the Table. */ automateSync(){ var promiseArray = []; this.getTableList().then(function (tables) { Object.keys(tables).forEach(table=> { var promise = this.dataSync.pullData([{ "Table": table }], 0, 0); promiseArray.push(promise); }); }); return Promise.all(promiseArray); }; public getUnsyncedTable() { let promise = new Promise((resolve, reject) => { this.getTableList().then((tables) => { this.getTablesData(tables).then((tablesData) => { this.getSyncedStatusData(tablesData).then((tablesStatusData) => { resolve(tablesStatusData); }); }); }); }); return promise; }; public syncDataWithServer(tablename, tableData) { let promise = new Promise((resolve, reject) => { let data: any = []; Object.assign(data, tableData); //angular.copy(tableData, data); delete data.syncstatus; delete data.tableName; delete data.$$hashKey; let list = [{ "Table": tablename, "Rows": data }]; this.dataSync.pushData(list).then((res) => { resolve(res); }, (err) => { reject(err); }); }); return promise; }; public getTableList() { let promise = new Promise((resolve, reject) => { this.db.query("SELECT name FROM sqlite_master WHERE type='table'").then((data) => { let orgData = []; for (let i in this.db.fetchAll(data)) { orgData.push(this.db.fetchAll(data)[i].name); } let filtered = orgData.filter(function (e) { return this.indexOf(e) < 0; }, this.ignoreTableList); this.list = []; this.list = filtered; resolve(filtered); }, (err) => { reject(err); }); }); return promise; } public getTablesData(tableList) { let promiseArray = []; tableList.forEach(table => { let promise = this.db.query("SELECT * FROM " + table); promiseArray.push(promise); }); return Promise.all(promiseArray); } public getSyncedStatusData(tableData) { let promiseArray = []; tableData.forEach(table => { let promise = this.filterTableData(this.db.fetchAll(table)); promiseArray.push(promise); }); return Promise.all(promiseArray); } public filterTableData(tableData) { let promise = new Promise((resolve, reject) => { let flag = true; for (let i in tableData) { let data = tableData[i]; if (data.app_updated && data.app_synced) { if (data.app_updated > data.app_synced) { flag = false; break; } } else { flag = false; break; } } tableData.syncstatus = flag; resolve(tableData); }); return promise; } }