diff --git a/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt b/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt index 5e3fe06..654682c 100644 --- a/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt +++ b/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt @@ -242,16 +242,6 @@ class MessageRepository private constructor(private val context: Context) { android.util.Log.d("MessageRepository", "📩 handleIncomingMessage START") android.util.Log.d("MessageRepository", " from: ${packet.fromPublicKey.take(20)}...") - // 🔥 Генерируем messageId если он пустой (как в Архиве - generateRandomKeyFormSeed) - val messageId = if (packet.messageId.isBlank()) { - generateMessageId(packet.fromPublicKey, packet.toPublicKey, packet.timestamp) - } else { - packet.messageId - } - android.util.Log.d("MessageRepository", " messageId: $messageId (original: ${packet.messageId})") - android.util.Log.d("MessageRepository", " currentAccount: ${currentAccount?.take(20) ?: "NULL"}...") - android.util.Log.d("MessageRepository", " currentPrivateKey: ${if (currentPrivateKey != null) "SET" else "NULL"}") - val account = currentAccount ?: run { android.util.Log.e("MessageRepository", "❌ ABORT: currentAccount is NULL!") return @@ -261,6 +251,23 @@ class MessageRepository private constructor(private val context: Context) { return } + // 🔥 Проверяем, не заблокирован ли отправитель + val isBlocked = database.blacklistDao().isUserBlocked(packet.fromPublicKey, account) + if (isBlocked) { + android.util.Log.d("MessageRepository", "🚫 BLOCKED: Ignoring message from blocked user ${packet.fromPublicKey.take(20)}...") + return + } + + // 🔥 Генерируем messageId если он пустой (как в Архиве - generateRandomKeyFormSeed) + val messageId = if (packet.messageId.isBlank()) { + generateMessageId(packet.fromPublicKey, packet.toPublicKey, packet.timestamp) + } else { + packet.messageId + } + android.util.Log.d("MessageRepository", " messageId: $messageId (original: ${packet.messageId})") + android.util.Log.d("MessageRepository", " currentAccount: ${account.take(20)}...") + android.util.Log.d("MessageRepository", " currentPrivateKey: SET") + // Проверяем, не дубликат ли (используем сгенерированный messageId) val isDuplicate = messageDao.messageExists(account, messageId) android.util.Log.d("MessageRepository", " isDuplicate: $isDuplicate") diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index da36b9a..6ace933 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -200,6 +200,12 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { val privateKey = myPrivateKey ?: return@launch val account = myPublicKey ?: return@launch + // 🔥 Проверяем блокировку (как в Архиве) + val isBlocked = database.blacklistDao().isUserBlocked(packet.fromPublicKey, account) + if (isBlocked) { + Log.d(TAG, "🚫 BLOCKED: Ignoring message from blocked user ${packet.fromPublicKey.take(20)}...") + return@launch + } // Расшифровываем в фоне - получаем и текст и plainKeyAndNonce val decryptResult = MessageCrypto.decryptIncomingFull(