From 4f37b764d596a5df179381312caad4b979452111 Mon Sep 17 00:00:00 2001 From: Eric85710 Date: Thu, 25 Jun 2026 17:00:06 +0800 Subject: [PATCH] dm-166 --- .../Message_Component/Attachment_Bar.kt | 2 +- .../Detail/Message_Messaging_ViewModel.kt | 30 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Component/Attachment_Bar.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Component/Attachment_Bar.kt index e48e914..2bc9b7d 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Component/Attachment_Bar.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Component/Attachment_Bar.kt @@ -353,7 +353,7 @@ fun MessageAttachmentBar( // 下方選單 Icon 列 LazyRow( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(20.dp), + horizontalArrangement = Arrangement.spacedBy(12.dp), verticalAlignment = Alignment.CenterVertically ) { items(attachmentOptions) { option -> diff --git a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt index 86ddfad..d786ea0 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/ViewModel/Detail/Message_Messaging_ViewModel.kt @@ -230,20 +230,28 @@ class ChatViewModel @Inject constructor( fun uploadAttachment(roomId: String, fileUri: Uri) { viewModelScope.launch { _sendMessageState.value = SendMessageState.Loading - val result = repository.uploadAttachment(roomId, fileUri) - result.onSuccess { - // 💡 ✅ 修正點:移除參數括號,直接指派 object 狀態 - _sendMessageState.value = SendMessageState.Success + // 🎯 【偵錯步驟 1】檢查這個音訊 Uri 到底長怎樣、MimeType 是什麼 + try { + val contentResolver = application.contentResolver + val mimeType = contentResolver.getType(fileUri) - // 🌟 核心同步:因為上傳檔案成功後,後端可能已經將新訊息寫入。 - // 我們在背景主動觸發一次 refresh 默默拉回最新訊息寫入 Room, - // 這樣你的 MessageList 就能透過 Flow 秒速自動跳出剛剛上傳的圖片氣泡! - repository.refreshChatMessages(roomId) + // 🎯 【偵錯步驟 2】呼叫 Repository + val result = repository.uploadAttachment(roomId, fileUri) - }.onFailure { error -> - Log.e("ChatViewModel", "Upload attachment failed", error) - _sendMessageState.value = SendMessageState.Error(error.message ?: "上傳失敗") + result.onSuccess { + _sendMessageState.value = SendMessageState.Success + repository.refreshChatMessages(roomId) + }.onFailure { error -> + // 🎯 【偵錯步驟 3】這裡能抓到 Repository 傳回來的 API 錯誤 + Log.e("ChatDebug", "Repository 回報上傳失敗: ${error.message}", error) + _sendMessageState.value = SendMessageState.Error(error.message ?: "上傳失敗") + } + + } catch (e: Exception) { + // 🎯 【偵錯步驟 4】這裡能抓到本機讀取檔案就崩潰的錯誤(例如權限或 Stream 問題) + Log.e("ChatDebug", "ViewModel 處理檔案時發生異常: ${e.message}", e) + _sendMessageState.value = SendMessageState.Error(e.message ?: "讀取檔案失敗") } } }