From ddce014495ad52e1d7068fd0082dc019a013638b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Jul 2024 19:25:31 +0300 Subject: [PATCH 1/3] server: Fix sync failing if local EC is missing --- src/services/sync_update.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/sync_update.ts b/src/services/sync_update.ts index 888947b8b..0b4c5fb1d 100644 --- a/src/services/sync_update.ts +++ b/src/services/sync_update.ts @@ -75,13 +75,12 @@ function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instan } function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string, updateContext: UpdateContext) { - const localEC = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]); + const localEC = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]); + const localECIsOlderThanRemote = ( + localEC && localEC.utcDateChanged && remoteEC.utcDateChanged && + localEC.utcDateChanged <= remoteEC.utcDateChanged); - if (!localEC.utcDateChanged || !remoteEC.utcDateChanged) { - throw new Error("Missing date changed."); - } - - if (!localEC || localEC.utcDateChanged <= remoteEC.utcDateChanged) { + if (!localEC || localECIsOlderThanRemote) { if (remoteEC.isErased) { if (localEC?.isErased) { eraseEntity(remoteEC); // make sure it's erased anyway @@ -104,7 +103,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, } if (!localEC - || localEC.utcDateChanged < remoteEC.utcDateChanged + || localECIsOlderThanRemote || localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased ) { @@ -113,7 +112,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, return true; } else if ((localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased) - && localEC.utcDateChanged > remoteEC.utcDateChanged) { + && !localECIsOlderThanRemote) { // the change on our side is newer than on the other side, so the other side should update entityChangesService.putEntityChangeForOtherInstances(localEC); From 81a2b206ca1d60d0275b423b0893525c17653823 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Jul 2024 19:25:55 +0300 Subject: [PATCH 2/3] electron: Improve run & switch scripts --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c39403b79..d5d651086 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.63.6", + "version": "0.90.0-beta", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.63.6", + "version": "0.90.0-beta", "hasInstallScript": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 5b37b89e3..7e9c9fedf 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,11 @@ "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", "qstart-server": "npm run qswitch-server && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", "start-electron": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .", - "start-electron-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 electron --inspect=5858 .", + "start-electron-no-dir": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .", "qstart-electron": "npm run qswitch-electron && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .", "start-test-server": "npm run qswitch-server; rm -rf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 ts-node src/www.ts", "switch-server": "rm -rf ./node_modules/better-sqlite3 && npm install", - "switch-electron": "./node_modules/.bin/electron-rebuild", + "switch-electron": "electron-rebuild", "qswitch-server": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-server-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node", "qswitch-electron": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-desktop-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node", "build-backend-docs": "rm -rf ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js", From ea47668916fd8063bd69e64f3feab994432f6125 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Jul 2024 19:31:59 +0300 Subject: [PATCH 3/3] server: Clarify name --- src/services/sync_update.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/sync_update.ts b/src/services/sync_update.ts index 0b4c5fb1d..78a6f3f27 100644 --- a/src/services/sync_update.ts +++ b/src/services/sync_update.ts @@ -76,11 +76,11 @@ function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instan function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string, updateContext: UpdateContext) { const localEC = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]); - const localECIsOlderThanRemote = ( + const localECIsOlderOrSameAsRemote = ( localEC && localEC.utcDateChanged && remoteEC.utcDateChanged && localEC.utcDateChanged <= remoteEC.utcDateChanged); - if (!localEC || localECIsOlderThanRemote) { + if (!localEC || localECIsOlderOrSameAsRemote) { if (remoteEC.isErased) { if (localEC?.isErased) { eraseEntity(remoteEC); // make sure it's erased anyway @@ -103,7 +103,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, } if (!localEC - || localECIsOlderThanRemote + || localECIsOlderOrSameAsRemote || localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased ) { @@ -112,7 +112,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, return true; } else if ((localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased) - && !localECIsOlderThanRemote) { + && !localECIsOlderOrSameAsRemote) { // the change on our side is newer than on the other side, so the other side should update entityChangesService.putEntityChangeForOtherInstances(localEC);