From 04af9e16684455c02592a4ea847fec6acd16f704 Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Wed, 12 Feb 2020 02:09:08 +0500 Subject: [PATCH] fix sync --- packages/core/api/sync.js | 11 +++++++++-- packages/core/database/cached-collection.js | 4 +++- packages/core/models/user.js | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/core/api/sync.js b/packages/core/api/sync.js index 8fadacc87..d7bd52a09 100644 --- a/packages/core/api/sync.js +++ b/packages/core/api/sync.js @@ -26,7 +26,7 @@ * And then it should continue. */ import Database from "./index"; -import { HOST } from "../utils/constants"; +import { HOST,HEADERS } from "../utils/constants"; import fetch from "node-fetch"; export default class Sync { @@ -54,13 +54,14 @@ export default class Sync { let lastSyncedTimestamp = user.lastSyncedTimestamp || 0; let serverResponse = await this._fetch(lastSyncedTimestamp); let data = this._merge({ serverResponse, lastSyncedTimestamp, user }); - await this.db.user.set({ lastSyncedTimestamp: data.lastSynced }); + await this.db.user.set({ lastSynced: data.lastSynced }); await this._send(data); return true; } _merge({ serverResponse, lastSyncedTimestamp, user }) { const { notes, notebooks /* tags, colors, trash */ } = serverResponse; + notes.forEach(async note => { note = JSON.parse(note.data); let localNote = this.db.notes.note(note.id); @@ -78,6 +79,7 @@ export default class Sync { // TODO trash, colors, tags return { notes: this.db.notes + .all .filter(v => v.dateEdited > lastSyncedTimestamp) .map(v => ({ dateEdited: v.dateEdited, @@ -86,6 +88,7 @@ export default class Sync { userId: user.Id })), notebooks: this.db.notebooks + .all .filter(v => v.dateEdited > lastSyncedTimestamp) .map(v => ({ dateEdited: v.dateEdited, @@ -101,7 +104,11 @@ export default class Sync { } async _send(data) { + + //TODO encrypt the payload + let token = await this.db.user.token(); + if (!token) return; let response = await fetch(`${HOST}sync`, { method: "POST", headers: { ...HEADERS, Authorization: `Bearer ${token}` }, diff --git a/packages/core/database/cached-collection.js b/packages/core/database/cached-collection.js index adfef6fac..f6466bc2e 100644 --- a/packages/core/database/cached-collection.js +++ b/packages/core/database/cached-collection.js @@ -28,9 +28,11 @@ export default class CachedCollection { if (!item.id) throw new Error("The item must contain the id field."); let exists = this.map.has(item.id); - await this.updateItem(item); if (!exists) { item.dateCreated = item.dateCreated || Date.now(); + } + await this.updateItem(item); + if (!exists) { await this.indexer.index(item.id); } } diff --git a/packages/core/models/user.js b/packages/core/models/user.js index f02b6b981..719a5b2ed 100644 --- a/packages/core/models/user.js +++ b/packages/core/models/user.js @@ -32,9 +32,9 @@ export default class User { } async token() { - let user = await this.user(); + let user = await this.get(); if (!user) return; - if (user.expiry < Date.now()) { + if (user.expiry > Date.now()) { return user.accessToken; } let response = await authRequest("oauth/token", {