From fb31742863e30544d0487edc6dccd1be5b801ad2 Mon Sep 17 00:00:00 2001 From: infi Date: Fri, 22 May 2026 17:18:04 +0200 Subject: [PATCH] fix: race condition on changelog fetch --- .../main/java/chat/stoat/api/settings/SyncedSettings.kt | 7 +++++++ .../main/java/chat/stoat/screens/chat/ChatRouterScreen.kt | 1 + 2 files changed, 8 insertions(+) diff --git a/app/src/main/java/chat/stoat/api/settings/SyncedSettings.kt b/app/src/main/java/chat/stoat/api/settings/SyncedSettings.kt index 950009ba..82c68872 100644 --- a/app/src/main/java/chat/stoat/api/settings/SyncedSettings.kt +++ b/app/src/main/java/chat/stoat/api/settings/SyncedSettings.kt @@ -10,6 +10,7 @@ import chat.stoat.core.model.schemas.NotificationSettings import chat.stoat.core.model.schemas.OrderingSettings import chat.stoat.core.model.schemas.ReleaseNotesSettings import chat.stoat.core.model.schemas._NotificationSettingsToParse +import kotlinx.coroutines.CompletableDeferred import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.jsonPrimitive import logcat.LogPriority @@ -24,6 +25,10 @@ import logcat.logcat */ object SyncedSettings { + private val _fetchCompleted = CompletableDeferred() + + suspend fun awaitFetched() = _fetchCompleted.await() + private val _ordering = mutableStateOf(OrderingSettings()) private val _android = mutableStateOf( AndroidSpecificSettings( @@ -93,6 +98,8 @@ object SyncedSettings { } } catch (e: Exception) { e.printStackTrace() + } finally { + _fetchCompleted.complete(Unit) } } diff --git a/app/src/main/java/chat/stoat/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/stoat/screens/chat/ChatRouterScreen.kt index 5727acd7..93f68688 100644 --- a/app/src/main/java/chat/stoat/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/stoat/screens/chat/ChatRouterScreen.kt @@ -276,6 +276,7 @@ class ChatRouterViewModel( return@launch } + SyncedSettings.awaitFetched() val lastSeenChangelog = SyncedSettings.releaseNotes.lastSeenId if (lastSeenChangelog == null || lastSeenChangelog != latestChangelog.id) { showChangelogScreenForId = latestChangelog.id