diff --git a/src/app.js b/src/app.js index b25bf7dd2..322ebdd98 100644 --- a/src/app.js +++ b/src/app.js @@ -91,6 +91,7 @@ app.use((err, req, res, next) => { if (err && err.message && ( err.message.includes("Invalid package") || (err.message.includes("Router not found for request") && err.message.includes("node_modules")) + || (err.message.includes("Router not found for request") && err.message.includes(".js.map")) )) { // electron 6 outputs a lot of such errors which do not seem important } diff --git a/src/public/javascripts/services/ws.js b/src/public/javascripts/services/ws.js index 9e0517e81..c18027926 100644 --- a/src/public/javascripts/services/ws.js +++ b/src/public/javascripts/services/ws.js @@ -47,14 +47,15 @@ async function handleMessage(event) { } if (message.type === 'sync') { + const syncRows = message.data; lastPingTs = Date.now(); $outstandingSyncsCount.html(message.outstandingSyncs); - if (message.data.length > 0) { - console.debug(utils.now(), "Sync data: ", message.data); + if (syncRows.length > 0) { + console.debug(utils.now(), "Sync data: ", syncRows); - syncDataQueue.push(...message.data); + syncDataQueue.push(...syncRows); // first wait for all the preceding consumers to finish while (consumeQueuePromise) { @@ -69,6 +70,8 @@ async function handleMessage(event) { // finish and set to null to signal somebody else can pick it up consumeQueuePromise = null; } + + checkSyncIdListeners(); } else if (message.type === 'sync-hash-check-failed') { toastService.showError("Sync check failed!", 60000); @@ -94,6 +97,18 @@ function waitForSyncId(desiredSyncId) { }); } +function checkSyncIdListeners() { + syncIdReachedListeners + .filter(l => l.desiredSyncId <= lastSyncId) + .forEach(l => l.resolvePromise()); + + syncIdReachedListeners = syncIdReachedListeners + .filter(l => l.desiredSyncId > lastSyncId); + + syncIdReachedListeners.filter(l => Date.now() > l.start - 60000) + .forEach(l => console.log(`Waiting for syncId ${l.desiredSyncId} while current is ${lastSyncId} for ${Date.now() - l.start}`)); +} + async function consumeSyncData() { if (syncDataQueue.length >= 0) { const allSyncData = syncDataQueue; @@ -109,16 +124,6 @@ async function consumeSyncData() { lastSyncId = allSyncData[allSyncData.length - 1].id; } - - syncIdReachedListeners - .filter(l => l.desiredSyncId <= lastSyncId) - .forEach(l => l.resolvePromise()); - - syncIdReachedListeners = syncIdReachedListeners - .filter(l => l.desiredSyncId > lastSyncId); - - syncIdReachedListeners.filter(l => Date.now() > l.start - 60000) - .forEach(l => console.log(`Waiting for syncId ${l.desiredSyncId} for ${Date.now() - l.start}`)); } function connectWebSocket() { @@ -167,8 +172,7 @@ subscribeToMessages(message => { icon: "refresh" }); } - - if (message.type === 'sync-pull-finished') { + else if (message.type === 'sync-pull-finished') { toastService.closePersistent('sync'); } }); diff --git a/src/services/sync.js b/src/services/sync.js index 3dc8fe2da..5bd9aa2a5 100644 --- a/src/services/sync.js +++ b/src/services/sync.js @@ -147,7 +147,6 @@ async function pullSync(syncContext) { } stats.outstandingPulls = resp.maxSyncId - sync.id; - } await setLastSyncedPull(rows[rows.length - 1].sync.id); diff --git a/src/services/ws.js b/src/services/ws.js index 1ac0d8854..de7c92ae6 100644 --- a/src/services/ws.js +++ b/src/services/ws.js @@ -103,7 +103,7 @@ function syncPullInProgress() { sendMessageToAllClients({ type: 'sync-pull-in-progress' }); } -async function syncPullFinished() { +function syncPullFinished() { sendMessageToAllClients({ type: 'sync-pull-finished' }); }