From ab0ec1454f96619bcef74db0207a0b36aaa0dff4 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Sun, 29 Mar 2026 13:28:33 +0200 Subject: [PATCH] Avoid UI hang --- .../reader/KOReaderSyncActivity.cpp | 37 ++++++++++--------- src/activities/reader/KOReaderSyncActivity.h | 2 + 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/activities/reader/KOReaderSyncActivity.cpp b/src/activities/reader/KOReaderSyncActivity.cpp index 46944278..0b8438d4 100644 --- a/src/activities/reader/KOReaderSyncActivity.cpp +++ b/src/activities/reader/KOReaderSyncActivity.cpp @@ -235,6 +235,18 @@ void KOReaderSyncActivity::onExit() { wifiOff(); } +void KOReaderSyncActivity::closeCancelled() { + if (closeRequested) { + return; + } + + closeRequested = true; + ActivityResult result; + result.isCancelled = true; + setResult(std::move(result)); + finish(); +} + void KOReaderSyncActivity::render(RenderLock&&) { const auto pageWidth = renderer.getScreenWidth(); @@ -351,18 +363,13 @@ void KOReaderSyncActivity::render(RenderLock&&) { void KOReaderSyncActivity::loop() { if (state == NO_CREDENTIALS || state == SYNC_FAILED || state == UPLOAD_COMPLETE) { - if (state == UPLOAD_COMPLETE && millis() - uploadCompleteTime >= 3000) { - ActivityResult result; - result.isCancelled = true; - setResult(std::move(result)); - finish(); + if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + closeCancelled(); return; } - if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { - ActivityResult result; - result.isCancelled = true; - setResult(std::move(result)); - finish(); + + if (state == UPLOAD_COMPLETE && millis() - uploadCompleteTime >= 3000) { + closeCancelled(); } return; } @@ -392,10 +399,7 @@ void KOReaderSyncActivity::loop() { } if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { - ActivityResult result; - result.isCancelled = true; - setResult(std::move(result)); - finish(); + closeCancelled(); } return; } @@ -414,10 +418,7 @@ void KOReaderSyncActivity::loop() { } if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { - ActivityResult result; - result.isCancelled = true; - setResult(std::move(result)); - finish(); + closeCancelled(); } return; } diff --git a/src/activities/reader/KOReaderSyncActivity.h b/src/activities/reader/KOReaderSyncActivity.h index d0276444..fd02d861 100644 --- a/src/activities/reader/KOReaderSyncActivity.h +++ b/src/activities/reader/KOReaderSyncActivity.h @@ -80,8 +80,10 @@ class KOReaderSyncActivity final : public Activity { // Timestamp when UPLOAD_COMPLETE state was entered (for auto-close) unsigned long uploadCompleteTime = 0; + bool closeRequested = false; void onWifiSelectionComplete(bool success); void performSync(); void performUpload(); + void closeCancelled(); };