From 9cd37ea4d784ab9ad004909b5f4dad42ccee8383 Mon Sep 17 00:00:00 2001 From: Zixuan James Li Date: Thu, 8 Aug 2024 18:20:05 -0400 Subject: [PATCH] store: Show error message when replacing event queue Fixes: #555 Signed-off-by: Zixuan James Li --- assets/l10n/app_en.arb | 5 +++++ lib/model/store.dart | 1 + test/model/store_test.dart | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index 5e1db65e3b..341ba6ab37 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -172,6 +172,11 @@ "error": {"type": "String", "example": "Invalid format"} } }, + "errorReconnectingToServer": "Reconnecting to {serverUrl}…", + "@errorReconnectingToServer": { + "serverUrl": {"type": "String", "example": "http://example.com/"}, + "description": "Message when reconnecting to the server." + }, "errorSharingFailed": "Sharing failed", "@errorSharingFailed": { "description": "Error message when sharing a message failed." diff --git a/lib/model/store.dart b/lib/model/store.dart index a0c2c7f623..50f456220e 100644 --- a/lib/model/store.dart +++ b/lib/model/store.dart @@ -794,6 +794,7 @@ class UpdateMachine { switch (e) { case ZulipApiException(code: 'BAD_EVENT_QUEUE_ID'): assert(debugLog('Lost event queue for $store. Replacing…')); + reportErrorToUserBriefly(localizations.errorReconnectingToServer(serverUrl)); await store._globalStore._reloadPerAccount(store.accountId); dispose(); debugLog('… Event queue replaced.'); diff --git a/test/model/store_test.dart b/test/model/store_test.dart index 80fab52c32..e9eb041504 100644 --- a/test/model/store_test.dart +++ b/test/model/store_test.dart @@ -407,6 +407,9 @@ void main() { } test('handles expired queue', () => awaitFakeAsync((async) async { + reportErrorToUserBriefly = logAndReportErrorToUserBriefly; + addTearDown(() => reportErrorToUserBriefly = defaultReportErrorToUserBriefly); + await prepareStore(); updateMachine.debugPauseLoop(); updateMachine.poll(); @@ -420,7 +423,10 @@ void main() { }); updateMachine.debugAdvanceLoop(); async.flushMicrotasks(); + check(lastReportedError).isNull(); await Future.delayed(Duration.zero); + check(takeLastReportedError()).isNotNull() + .contains('Reconnecting to ${eg.realmUrl.origin}…'); check(store).isLoading.isTrue(); // The global store has a new store.