mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
reload frontend when consistency is fixed
This commit is contained in:
parent
3f2ee4aefd
commit
9b9be5d155
@ -50,6 +50,12 @@ function load() {
|
|||||||
log.info(`Becca (note cache) load took ${Date.now() - start}ms`);
|
log.info(`Becca (note cache) load took ${Date.now() - start}ms`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reload() {
|
||||||
|
load();
|
||||||
|
|
||||||
|
require('../services/ws').reloadFrontend();
|
||||||
|
}
|
||||||
|
|
||||||
function postProcessEntityUpdate(entityName, entity) {
|
function postProcessEntityUpdate(entityName, entity) {
|
||||||
if (entityName === 'branches') {
|
if (entityName === 'branches') {
|
||||||
branchUpdated(entity);
|
branchUpdated(entity);
|
||||||
@ -221,5 +227,6 @@ eventService.subscribe(eventService.LEAVE_PROTECTED_SESSION, load);
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
load,
|
load,
|
||||||
|
reload,
|
||||||
beccaLoaded
|
beccaLoaded
|
||||||
};
|
};
|
||||||
|
@ -47,15 +47,7 @@ function logRows(entityChanges) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleMessage(event) {
|
async function executeFrontendUpdate(entityChanges) {
|
||||||
const message = JSON.parse(event.data);
|
|
||||||
|
|
||||||
for (const messageHandler of messageHandlers) {
|
|
||||||
messageHandler(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.type === 'frontend-update') {
|
|
||||||
let {entityChanges} = message.data;
|
|
||||||
lastPingTs = Date.now();
|
lastPingTs = Date.now();
|
||||||
|
|
||||||
if (entityChanges.length > 0) {
|
if (entityChanges.length > 0) {
|
||||||
@ -84,13 +76,26 @@ async function handleMessage(event) {
|
|||||||
consumeQueuePromise = consumeFrontendUpdateData();
|
consumeQueuePromise = consumeFrontendUpdateData();
|
||||||
|
|
||||||
await consumeQueuePromise;
|
await consumeQueuePromise;
|
||||||
}
|
} finally {
|
||||||
finally {
|
|
||||||
// finish and set to null to signal somebody else can pick it up
|
// finish and set to null to signal somebody else can pick it up
|
||||||
consumeQueuePromise = null;
|
consumeQueuePromise = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function handleMessage(event) {
|
||||||
|
const message = JSON.parse(event.data);
|
||||||
|
|
||||||
|
for (const messageHandler of messageHandlers) {
|
||||||
|
messageHandler(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message.type === 'reload-frontend') {
|
||||||
|
utils.reloadFrontendApp();
|
||||||
|
}
|
||||||
|
else if (message.type === 'frontend-update') {
|
||||||
|
await executeFrontendUpdate(message.data.entityChanges);
|
||||||
|
}
|
||||||
else if (message.type === 'sync-hash-check-failed') {
|
else if (message.type === 'sync-hash-check-failed') {
|
||||||
toastService.showError("Sync check failed!", 60000);
|
toastService.showError("Sync check failed!", 60000);
|
||||||
}
|
}
|
||||||
@ -211,7 +216,6 @@ setTimeout(() => {
|
|||||||
export default {
|
export default {
|
||||||
logError,
|
logError,
|
||||||
subscribeToMessages,
|
subscribeToMessages,
|
||||||
waitForEntityChangeId,
|
|
||||||
waitForMaxKnownEntityChangeId,
|
waitForMaxKnownEntityChangeId,
|
||||||
getMaxKnownEntityChangeSyncId: () => lastAcceptedEntityChangeSyncId
|
getMaxKnownEntityChangeSyncId: () => lastAcceptedEntityChangeSyncId
|
||||||
};
|
};
|
||||||
|
@ -288,14 +288,17 @@ class ConsistencyChecks {
|
|||||||
WHERE note_contents.noteId IS NULL`,
|
WHERE note_contents.noteId IS NULL`,
|
||||||
({noteId, isProtected, type, mime}) => {
|
({noteId, isProtected, type, mime}) => {
|
||||||
if (this.autoFix) {
|
if (this.autoFix) {
|
||||||
const utcDateModified = dateUtils.utcNowDateTime();
|
// it might be possible that the note_content is not available only because of the interrupted
|
||||||
|
// sync and it will come later. It's therefore important to guarantee that this artifical
|
||||||
|
// record won't overwrite the real one coming from the sync.
|
||||||
|
const fakeDate = "2000-01-01 00:00:00Z";
|
||||||
|
|
||||||
// manually creating row since this can also affect deleted notes
|
// manually creating row since this can also affect deleted notes
|
||||||
sql.upsert("note_contents", "noteId", {
|
sql.upsert("note_contents", "noteId", {
|
||||||
noteId: noteId,
|
noteId: noteId,
|
||||||
content: getBlankContent(isProtected, type, mime),
|
content: getBlankContent(isProtected, type, mime),
|
||||||
utcDateModified: utcDateModified,
|
utcDateModified: fakeDate,
|
||||||
dateModified: dateUtils.localNowDateTime()
|
dateModified: fakeDate
|
||||||
});
|
});
|
||||||
|
|
||||||
const hash = utils.hash(utils.randomString(10));
|
const hash = utils.hash(utils.randomString(10));
|
||||||
@ -305,7 +308,7 @@ class ConsistencyChecks {
|
|||||||
entityId: noteId,
|
entityId: noteId,
|
||||||
hash: hash,
|
hash: hash,
|
||||||
isErased: false,
|
isErased: false,
|
||||||
utcDateChanged: utcDateModified,
|
utcDateChanged: fakeDate,
|
||||||
isSynced: true
|
isSynced: true
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -358,7 +361,8 @@ class ConsistencyChecks {
|
|||||||
AND branches.isDeleted = 0`,
|
AND branches.isDeleted = 0`,
|
||||||
({parentNoteId}) => {
|
({parentNoteId}) => {
|
||||||
if (this.autoFix) {
|
if (this.autoFix) {
|
||||||
const branchIds = sql.getColumn(`SELECT branchId
|
const branchIds = sql.getColumn(`
|
||||||
|
SELECT branchId
|
||||||
FROM branches
|
FROM branches
|
||||||
WHERE isDeleted = 0
|
WHERE isDeleted = 0
|
||||||
AND parentNoteId = ?`, [parentNoteId]);
|
AND parentNoteId = ?`, [parentNoteId]);
|
||||||
@ -584,7 +588,7 @@ class ConsistencyChecks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.fixedIssues) {
|
if (this.fixedIssues) {
|
||||||
require("../becca/becca_loader").load();
|
require("../becca/becca_loader").reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
return !this.unrecoveredConsistencyErrors;
|
return !this.unrecoveredConsistencyErrors;
|
||||||
|
@ -178,6 +178,10 @@ function syncFailed() {
|
|||||||
sendMessageToAllClients({ type: 'sync-failed', lastSyncedPush });
|
sendMessageToAllClients({ type: 'sync-failed', lastSyncedPush });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reloadFrontend() {
|
||||||
|
sendMessageToAllClients({ type: 'reload-frontend' });
|
||||||
|
}
|
||||||
|
|
||||||
function setLastSyncedPush(entityChangeId) {
|
function setLastSyncedPush(entityChangeId) {
|
||||||
lastSyncedPush = entityChangeId;
|
lastSyncedPush = entityChangeId;
|
||||||
}
|
}
|
||||||
@ -190,5 +194,6 @@ module.exports = {
|
|||||||
syncFinished,
|
syncFinished,
|
||||||
syncFailed,
|
syncFailed,
|
||||||
sendTransactionEntityChangesToAllClients,
|
sendTransactionEntityChangesToAllClients,
|
||||||
setLastSyncedPush
|
setLastSyncedPush,
|
||||||
|
reloadFrontend
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user