From 80b4e6f3e903a9c5acd0c287b1db5f7f6aac84fa Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 1 Oct 2026 18:12:14 +0300 Subject: [PATCH] Normalize PM voice and video into the Android message model --- .../app/src/main/java/com/utun/chat/data/ChatRepository.kt | 7 ++++++- .../src/main/java/com/utun/chat/data/ConversationTarget.kt | 7 ++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ChatRepository.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ChatRepository.kt index 6d787e95..d1602ff9 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ChatRepository.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ChatRepository.kt @@ -582,9 +582,14 @@ class ChatRepository { text = obj.optString("data", ""), ts = obj.optLong("ts", 0), isOutgoing = outgoing, - contentType = if (file) "file" else "text/plain", + contentType = obj.optString("content_type", "text/plain"), filePath = path, fileSize = obj.optLong("media_size"), + waveform = obj.optString("waveform").map { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(it).coerceAtLeast(0) / 63f }, + voiceDurationMs = obj.optInt("duration_ms"), + videoDurationMs = obj.optInt("duration_ms"), + videoWidth = obj.optInt("width"), + videoHeight = obj.optInt("height"), downloadState = if (!file) "" else if (path.isNotEmpty()) "downloaded" else if (status == "expired") "error" else "downloading", deliveryStatus = delivery )) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConversationTarget.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConversationTarget.kt index d6a74ce5..3fa77105 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConversationTarget.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConversationTarget.kt @@ -1,8 +1,9 @@ package com.utun.chat.data /** Адресат фиксируется до записи, выбора файла или фоновой подготовки. */ -sealed class ConversationTarget(val id: String) { - class Channel(id: String) : ConversationTarget(id) - class Pm(id: String) : ConversationTarget(id) +sealed class ConversationTarget { + abstract val id: String + data class Channel(override val id: String) : ConversationTarget() + data class Pm(override val id: String) : ConversationTarget() val nativeId: String get() = if (this is Pm) "dm:$id" else id }