add memberId to entity_changes to avoid having to resend all changes second time

This commit is contained in:
zadam
2022-01-09 20:16:39 +01:00
parent c448d34a38
commit 7159b13c9d
25 changed files with 11520 additions and 266 deletions

View File

@@ -3,7 +3,7 @@
const options = require('../../services/options');
const utils = require('../../services/utils');
const dateUtils = require('../../services/date_utils');
const sourceIdService = require('../../services/source_id');
const memberId = require('../../services/member_id');
const passwordEncryptionService = require('../../services/password_encryption');
const protectedSessionService = require('../../services/protected_session');
const appInfo = require('../../services/app_info');
@@ -47,7 +47,7 @@ function loginSync(req) {
req.session.loggedIn = true;
return {
sourceId: sourceIdService.getCurrentSourceId(),
memberId: memberId,
maxEntityChangeId: sql.getValue("SELECT COALESCE(MAX(id), 0) FROM entity_changes WHERE isSynced = 1")
};
}

View File

@@ -123,13 +123,36 @@ function forceNoteSync(req) {
function getChanged(req) {
const startTime = Date.now();
const lastEntityChangeId = parseInt(req.query.lastEntityChangeId);
let lastEntityChangeId = parseInt(req.query.lastEntityChangeId);
const clientMemberId = req.query.memberId;
let filteredEntityChanges = [];
const entityChanges = sql.getRows("SELECT * FROM entity_changes WHERE isSynced = 1 AND id > ? LIMIT 1000", [lastEntityChangeId]);
while (filteredEntityChanges.length === 0) {
const entityChanges = sql.getRows(`
SELECT *
FROM entity_changes
WHERE isSynced = 1
AND id > ?
ORDER BY id
LIMIT 1000`, [lastEntityChangeId]);
if (entityChanges.length === 0) {
break;
}
filteredEntityChanges = entityChanges.filter(ec => ec.memberId !== clientMemberId);
}
const entityChangesRecords = syncService.getEntityChangesRecords(filteredEntityChanges);
if (entityChangesRecords.length > 0) {
lastEntityChangeId = entityChangesRecords[entityChangesRecords.length - 1].entityChange.id;
}
const ret = {
entityChanges: syncService.getEntityChangesRecords(entityChanges),
maxEntityChangeId: sql.getValue('SELECT COALESCE(MAX(id), 0) FROM entity_changes WHERE isSynced = 1')
entityChanges: entityChangesRecords,
maxEntityChangeId: sql.getValue('SELECT COALESCE(MAX(id), 0) FROM entity_changes WHERE isSynced = 1'),
lastEntityChangeId
};
if (ret.entityChanges.length > 0) {
@@ -174,10 +197,10 @@ function update(req) {
}
}
const {entities} = body;
const {entities, memberId} = body;
for (const {entityChange, entity} of entities) {
syncUpdateService.updateEntity(entityChange, entity);
syncUpdateService.updateEntity(entityChange, entity, memberId);
}
}

View File

@@ -1,6 +1,5 @@
"use strict";
const sourceIdService = require('../services/source_id');
const sql = require('../services/sql');
const attributeService = require('../services/attributes');
const config = require('../services/config');
@@ -28,7 +27,6 @@ function index(req, res) {
mainFontSize: parseInt(options.mainFontSize),
treeFontSize: parseInt(options.treeFontSize),
detailFontSize: parseInt(options.detailFontSize),
sourceId: sourceIdService.generateSourceId(),
maxEntityChangeIdAtLoad: sql.getValue("SELECT COALESCE(MAX(id), 0) FROM entity_changes"),
maxEntityChangeSyncIdAtLoad: sql.getValue("SELECT COALESCE(MAX(id), 0) FROM entity_changes WHERE isSynced = 1"),
instanceName: config.General ? config.General.instanceName : null,

View File

@@ -144,7 +144,7 @@ function route(method, path, middleware, routeHandler, resultHandler, transactio
cls.namespace.bindEmitter(res);
const result = cls.init(() => {
cls.set('sourceId', req.headers['trilium-source-id']);
cls.set('componentId', req.headers['trilium-component-id']);
cls.set('localNowDateTime', req.headers['trilium-local-now-datetime']);
cls.set('hoistedNoteId', req.headers['trilium-hoisted-note-id'] || 'root');