mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	cleanup of entity changes processing
This commit is contained in:
		@@ -217,7 +217,7 @@ class Note extends AbstractEntity {
 | 
			
		||||
            isErased: false,
 | 
			
		||||
            utcDateChanged: pojo.utcDateModified,
 | 
			
		||||
            isSynced: true
 | 
			
		||||
        }, null);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setJsonContent(content) {
 | 
			
		||||
 
 | 
			
		||||
@@ -133,7 +133,7 @@ class NoteRevision extends AbstractEntity {
 | 
			
		||||
            isErased: false,
 | 
			
		||||
            utcDateChanged: this.getUtcDateChanged(),
 | 
			
		||||
            isSynced: true
 | 
			
		||||
        }, null);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user