diff --git a/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageBubble.kt b/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageBubble.kt index 3359a57..d948ae8 100644 --- a/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageBubble.kt +++ b/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageBubble.kt @@ -1,6 +1,7 @@ package top.yeij.cyrene.ui.chat import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -51,6 +52,7 @@ fun MessageBubble(message: HistoryMessageDto) { .fillMaxWidth() .padding(horizontal = 14.dp), horizontalAlignment = if (isUser) Alignment.End else Alignment.Start, + verticalArrangement = Arrangement.spacedBy(6.dp), ) { // 来源角标放在消息组顶部,明确标注下面这一组气泡来自哪里 if (source != null) { diff --git a/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageSource.kt b/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageSource.kt index 1a391e7..d8d902a 100644 --- a/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageSource.kt +++ b/app/src/main/kotlin/top/yeij/cyrene/ui/chat/MessageSource.kt @@ -13,24 +13,30 @@ private val platformLabels = mapOf( /** * 来源角标(S1.3):每条消息默认显示来源。 - * 优先用 `deviceId` 区分具体端,再回落到 `platform`;两者都没有则返回 null(不显示)。 + * - 主人发的 → 「来自 X」(从哪一端发出) + * - 昔涟发的 → 「发送至 X」(回到哪一端) + * 优先用 `deviceId` 区分具体端,再回落到 `platform`;两者都没有则不显示。 */ fun messageSourceLabel(message: HistoryMessageDto): String? { + val name = sourceName(message) ?: return null + val verb = if (message.role == "assistant") "发送至" else "来自" + return "$verb $name" +} + +private fun sourceName(message: HistoryMessageDto): String? { val deviceId = message.deviceId if (!deviceId.isNullOrBlank()) { - if (deviceId.startsWith("voiceassist")) return "来自安卓" + if (deviceId.startsWith("voiceassist")) return "安卓" if (deviceId.startsWith("web:")) { val browser = deviceId.removePrefix("web:").substringBefore(':') - return "来自 Web($browser)" + return "Web($browser)" } // IM 端 deviceId 形如 <平台名>:<配置id>:,只取平台名做友好显示 - platformLabels[deviceId.substringBefore(':')]?.let { return "来自 $it" } - return "来自 $deviceId" + platformLabels[deviceId.substringBefore(':')]?.let { return it } + return deviceId } val platform = message.platform - if (!platform.isNullOrBlank()) { - return "来自 ${platformLabels[platform] ?: platform}" - } + if (!platform.isNullOrBlank()) return platformLabels[platform] ?: platform return null }