From 47fb10d4e4d698ec23d7ba08576c94292b58a700 Mon Sep 17 00:00:00 2001 From: eric Date: Wed, 8 Jul 2026 14:30:25 +0800 Subject: [PATCH] dm-padding message-9 --- .idea/appInsightsSettings.xml | 26 +++++++++++++++++++ .idea/studiobot.xml | 6 +++++ .../login_v3/data/api/Main_API_Service.kt | 4 +-- .../example/login_v3/data/di/NetworkModule.kt | 9 +++++++ .../data/repository/dm/DM_Basic_Repository.kt | 8 ++++-- .../Message/UI/Detail/Message_Messaging.kt | 6 +++++ .../Detail/Message_Messaging_ViewModel.kt | 19 +++++++++++--- 7 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 .idea/appInsightsSettings.xml create mode 100644 .idea/studiobot.xml diff --git a/.idea/appInsightsSettings.xml b/.idea/appInsightsSettings.xml new file mode 100644 index 0000000..371f2e2 --- /dev/null +++ b/.idea/appInsightsSettings.xml @@ -0,0 +1,26 @@ + + + + + + \ No newline at end of file diff --git a/.idea/studiobot.xml b/.idea/studiobot.xml new file mode 100644 index 0000000..539e3b8 --- /dev/null +++ b/.idea/studiobot.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt b/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt index 2314c36..ad5cb82 100644 --- a/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt +++ b/app/src/main/java/com/example/login_v3/data/api/Main_API_Service.kt @@ -108,8 +108,8 @@ interface TecnologiaApi { @GET("api/dm/{room_id}/messages") suspend fun getChatMessages( @Path("room_id") roomId: String, - @Query("cursor") cursor: String? = null, // 🎯 新增這個:載入歷史紀錄時帶入上一次的 nextCursor - @Query("limit") limit: Int? = null // 💡 選填:如果後端有支援控制數量的話可以加上 + @Query("before_id") cursor: String? = null, // 🎯 修正為與後端文件一致的 before_id + @Query("limit") limit: Int? = null ): Response // 標記聊天室已讀 diff --git a/app/src/main/java/com/example/login_v3/data/di/NetworkModule.kt b/app/src/main/java/com/example/login_v3/data/di/NetworkModule.kt index b8b7c9c..59911ab 100644 --- a/app/src/main/java/com/example/login_v3/data/di/NetworkModule.kt +++ b/app/src/main/java/com/example/login_v3/data/di/NetworkModule.kt @@ -73,9 +73,18 @@ object NetworkModule { tokenInterceptor: Interceptor, tokenAuthenticator: TokenAuthenticator // 👈 注入前面實作好的 Authenticator ): OkHttpClient { + val loggingInterceptor = Interceptor { chain -> + val request = chain.request() + android.util.Log.d("ChatDebug", "🚀 [Network] Request: ${request.method} ${request.url}") + val response = chain.proceed(request) + android.util.Log.d("ChatDebug", "📦 [Network] Response: ${response.code} for ${request.url}") + response + } + return OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) + .addInterceptor(loggingInterceptor) // 負責 Log 網路請求 .addInterceptor(tokenInterceptor) // 負責幫一般請求加上 Token .authenticator(tokenAuthenticator) // 負責在 401 時自動刷新 Token .build() diff --git a/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt b/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt index 5915571..fa85b84 100644 --- a/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt +++ b/app/src/main/java/com/example/login_v3/data/repository/dm/DM_Basic_Repository.kt @@ -180,13 +180,17 @@ class ChatRoomsRepository @Inject constructor( cursor: String? = null, limit: Int? = null ): Result { + Log.d("ChatDebug", "📡 [Repository] refreshChatMessages 觸發 | roomId: $roomId | cursor: $cursor | limit: $limit") return try { - // 1. 把 cursor 傳給 API - val response = api.getChatMessages(roomId, cursor = cursor) + // 1. 把 cursor 與 limit 傳給 API + val response = api.getChatMessages(roomId, cursor = cursor, limit = limit) if (response.isSuccessful) { val body = response.body() if (body != null) { + val firstId = body.messages.firstOrNull()?.id + val lastId = body.messages.lastOrNull()?.id + Log.d("ChatDebug", "✅ [Repository] API 成功 | 收到 ${body.messages.size} 條訊息 | 首條ID: $firstId | 末條ID: $lastId | nextCursor: ${body.nextCursor}") // 2. 轉換成 Entity 列表 val entities = body.messages.map { networkMessage -> diff --git a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt index 16dd6b1..5f3b4e6 100644 --- a/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt +++ b/app/src/main/java/com/example/login_v3/home/Message/UI/Detail/Message_Messaging.kt @@ -165,6 +165,12 @@ fun MessageMessaging( ) { uri: Uri? -> uri?.let { viewModel.uploadAttachment(roomId, it) } } + + //進入時重整 + LaunchedEffect(roomId) { + viewModel.loadMessages(roomId) + } + //bottom bar on and off DisposableEffect(Unit) { bottomBarViewModel.setVisible(false) 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 15b8e53..93d14ac 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 @@ -190,10 +190,21 @@ class ChatViewModel @Inject constructor( // 💡 核心新增:往上滑載入更多老訊息 (補上 limit) // ===================================================================== fun loadMoreMessages(roomId: String) { - if (isLoadingMore || !hasMore || nextCursor.isNullOrBlank()) return + if (isLoadingMore) { + Log.d("ChatDebug", "⚠️ [ViewModel] loadMoreMessages 略過: 正在加載中...") + return + } + if (!hasMore) { + Log.d("ChatDebug", "⚠️ [ViewModel] loadMoreMessages 略過: 沒有更多訊息了 (hasMore=false)") + return + } + if (nextCursor.isNullOrBlank()) { + Log.d("ChatDebug", "⚠️ [ViewModel] loadMoreMessages 略過: nextCursor 為空") + return + } isLoadingMore = true - Log.d("ChatViewModel", "觸發載入更多,當前 cursor: $nextCursor") + Log.d("ChatDebug", "🚀 [ViewModel] 開始載入更多 | 當前 cursor: $nextCursor | roomId: $roomId") viewModelScope.launch { // 🎯 補上 limit = 20 傳遞給 Repository 與 API @@ -201,10 +212,10 @@ class ChatViewModel @Inject constructor( .onSuccess { response -> this@ChatViewModel.nextCursor = response.nextCursor this@ChatViewModel.hasMore = response.hasMore - Log.d("ChatViewModel", "載入更多成功,新 cursor: $nextCursor, hasMore: $hasMore") + Log.d("ChatDebug", "✅ [ViewModel] 載入更多成功 | 新 cursor: $nextCursor | hasMore: $hasMore") } .onFailure { error -> - Log.e("ChatViewModel", "載入更多老訊息失敗", error) + Log.e("ChatDebug", "❌ [ViewModel] 載入更多失敗", error) } isLoadingMore = false