From a33661d05041424ae46eed2a7f63efd9014cdf66 Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 25 Jul 2021 21:25:06 +0200 Subject: [PATCH] websocket events fill additional data from becca instead of database --- src/public/app/entities/attribute.js | 2 -- src/public/app/entities/branch.js | 2 -- src/services/ws.js | 54 +++++++++++++++++++++------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/public/app/entities/attribute.js b/src/public/app/entities/attribute.js index e465062b3..e1e34cbfb 100644 --- a/src/public/app/entities/attribute.js +++ b/src/public/app/entities/attribute.js @@ -22,8 +22,6 @@ class Attribute { this.position = row.position; /** @param {boolean} isInheritable */ this.isInheritable = !!row.isInheritable; - /** @param {boolean} */ - this.isDeleted = !!row.isDeleted; } /** @returns {NoteShort} */ diff --git a/src/public/app/entities/branch.js b/src/public/app/entities/branch.js index 1b346c626..27802623e 100644 --- a/src/public/app/entities/branch.js +++ b/src/public/app/entities/branch.js @@ -21,8 +21,6 @@ class Branch { this.isExpanded = !!row.isExpanded; /** @param {boolean} */ this.fromSearchNote = !!row.fromSearchNote; - /** @param {boolean} */ - this.isDeleted = !!row.isDeleted; } /** @returns {NoteShort} */ diff --git a/src/services/ws.js b/src/services/ws.js index e51bbc4b4..77d0b40b9 100644 --- a/src/services/ws.js +++ b/src/services/ws.js @@ -6,6 +6,8 @@ const cls = require('./cls'); const config = require('./config'); const syncMutexService = require('./sync_mutex'); const protectedSessionService = require('./protected_session'); +const becca = require("../becca/becca"); +const AbstractEntity = require("../becca/entities/abstract_entity.js"); let webSocketServer; let lastSyncedPush = null; @@ -75,34 +77,60 @@ function sendMessageToAllClients(message) { } function fillInAdditionalProperties(entityChange) { - // most of these could be filled by becca - // the exception is isDeleted - in that case becca doesn't contain such entity at all - // this would have to be handled separately - if (entityChange.isErased) { return; } // fill in some extra data needed by the frontend + // first try to use becca which works for non-deleted entities + // only when that fails try to load from database if (entityChange.entityName === 'attributes') { - entityChange.entity = sql.getRow(`SELECT * FROM attributes WHERE attributeId = ?`, [entityChange.entityId]); - } else if (entityChange.entityName === 'branches') { - entityChange.entity = sql.getRow(`SELECT * FROM branches WHERE branchId = ?`, [entityChange.entityId]); - } else if (entityChange.entityName === 'notes') { - entityChange.entity = sql.getRow(`SELECT * FROM notes WHERE noteId = ?`, [entityChange.entityId]); + entityChange.entity = becca.getAttribute(entityChange.entityId); - if (entityChange.entity.isProtected) { - entityChange.entity.title = protectedSessionService.decryptString(entityChange.entity.title); + if (!entityChange.entity) { + entityChange.entity = sql.getRow(`SELECT * FROM attributes WHERE attributeId = ?`, [entityChange.entityId]); + } + } else if (entityChange.entityName === 'branches') { + entityChange.entity = becca.getBranch(entityChange.entityId); + + if (!entityChange.entity) { + entityChange.entity = sql.getRow(`SELECT * FROM branches WHERE branchId = ?`, [entityChange.entityId]); + } + } else if (entityChange.entityName === 'notes') { + entityChange.entity = becca.getNote(entityChange.entityId); + + if (!entityChange.entity) { + entityChange.entity = sql.getRow(`SELECT * FROM notes WHERE noteId = ?`, [entityChange.entityId]); + + if (entityChange.entity.isProtected) { + entityChange.entity.title = protectedSessionService.decryptString(entityChange.entity.title); + } } } else if (entityChange.entityName === 'note_revisions') { entityChange.noteId = sql.getValue(`SELECT noteId FROM note_revisions WHERE noteRevisionId = ?`, [entityChange.entityId]); } else if (entityChange.entityName === 'note_reordering') { - entityChange.positions = sql.getMap(`SELECT branchId, notePosition FROM branches WHERE isDeleted = 0 AND parentNoteId = ?`, [entityChange.entityId]); + entityChange.positions = {}; + + const parentNote = becca.getNote(entityChange.entityId); + + if (parentNote) { + for (const childBranch of parentNote.getChildBranches()) { + entityChange.positions[childBranch.branchId] = childBranch.notePosition; + } + } } else if (entityChange.entityName === 'options') { - entityChange.entity = sql.getRow(`SELECT * FROM options WHERE name = ?`, [entityChange.entityId]); + entityChange.entity = becca.getOption(entityChange.entityId); + + if (!entityChange.entity) { + entityChange.entity = sql.getRow(`SELECT * FROM options WHERE name = ?`, [entityChange.entityId]); + } + } + + if (entityChange.entity instanceof AbstractEntity) { + entityChange.entity = entityChange.entity.getPojo(); } }