feat: Enhance logging in scrollToMessage function for better debugging of message IDs and lengths
This commit is contained in:
@@ -445,8 +445,15 @@ fun ChatDetailScreen(
|
||||
|
||||
// 🔥 Функция для скролла к сообщению с подсветкой
|
||||
val scrollToMessage: (String) -> Unit = { messageId ->
|
||||
android.util.Log.d("ChatDetail", "🔍 scrollToMessage called for: $messageId")
|
||||
android.util.Log.d("ChatDetail", "🔍 scrollToMessage called for: '$messageId'")
|
||||
android.util.Log.d("ChatDetail", " - messageId length: ${messageId.length}")
|
||||
android.util.Log.d("ChatDetail", " - Total messages: ${messagesWithDates.size}")
|
||||
|
||||
// Логируем все ID сообщений для отладки
|
||||
messagesWithDates.forEachIndexed { index, pair ->
|
||||
android.util.Log.d("ChatDetail", " - [$index] id='${pair.first.id}', text='${pair.first.text.take(20)}...'")
|
||||
}
|
||||
|
||||
scope.launch {
|
||||
// 🔥 Сбрасываем текущую подсветку перед новым скроллом
|
||||
highlightedMessageId = null
|
||||
|
||||
@@ -884,24 +884,45 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) {
|
||||
val replyMessage = messagesArray.getJSONObject(0)
|
||||
val replyPublicKey = replyMessage.optString("publicKey", "")
|
||||
val replyText = replyMessage.optString("message", "")
|
||||
val replyMessageId = replyMessage.optString("message_id", "")
|
||||
val replyMessageIdFromJson = replyMessage.optString("message_id", "")
|
||||
val replyTimestamp = replyMessage.optLong("timestamp", 0L)
|
||||
|
||||
android.util.Log.d("ReplyDebug", " - replyMessageId: $replyMessageId")
|
||||
android.util.Log.d("ReplyDebug", " - replyMessageId from JSON: $replyMessageIdFromJson")
|
||||
android.util.Log.d("ReplyDebug", " - replyPublicKey: ${replyPublicKey.take(20)}...")
|
||||
android.util.Log.d("ReplyDebug", " - replyText: ${replyText.take(50)}")
|
||||
android.util.Log.d("ReplyDebug", " - myPublicKey: ${myPublicKey?.take(20)}...")
|
||||
android.util.Log.d("ReplyDebug", " - replyTimestamp: $replyTimestamp")
|
||||
|
||||
// 🔥 ВАЖНО: message_id из JSON может не совпадать с messageId в Android БД!
|
||||
// Пытаемся найти реальный messageId в текущих сообщениях по тексту и timestamp
|
||||
val account = myPublicKey ?: return null
|
||||
val dialogKey = getDialogKey(account, opponentKey ?: "")
|
||||
val realMessageId = try {
|
||||
// Ищем сообщение в БД по публичному ключу, тексту и timestamp (с допуском ±5 секунд)
|
||||
messageDao.findMessageByContent(
|
||||
account = account,
|
||||
dialogKey = dialogKey,
|
||||
fromPublicKey = replyPublicKey,
|
||||
timestampFrom = replyTimestamp - 5000,
|
||||
timestampTo = replyTimestamp + 5000
|
||||
)?.messageId ?: replyMessageIdFromJson
|
||||
} catch (e: Exception) {
|
||||
android.util.Log.w("ReplyDebug", " - ⚠️ Could not find real messageId, using JSON id")
|
||||
replyMessageIdFromJson
|
||||
}
|
||||
|
||||
android.util.Log.d("ReplyDebug", " - Real messageId: $realMessageId")
|
||||
|
||||
// Определяем, кто автор цитируемого сообщения
|
||||
val isReplyFromMe = replyPublicKey == myPublicKey
|
||||
android.util.Log.d("ReplyDebug", " - isReplyFromMe: $isReplyFromMe")
|
||||
|
||||
val result = ReplyData(
|
||||
messageId = replyMessageId,
|
||||
messageId = realMessageId,
|
||||
senderName = if (isReplyFromMe) "You" else opponentTitle.ifEmpty { opponentUsername.ifEmpty { "User" } },
|
||||
text = replyText,
|
||||
isFromMe = isReplyFromMe
|
||||
)
|
||||
android.util.Log.d("ReplyDebug", " - ✅ Created ReplyData: senderName=${result.senderName}, text=${result.text.take(30)}")
|
||||
android.util.Log.d("ReplyDebug", " - ✅ Created ReplyData: senderName=${result.senderName}, messageId=${result.messageId}")
|
||||
android.util.Log.d("ReplyDebug", "✅ [DB LOAD] Reply data parsed successfully from DB - RETURNING")
|
||||
return result
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user