Merge pull request #74 from joenunezb/fix/hanging-swipes-with-chapterCheckpoints

fix: Swipes hanging due race condition when handling promises in chapterCheckpoints
This commit is contained in:
Spicy Marinara
2025-12-27 08:42:04 +01:00
committed by GitHub
+9 -1
View File
@@ -14,6 +14,7 @@ let currentlyHiddenRange = null;
// Debounce restore to prevent loops // Debounce restore to prevent loops
let isRestoring = false; let isRestoring = false;
let restoreTimeout = null; let restoreTimeout = null;
let pendingResolve = null;
/** /**
* Gets the current chapter checkpoint message ID for the active chat * Gets the current chapter checkpoint message ID for the active chat
@@ -129,13 +130,19 @@ export async function restoreCheckpointOnLoad() {
return; return;
} }
// Clear any pending timeout // Clear any pending timeout and resolve the pending promise
if (restoreTimeout) { if (restoreTimeout) {
clearTimeout(restoreTimeout); clearTimeout(restoreTimeout);
restoreTimeout = null;
}
if (pendingResolve) {
pendingResolve();
pendingResolve = null;
} }
// Debounce: wait 100ms before actually restoring // Debounce: wait 100ms before actually restoring
return new Promise((resolve) => { return new Promise((resolve) => {
pendingResolve = resolve;
restoreTimeout = setTimeout(async () => { restoreTimeout = setTimeout(async () => {
isRestoring = true; isRestoring = true;
try { try {
@@ -174,6 +181,7 @@ export async function restoreCheckpointOnLoad() {
} }
} finally { } finally {
isRestoring = false; isRestoring = false;
pendingResolve = null;
resolve(); resolve();
} }
}, 100); }, 100);