diff --git a/packages/core/api/sync.js b/packages/core/api/sync.js index c7e8a23b8..8fadacc87 100644 --- a/packages/core/api/sync.js +++ b/packages/core/api/sync.js @@ -53,20 +53,23 @@ export default class Sync { if (!user) return false; let lastSyncedTimestamp = user.lastSyncedTimestamp || 0; let serverResponse = await this._fetch(lastSyncedTimestamp); - let data = this._merge(serverResponse, lastSyncedTimestamp); + let data = this._merge({ serverResponse, lastSyncedTimestamp, user }); + await this.db.user.set({ lastSyncedTimestamp: data.lastSynced }); await this._send(data); return true; } - _merge(serverResponse, lastSyncedTimestamp) { + _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); if (!localNote || note.dateEdited > localNote.data.dateEdited) { await this.db.notes.add({ ...note, remote: true }); } }); notebooks.forEach(async nb => { + nb = JSON.parse(nb.data); let localNb = this.db.notebooks.notebook(nb.id); if (!localNb || nb.dateEdited > localNb.data.dateEdited) { await this.db.notebooks.add({ ...nb, remote: true }); @@ -74,13 +77,26 @@ export default class Sync { }); // TODO trash, colors, tags return { - notes: this.db.notes.filter(v => v.dateEdited > lastSyncedTimestamp), - notebooks: this.db.notebooks.filter( - v => v.dateEdited > lastSyncedTimestamp - ), + notes: this.db.notes + .filter(v => v.dateEdited > lastSyncedTimestamp) + .map(v => ({ + dateEdited: v.dateEdited, + dateCreated: v.dateCreated, + data: JSON.stringify(v), + userId: user.Id + })), + notebooks: this.db.notebooks + .filter(v => v.dateEdited > lastSyncedTimestamp) + .map(v => ({ + dateEdited: v.dateEdited, + dateCreated: v.dateCreated, + data: JSON.stringify(v), + userId: user.Id + })), tags: [], colors: [], - tags: [] + tags: [], + lastSynced: Date.now() }; } diff --git a/packages/core/models/user.js b/packages/core/models/user.js index bb92f90bc..1cbfe43ef 100644 --- a/packages/core/models/user.js +++ b/packages/core/models/user.js @@ -15,6 +15,12 @@ export default class User { return this.context.read("user"); } + async set(user) { + if (!user) return; + user = { ...(await this.get()), ...user }; + await this.context.write("user", user); + } + async login(username, password) { let response = await authRequest("oauth/token", { username,