From ef6a5673bdf01f43cdccd9636af71c6a9b015ed3 Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 29 Oct 2026 14:02:25 +0100 Subject: [PATCH] Preserve member connection state when its refresh fails --- .../app/src/main/java/com/utun/chat/data/ConfigProvider.kt | 4 ++-- .../src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt index ff1cb8099..b49f62238 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt @@ -40,8 +40,8 @@ data class RadioCompressorSettings(val enabled: Boolean = true, val maxGainDb: I * Поставщик Application: getString/getInt остаются синхронным API для JNI. * Файловые операции возвращают Deferred общей очереди; await не блокирует UI и не передаёт ожидающему владение запросом. * При формировании конфига настройки и keys.conf читаются один раз; чтение/запись utun.cfg сериализованы. - * UI принимает изменения через changes: сначала DataStore commit, затем runtime. Flow snapshots сохраняют - * последнее подтверждённое значение при ошибке чтения; Bluetooth-флаги меняются атомарно по отдельному биту. + * UI принимает изменения через changes: сначала DataStore commit, затем runtime. Наблюдение через changes + * сохраняет подтверждённый снимок UI при ошибке чтения; Bluetooth-флаги меняются атомарно по отдельному биту. */ class ConfigProvider(private val context: Context) { val changes = SettingsOperations() diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt index 335f362fa..4a2382d81 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/viewmodel/ChatViewModel.kt @@ -1521,7 +1521,7 @@ class ChatViewModel : ViewModel() { val r = repo ?: return val generation = membersRepository.generation viewModelScope.launch { - val links = withContext(Dispatchers.IO) { r.getMemberLinks(nodeId) } + val links = withContext(Dispatchers.IO) { r.getMemberLinks(nodeId) } ?: return@launch if (_selectedMember.value?.nodeId == nodeId && generation == membersRepository.generation) _memberLinks.value = links } }