feat: Optimize emoji picker performance by eliminating chunk loading, reducing animations, and improving emoji caching
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user