feat: Optimize emoji picker performance by eliminating chunk loading, reducing animations, and improving emoji caching

This commit is contained in:
k1ngsterr1
2026-01-15 01:24:33 +05:00
parent 05fc6f61b7
commit 65094125f6
5 changed files with 300 additions and 102 deletions

View File

@@ -186,24 +186,28 @@ class MessageRepository private constructor(private val context: Context) {
// 🔒 Шифруем plainMessage с использованием приватного ключа
val encryptedPlainMessage = CryptoManager.encryptWithPassword(text.trim(), privateKey)
// Сохраняем в БД
val entity = MessageEntity(
account = account,
fromPublicKey = account,
toPublicKey = toPublicKey,
content = encryptedContent,
timestamp = timestamp,
chachaKey = encryptedKey,
read = if (account == toPublicKey) 1 else 0,
fromMe = 1,
delivered = DeliveryStatus.WAITING.value,
messageId = messageId,
plainMessage = encryptedPlainMessage, // 🔒 Зашифрованный текст
attachments = attachmentsJson,
replyToMessageId = replyToMessageId,
dialogKey = dialogKey
)
messageDao.insertMessage(entity)
// ✅ Проверяем существование - не дублируем сообщения
val exists = messageDao.messageExists(account, messageId)
if (!exists) {
// Сохраняем в БД только если сообщения нет
val entity = MessageEntity(
account = account,
fromPublicKey = account,
toPublicKey = toPublicKey,
content = encryptedContent,
timestamp = timestamp,
chachaKey = encryptedKey,
read = if (account == toPublicKey) 1 else 0,
fromMe = 1,
delivered = DeliveryStatus.WAITING.value,
messageId = messageId,
plainMessage = encryptedPlainMessage, // 🔒 Зашифрованный текст
attachments = attachmentsJson,
replyToMessageId = replyToMessageId,
dialogKey = dialogKey
)
messageDao.insertMessage(entity)
}
// Обновляем диалог
updateDialog(toPublicKey, text.trim(), timestamp)
@@ -283,7 +287,7 @@ class MessageRepository private constructor(private val context: Context) {
// 🔒 Шифруем plainMessage с использованием приватного ключа
val encryptedPlainMessage = CryptoManager.encryptWithPassword(plainText, privateKey)
// Сохраняем в БД
// Создаем entity для кэша и возможной вставки
val entity = MessageEntity(
account = account,
fromPublicKey = packet.fromPublicKey,
@@ -299,7 +303,13 @@ class MessageRepository private constructor(private val context: Context) {
attachments = attachmentsJson,
dialogKey = dialogKey
)
messageDao.insertMessage(entity)
// ✅ Проверяем существование перед вставкой (защита от дубликатов)
val stillExists = messageDao.messageExists(account, messageId)
if (!stillExists) {
// Сохраняем в БД только если сообщения нет
messageDao.insertMessage(entity)
}
// Обновляем диалог
updateDialog(packet.fromPublicKey, plainText, packet.timestamp, incrementUnread = true)
@@ -307,9 +317,11 @@ class MessageRepository private constructor(private val context: Context) {
// 🔥 Запрашиваем информацию о пользователе для отображения имени вместо ключа
requestUserInfo(packet.fromPublicKey)
// Обновляем кэш
val message = entity.toMessage()
updateMessageCache(dialogKey, message)
// Обновляем кэш только если сообщение новое
if (!stillExists) {
val message = entity.toMessage()
updateMessageCache(dialogKey, message)
}
} catch (e: Exception) {
e.printStackTrace()