feat: Enhance message status tracking and logging in MessageRepository and ChatsListViewModel for improved clarity and debugging
This commit is contained in:
@@ -1590,12 +1590,13 @@ fun DialogItemContent(
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
} else if (dialog.lastMessageFromMe == 1) {
|
||||
// Показываем статус только для исходящих сообщений (кроме Saved Messages)
|
||||
// 🔥 ПРАВИЛЬНАЯ ЛОГИКА:
|
||||
// - lastMessageRead == 1 → две синие галочки (прочитано собеседником)
|
||||
// - lastMessageDelivered == 1 && lastMessageRead == 0 → одна галочка (доставлено, но не прочитано)
|
||||
// - lastMessageDelivered == 0 → одна галочка (отправляется)
|
||||
when {
|
||||
dialog.lastMessageDelivered == 2 -> {
|
||||
// 🔥 ПРАВИЛЬНАЯ ЛОГИКА (синхронизировано с ChatViewModel):
|
||||
// - lastMessageDelivered == 3 → две синие галочки (прочитано собеседником)
|
||||
// - lastMessageDelivered == 1 → одна галочка (доставлено)
|
||||
// - lastMessageDelivered == 0 → часики (отправляется)
|
||||
// - lastMessageDelivered == 2 → ошибка
|
||||
when (dialog.lastMessageDelivered) {
|
||||
2 -> {
|
||||
// ERROR - показываем иконку ошибки
|
||||
Icon(
|
||||
imageVector = Icons.Outlined.ErrorOutline,
|
||||
@@ -1605,8 +1606,8 @@ fun DialogItemContent(
|
||||
)
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
}
|
||||
dialog.lastMessageRead == 1 -> {
|
||||
// ПРОЧИТАНО собеседником - две синие галочки
|
||||
3 -> {
|
||||
// READ (delivered=3) - две синие галочки
|
||||
Icon(
|
||||
imageVector = Icons.Default.DoneAll,
|
||||
contentDescription = null,
|
||||
@@ -1616,7 +1617,7 @@ fun DialogItemContent(
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
}
|
||||
else -> {
|
||||
// ДОСТАВЛЕНО или ОТПРАВЛЯЕТСЯ - одна серая галочка
|
||||
// DELIVERED (1) или SENDING (0) - одна серая галочка
|
||||
Icon(
|
||||
imageVector = Icons.Default.Done,
|
||||
contentDescription = null,
|
||||
|
||||
@@ -57,6 +57,7 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio
|
||||
|
||||
private val database = RosettaDatabase.getDatabase(application)
|
||||
private val dialogDao = database.dialogDao()
|
||||
private val messageDao = database.messageDao() // 🔥 Добавляем для получения статуса последнего сообщения
|
||||
|
||||
private var currentAccount: String = ""
|
||||
private var currentPrivateKey: String? = null
|
||||
@@ -139,6 +140,16 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio
|
||||
dialog.lastMessage // Fallback на зашифрованный текст
|
||||
}
|
||||
|
||||
// 🔥🔥🔥 НОВЫЙ ПОДХОД: Получаем статус НАПРЯМУЮ из таблицы messages
|
||||
// Это гарантирует синхронизацию с тем что показывается в диалоге
|
||||
val lastMsgStatus = messageDao.getLastMessageStatus(publicKey, dialog.opponentKey)
|
||||
val actualFromMe = lastMsgStatus?.fromMe ?: 0
|
||||
val actualDelivered = if (actualFromMe == 1) (lastMsgStatus?.delivered ?: 0) else 0
|
||||
val actualRead = if (actualFromMe == 1) (lastMsgStatus?.read ?: 0) else 0
|
||||
|
||||
// 🔥 Лог для отладки - показываем и старые и новые значения
|
||||
android.util.Log.d("ChatsListVM", "📊 Dialog ${dialog.opponentKey.take(16)}... | OLD: fromMe=${dialog.lastMessageFromMe}, del=${dialog.lastMessageDelivered}, read=${dialog.lastMessageRead} | NEW: fromMe=$actualFromMe, del=$actualDelivered, read=$actualRead")
|
||||
|
||||
DialogUiModel(
|
||||
id = dialog.id,
|
||||
account = dialog.account,
|
||||
@@ -152,9 +163,9 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio
|
||||
lastSeen = dialog.lastSeen,
|
||||
verified = dialog.verified,
|
||||
isSavedMessages = isSavedMessages, // 📁 Saved Messages
|
||||
lastMessageFromMe = dialog.lastMessageFromMe,
|
||||
lastMessageDelivered = dialog.lastMessageDelivered,
|
||||
lastMessageRead = dialog.lastMessageRead
|
||||
lastMessageFromMe = actualFromMe, // 🔥 Используем актуальные данные из messages
|
||||
lastMessageDelivered = actualDelivered, // 🔥 Используем актуальные данные из messages
|
||||
lastMessageRead = actualRead // 🔥 Используем актуальные данные из messages
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user