diff --git a/src/routes/api/import.js b/src/routes/api/import.js index b4f3d9eef..80ecbb255 100644 --- a/src/routes/api/import.js +++ b/src/routes/api/import.js @@ -43,7 +43,7 @@ async function importToBranch(req) { cls.disableEntityEvents(); // eliminate flickering during import - cls.ignoreEntityChanges(); + cls.ignoreEntityChangeIds(); let note; // typically root of the import - client can show it after finishing the import diff --git a/src/services/cls.js b/src/services/cls.js index 25f5b02c2..53d6a40db 100644 --- a/src/services/cls.js +++ b/src/services/cls.js @@ -44,36 +44,37 @@ function isEntityEventsDisabled() { return !!namespace.get('disableEntityEvents'); } -function clearEntityChanges() { - namespace.set('entityChanges', []); +function clearEntityChangeIds() { + namespace.set('entityChangeIds', []); } -function getAndClearEntityChanges() { - const entityChanges = namespace.get('entityChanges') || []; +function getAndClearEntityChangeIds() { + const entityChangeIds = namespace.get('entityChangeIds') || []; - clearEntityChanges(); + clearEntityChangeIds(); - return entityChanges; + return entityChangeIds; } function addEntityChange(entityChange) { - if (namespace.get('ignoreEntityChanges')) { + if (namespace.get('ignoreEntityChangeIds')) { return; } - const entityChanges = namespace.get('entityChanges') || []; + const entityChangeIds = namespace.get('entityChangeIds') || []; - entityChanges.push(entityChange); + // store only ID since the record can be modified (e.g. in erase) + entityChangeIds.push(entityChange.id); - namespace.set('entityChanges', entityChanges); + namespace.set('entityChangeIds', entityChangeIds); } function reset() { clsHooked.reset(); } -function ignoreEntityChanges() { - namespace.set('ignoreEntityChanges', true); +function ignoreEntityChangeIds() { + namespace.set('ignoreEntityChangeIds', true); } module.exports = { @@ -88,8 +89,8 @@ module.exports = { disableEntityEvents, isEntityEventsDisabled, reset, - clearEntityChanges, - getAndClearEntityChanges, + clearEntityChangeIds, + getAndClearEntityChangeIds, addEntityChange, - ignoreEntityChanges + ignoreEntityChangeIds }; diff --git a/src/services/sql.js b/src/services/sql.js index ff7f1ec36..ac07ad966 100644 --- a/src/services/sql.js +++ b/src/services/sql.js @@ -248,7 +248,7 @@ function transactional(func) { return ret; } catch (e) { - const entityChanges = cls.getAndClearEntityChanges(); + const entityChanges = cls.getAndClearEntityChangeIds(); if (entityChanges.length > 0) { log.info("Transaction rollback dirtied the becca, forcing reload."); diff --git a/src/services/ws.js b/src/services/ws.js index a1132aaa7..0ba4244a9 100644 --- a/src/services/ws.js +++ b/src/services/ws.js @@ -134,7 +134,13 @@ function fillInAdditionalProperties(entityChange) { } } -function sendPing(client, entityChanges = []) { +function sendPing(client, entityChangeIds = []) { + if (entityChangeIds.length === 0) { + return; + } + + const entityChanges = sql.getManyRows(`SELECT * FROM entity_changes WHERE id IN (???)`, entityChangeIds); + for (const entityChange of entityChanges) { try { fillInAdditionalProperties(entityChange); @@ -156,9 +162,9 @@ function sendPing(client, entityChanges = []) { function sendTransactionEntityChangesToAllClients() { if (webSocketServer) { - const entityChanges = cls.getAndClearEntityChanges(); + const entityChangeIds = cls.getAndClearEntityChangeIds(); - webSocketServer.clients.forEach(client => sendPing(client, entityChanges)); + webSocketServer.clients.forEach(client => sendPing(client, entityChangeIds)); } } diff --git a/src/views/dialogs/delete_notes.ejs b/src/views/dialogs/delete_notes.ejs index 3bbf4ca56..750ea994d 100644 --- a/src/views/dialogs/delete_notes.ejs +++ b/src/views/dialogs/delete_notes.ejs @@ -18,10 +18,10 @@
-