From aa9ca534681e9773d71a3a905a39e48d476fe4ae Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 29 Oct 2026 03:42:59 +0100 Subject: [PATCH] Clarify member update acknowledgement and suppress duplicate downloads --- .../main/java/com/utun/chat/ui/components/MessageBubble.kt | 5 +++-- .../main/java/com/utun/chat/ui/screens/MemberListScreen.kt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt index 95a1d80e..68ef9a69 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/components/MessageBubble.kt @@ -385,6 +385,7 @@ private fun FileBubble(message: Message, textColor: Color, onDownload: (Message) modifier = Modifier.clickable { when { state == "downloaded" -> onOpen(message) + state == "downloading" -> Unit else -> onDownload(message) } } @@ -583,7 +584,7 @@ private fun formatBitrate(bytes: Long, durMs: Int): String { } private fun formatDurationMs(ms: Int): String { - val secs = ms / 1000 + val secs = ms.coerceAtLeast(0) / 1000 return "%d:%02d".format(secs / 60, secs % 60) } @@ -892,7 +893,7 @@ fun InputBar( } private fun formatDuration(ms: Int): String { - val secs = ms / 1000 + val secs = ms.coerceAtLeast(0) / 1000 return "%d:%02d".format(secs / 60, secs % 60) } diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt index 42a6a0ef..0ece93c5 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/ui/screens/MemberListScreen.kt @@ -54,7 +54,7 @@ import com.utun.chat.viewmodel.ChatViewModel /** Список общего MemberRepository и карточка БД/live-состояния выбранного узла текущего канала. * Локальный nickname доступен без ключа владельца; изменение флагов и передача прав требуют isOwner. - * Команды ставятся в очередь ядра; итоговые свойства подтверждаются последующим снимком, не закрытием редактора. */ + * Nickname записывается в локальную БД, флаги/права направляются в ядро; итог подтверждает последующий снимок, не закрытие редактора. */ @OptIn(ExperimentalMaterial3Api::class) @Composable fun MemberListScreen(