mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-23 23:19:40 +01:00
feat: implement notes/nb syncing (untested)
This commit is contained in:
@@ -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()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user