diff --git a/src/activities/network/CalibreConnectActivity.cpp b/src/activities/network/CalibreConnectActivity.cpp index 69014cf4..fbf9dd04 100644 --- a/src/activities/network/CalibreConnectActivity.cpp +++ b/src/activities/network/CalibreConnectActivity.cpp @@ -28,6 +28,7 @@ void CalibreConnectActivity::onEnter() { currentUploadName.clear(); lastCompleteName.clear(); lastCompleteAt = 0; + lastProcessedCompleteAt = 0; exitRequested = false; if (WiFi.status() != WL_CONNECTED) { @@ -147,14 +148,18 @@ void CalibreConnectActivity::loop() { currentUploadName.clear(); changed = true; } - if (status.lastCompleteAt != 0 && status.lastCompleteAt != lastCompleteAt) { + // Only update lastCompleteAt if the server has a NEW value (not one we already processed) + // This prevents restoring an old value after the 6s timeout clears it + if (status.lastCompleteAt != 0 && status.lastCompleteAt != lastProcessedCompleteAt) { lastCompleteAt = status.lastCompleteAt; lastCompleteName = status.lastCompleteName; + lastProcessedCompleteAt = status.lastCompleteAt; // Mark this value as processed changed = true; } if (lastCompleteAt > 0 && (millis() - lastCompleteAt) >= 6000) { lastCompleteAt = 0; lastCompleteName.clear(); + // Note: we DON'T reset lastProcessedCompleteAt here, so we won't re-process the old server value changed = true; } if (changed) { diff --git a/src/activities/network/CalibreConnectActivity.h b/src/activities/network/CalibreConnectActivity.h index d1d2bfcf..451d3bc9 100644 --- a/src/activities/network/CalibreConnectActivity.h +++ b/src/activities/network/CalibreConnectActivity.h @@ -26,6 +26,7 @@ class CalibreConnectActivity final : public ActivityWithSubactivity { std::string currentUploadName; std::string lastCompleteName; unsigned long lastCompleteAt = 0; + unsigned long lastProcessedCompleteAt = 0; // Track which server value we've already processed bool exitRequested = false; void renderServerRunning() const;