dm-167
This commit is contained in:
parent
4f37b764d5
commit
3c7f4ddb9b
1 changed files with 23 additions and 4 deletions
|
|
@ -704,14 +704,23 @@ fun MessageRow(
|
||||||
val isLegacyAudio = audioExtensions.any { contentLowerCase.contains(it) }
|
val isLegacyAudio = audioExtensions.any { contentLowerCase.contains(it) }
|
||||||
val isAudio = isTypeAudio || isAttachmentAudio || isLegacyAudio
|
val isAudio = isTypeAudio || isAttachmentAudio || isLegacyAudio
|
||||||
|
|
||||||
|
// 🌟 新增:檔案判斷 (包含 zip、rar、pdf、doc 等常規檔案)
|
||||||
|
val isAttachmentFile = message.attachment?.mimeType?.startsWith("application/") == true ||
|
||||||
|
message.attachment?.mimeType == "text/plain"
|
||||||
|
val fileExtensions = listOf(".zip", ".rar", ".7z", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt")
|
||||||
|
val isLegacyFile = fileExtensions.any { contentLowerCase.contains(it) }
|
||||||
|
val isFile = isAttachmentFile || isLegacyFile
|
||||||
|
|
||||||
val callLog = message.callLogInfo
|
val callLog = message.callLogInfo
|
||||||
|
|
||||||
// 🌟 3. 計算媒體 URL (將原本的圖片 URL 邏輯通用化至媒體檔案)
|
// 計算媒體 URL
|
||||||
val finalMediaUrl = remember(message, isImage, isVideo, isAudio) {
|
val finalMediaUrl = remember(message, isImage, isVideo, isAudio, isFile) {
|
||||||
val rawPath = when {
|
val rawPath = when {
|
||||||
isAttachmentImage && !message.attachment?.filename.isNullOrBlank() -> message.attachment!!.filename
|
isAttachmentImage && !message.attachment?.filename.isNullOrBlank() -> message.attachment!!.filename
|
||||||
isAttachmentVideo && !message.attachment?.filename.isNullOrBlank() -> message.attachment!!.filename
|
isAttachmentVideo && !message.attachment?.filename.isNullOrBlank() -> message.attachment!!.filename
|
||||||
isAttachmentAudio && !message.attachment?.filename.isNullOrBlank() -> message.attachment!!.filename // 2. 🌟 新增音訊附件路徑抓取
|
isAttachmentAudio && !message.attachment?.filename.isNullOrBlank() -> message.attachment!!.filename
|
||||||
|
// 🌟 新增:檔案附件路徑抓取
|
||||||
|
isFile && message.attachment?.filename?.isNotBlank() == true -> message.attachment!!.filename
|
||||||
else -> message.content ?: ""
|
else -> message.content ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -721,7 +730,6 @@ fun MessageRow(
|
||||||
rawPath.isBlank() -> ""
|
rawPath.isBlank() -> ""
|
||||||
rawPath.startsWith("http") -> rawPath
|
rawPath.startsWith("http") -> rawPath
|
||||||
else -> {
|
else -> {
|
||||||
// 移除可能重複的前綴,確保路徑乾淨
|
|
||||||
val cleanPath = rawPath.removePrefix("/").removePrefix("uploads/")
|
val cleanPath = rawPath.removePrefix("/").removePrefix("uploads/")
|
||||||
if (cleanPath.startsWith("attachment/")) {
|
if (cleanPath.startsWith("attachment/")) {
|
||||||
"$baseUrl/uploads/$cleanPath"
|
"$baseUrl/uploads/$cleanPath"
|
||||||
|
|
@ -732,6 +740,17 @@ fun MessageRow(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 取得檔案的顯示名稱(如果是 zip 這種長檔名,可以從 URL 或 attachment 抓取)
|
||||||
|
val displayFileName = remember(message, finalMediaUrl) {
|
||||||
|
if (!message.attachment?.filename.isNullOrBlank()) {
|
||||||
|
// 如果後端有給原始檔名(例如:資料.zip),優先顯示
|
||||||
|
message.attachment.filename.substringAfterLast("/")
|
||||||
|
} else {
|
||||||
|
// 如果只有 URL,抓出最後一段當作檔名
|
||||||
|
finalMediaUrl.substringAfterLast("/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val finalBubbleColor = remember(message.status, isHighlight, callLog) {
|
val finalBubbleColor = remember(message.status, isHighlight, callLog) {
|
||||||
val baseColor = when {
|
val baseColor = when {
|
||||||
callLog != null -> {
|
callLog != null -> {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue