diff --git a/src/becca/entities/note.js b/src/becca/entities/note.js index 37f158add..011d4896d 100644 --- a/src/becca/entities/note.js +++ b/src/becca/entities/note.js @@ -217,7 +217,7 @@ class Note extends AbstractEntity { isErased: false, utcDateChanged: pojo.utcDateModified, isSynced: true - }, null); + }); } setJsonContent(content) { diff --git a/src/becca/entities/note_revision.js b/src/becca/entities/note_revision.js index bb9fd79e0..18ce36ada 100644 --- a/src/becca/entities/note_revision.js +++ b/src/becca/entities/note_revision.js @@ -133,7 +133,7 @@ class NoteRevision extends AbstractEntity { isErased: false, utcDateChanged: this.getUtcDateChanged(), isSynced: true - }, null); + }); } beforeSaving() { diff --git a/src/routes/api/sync.js b/src/routes/api/sync.js index f85a57690..4aaef2d58 100644 --- a/src/routes/api/sync.js +++ b/src/routes/api/sync.js @@ -170,10 +170,10 @@ function update(req) { } } - const {sourceId, entities} = body; + const {entities} = body; for (const {entityChange, entity} of entities) { - syncUpdateService.updateEntity(entityChange, entity, sourceId); + syncUpdateService.updateEntity(entityChange, entity); } } diff --git a/src/services/consistency_checks.js b/src/services/consistency_checks.js index 6cf549ae6..e9a427dfc 100644 --- a/src/services/consistency_checks.js +++ b/src/services/consistency_checks.js @@ -307,8 +307,9 @@ class ConsistencyChecks { entityId: noteId, hash: hash, isErased: false, - utcDateChanged: utcDateModified - }, null); + utcDateChanged: utcDateModified, + isSynced: true + }); } else { // empty string might be wrong choice for some note types but it's a best guess @@ -466,7 +467,7 @@ class ConsistencyChecks { LEFT JOIN entity_changes ON entity_changes.entityName = '${entityName}' AND entity_changes.entityId = ${key} WHERE - entity_changes.id IS NULL AND ` + (entityName === 'options' ? 'options.isSynced = 1' : '1'), + entity_changes.id IS NULL`, ({entityId}) => { if (this.autoFix) { const entity = becca.getEntity(entityName, entityId); @@ -476,8 +477,9 @@ class ConsistencyChecks { entityId, hash: entity.generateHash(), isErased: false, - utcDateChanged: entity.getUtcDateChanged() - }, null); + utcDateChanged: entity.getUtcDateChanged(), + isSynced: entityName !== 'options' || entity.isSynced + }); logFix(`Created missing entity change for entityName=${entityName}, entityId=${entityId}`); } else { diff --git a/src/services/entity_changes.js b/src/services/entity_changes.js index 275a92640..dbcf79cba 100644 --- a/src/services/entity_changes.js +++ b/src/services/entity_changes.js @@ -7,28 +7,15 @@ const becca = require("../becca/becca"); let maxEntityChangeId = 0; -function insertEntityChange(entityName, entityId, hash, isErased, utcDateChanged, sourceId = null, isSynced = true) { - const entityChange = { - entityName: entityName, - entityId: entityId, - hash: hash, - sourceId: sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId(), - isSynced: isSynced ? 1 : 0, - isErased: isErased ? 1 : 0, - utcDateChanged: utcDateChanged - }; - +function addEntityChange(entityChange) { + entityChange.sourceId = entityChange.sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId(); + entityChange.isSynced = entityChange.isSynced ? 1 : 0; + entityChange.isErased = entityChange.isErased ? 1 : 0; entityChange.id = sql.replace("entity_changes", entityChange); maxEntityChangeId = Math.max(maxEntityChangeId, entityChange.id); - return entityChange; -} - -function addEntityChange(entityChange, sourceId) { - const localEntityChange = insertEntityChange(entityChange.entityName, entityChange.entityId, entityChange.hash, entityChange.isErased, entityChange.utcDateChanged, sourceId, entityChange.isSynced); - - cls.addEntityChange(localEntityChange); + cls.addEntityChange(entityChange); } function addNoteReorderingEntityChange(parentNoteId, sourceId) { @@ -38,8 +25,9 @@ function addNoteReorderingEntityChange(parentNoteId, sourceId) { hash: 'N/A', isErased: false, utcDateChanged: dateUtils.utcNowDateTime(), - isSynced: true - }, sourceId); + isSynced: true, + sourceId + }); const eventService = require('./events'); @@ -52,9 +40,7 @@ function addNoteReorderingEntityChange(parentNoteId, sourceId) { function moveEntityChangeToTop(entityName, entityId) { const ec = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [entityName, entityId]); - const localEntityChange = insertEntityChange(entityName, entityId, ec.hash, ec.isErased, ec.utcDateChanged, ec.sourceId, ec.isSynced); - - cls.addEntityChange(localEntityChange); + addEntityChange(ec); } function addEntityChangesForSector(entityName, sector) { @@ -64,7 +50,7 @@ function addEntityChangesForSector(entityName, sector) { sql.transactional(() => { for (const ec of entityChanges) { - insertEntityChange(entityName, ec.entityId, ec.hash, ec.isErased, ec.utcDateChanged, ec.sourceId, ec.isSynced); + addEntityChange(ec); } }); @@ -107,7 +93,7 @@ function fillEntityChanges(entityName, entityPrimaryKey, condition = '') { isErased: false, utcDateChanged: entity.getUtcDateChanged(), isSynced: entityName !== 'options' || !!entity.isSynced - }, null); + }); } } diff --git a/src/services/sync.js b/src/services/sync.js index 0a919d18e..082091b70 100644 --- a/src/services/sync.js +++ b/src/services/sync.js @@ -156,7 +156,7 @@ async function pullChanges(syncContext) { atLeastOnePullApplied = true; } - syncUpdateService.updateEntity(entityChange, entity, syncContext.sourceId); + syncUpdateService.updateEntity(entityChange, entity); } outstandingPullCount = Math.max(0, resp.maxEntityChangeId - entityChange.id); diff --git a/src/services/sync_update.js b/src/services/sync_update.js index d086527fe..2493a64c4 100644 --- a/src/services/sync_update.js +++ b/src/services/sync_update.js @@ -4,12 +4,12 @@ const entityChangesService = require('./entity_changes'); const eventService = require('./events'); const entityConstructor = require("../becca/entity_constructor"); -function updateEntity(entityChange, entity, sourceId) { +function updateEntity(entityChange, entity) { // can be undefined for options with isSynced=false if (!entity) { if (entityChange.isSynced) { if (entityChange.isErased) { - entityChangesService.addEntityChange(entityChange, sourceId); + entityChangesService.addEntityChange(entityChange); } else { log.info(`Encountered synced non-erased entity change without entity: ${JSON.stringify(entityChange)}`); @@ -23,8 +23,8 @@ function updateEntity(entityChange, entity, sourceId) { } const updated = entityChange.entityName === 'note_reordering' - ? updateNoteReordering(entityChange, entity, sourceId) - : updateNormalEntity(entityChange, entity, sourceId); + ? updateNoteReordering(entityChange, entity) + : updateNormalEntity(entityChange, entity); if (updated && !entityChange.isErased) { if (entity.isDeleted) { @@ -42,7 +42,7 @@ function updateEntity(entityChange, entity, sourceId) { } } -function updateNormalEntity(remoteEntityChange, entity, sourceId) { +function updateNormalEntity(remoteEntityChange, entity) { const localEntityChange = sql.getRow(` SELECT utcDateChanged, hash, isErased FROM entity_changes @@ -54,7 +54,7 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) { sql.execute(`DELETE FROM ${remoteEntityChange.entityName} WHERE ${primaryKey} = ?`, remoteEntityChange.entityId); - entityChangesService.addEntityChange(remoteEntityChange, sourceId); + entityChangesService.addEntityChange(remoteEntityChange); }); return true; @@ -71,7 +71,7 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) { sql.transactional(() => { sql.replace(remoteEntityChange.entityName, entity); - entityChangesService.addEntityChange(remoteEntityChange, sourceId); + entityChangesService.addEntityChange(remoteEntityChange); }); return true; @@ -80,13 +80,13 @@ function updateNormalEntity(remoteEntityChange, entity, sourceId) { return false; } -function updateNoteReordering(entityChange, entity, sourceId) { +function updateNoteReordering(entityChange, entity) { sql.transactional(() => { for (const key in entity) { sql.execute("UPDATE branches SET notePosition = ? WHERE branchId = ?", [entity[key], key]); } - entityChangesService.addEntityChange(entityChange, sourceId); + entityChangesService.addEntityChange(entityChange); }); return true;