mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 13:17:42 +02:00
perf(e2ee): cache optimization
- shared secret key cache - remove uncommitted messages from the cache
This commit is contained in:
@ -16,6 +16,7 @@ import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import me.rhunk.snapenhance.common.data.ContentType
|
||||
import me.rhunk.snapenhance.common.data.MessageState
|
||||
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||
import me.rhunk.snapenhance.common.data.RuleState
|
||||
import me.rhunk.snapenhance.common.util.protobuf.ProtoEditor
|
||||
@ -312,7 +313,7 @@ class EndToEndEncryption : MessagingRuleFeature(
|
||||
if (messageTypeId == ENCRYPTED_MESSAGE_ID) {
|
||||
runCatching {
|
||||
eachBuffer(2) {
|
||||
if (encryptedMessages.contains(clientMessageId)) return@eachBuffer
|
||||
if (decryptedMessageCache.containsKey(clientMessageId)) return@eachBuffer
|
||||
|
||||
val participantIdHash = getByteArray(1) ?: return@eachBuffer
|
||||
val iv = getByteArray(2) ?: return@eachBuffer
|
||||
@ -373,10 +374,15 @@ class EndToEndEncryption : MessagingRuleFeature(
|
||||
return outputContentType to outputBuffer
|
||||
}
|
||||
|
||||
private fun messageHook(conversationId: String, messageId: Long, senderId: String, messageContent: MessageContent) {
|
||||
private fun messageHook(conversationId: String, messageId: Long, senderId: String, messageContent: MessageContent, committed: Boolean) {
|
||||
val (contentType, buffer) = tryDecryptMessage(senderId, messageId, conversationId, messageContent.contentType ?: ContentType.CHAT, messageContent.content!!)
|
||||
messageContent.contentType = contentType
|
||||
messageContent.content = buffer
|
||||
// remove messages currently being sent from the cache
|
||||
if (!committed) {
|
||||
decryptedMessageCache.remove(messageId)
|
||||
encryptedMessages.remove(messageId)
|
||||
}
|
||||
}
|
||||
|
||||
override fun asyncInit() {
|
||||
@ -520,11 +526,13 @@ class EndToEndEncryption : MessagingRuleFeature(
|
||||
context.event.subscribe(BuildMessageEvent::class, priority = 0) { event ->
|
||||
val message = event.message
|
||||
val conversationId = message.messageDescriptor!!.conversationId.toString()
|
||||
val isMessageCommitted = message.messageState == MessageState.COMMITTED
|
||||
messageHook(
|
||||
conversationId = conversationId,
|
||||
messageId = message.messageDescriptor!!.messageId!!,
|
||||
senderId = message.senderId.toString(),
|
||||
messageContent = message.messageContent!!
|
||||
messageContent = message.messageContent!!,
|
||||
committed = isMessageCommitted
|
||||
)
|
||||
|
||||
message.messageContent!!.instanceNonNull()
|
||||
@ -535,7 +543,8 @@ class EndToEndEncryption : MessagingRuleFeature(
|
||||
conversationId = conversationId,
|
||||
messageId = quotedMessage.getObjectField("mMessageId")?.toString()?.toLong() ?: return@also,
|
||||
senderId = SnapUUID(quotedMessage.getObjectField("mSenderId")).toString(),
|
||||
messageContent = MessageContent(quotedMessage)
|
||||
messageContent = MessageContent(quotedMessage),
|
||||
committed = isMessageCommitted
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user