Reduce number of db calls when processing data messages.

This commit is contained in:
Clark
2023-05-08 20:11:15 -04:00
committed by Cody Henthorne
parent da27d74111
commit 054a1e4017
2 changed files with 24 additions and 21 deletions

View File

@@ -139,10 +139,10 @@ object DataMessageProcessor {
message.isPaymentActivationRequest -> messageId = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = true, isPaymentsActivated = false)
message.isPaymentActivated -> messageId = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = false, isPaymentsActivated = true)
message.hasPayment() -> messageId = handlePayment(context, envelope, metadata, message, senderRecipient.id, receivedTime)
message.hasStoryContext() -> messageId = handleStoryReply(context, envelope, metadata, message, senderRecipient.id, groupId, receivedTime)
message.hasStoryContext() -> messageId = handleStoryReply(context, envelope, metadata, message, senderRecipient, groupId, receivedTime)
message.hasGiftBadge() -> messageId = handleGiftMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, receivedTime)
message.isMediaMessage -> messageId = handleMediaMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, groupId, receivedTime)
message.hasBody() -> messageId = handleTextMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, groupId, receivedTime)
message.isMediaMessage -> messageId = handleMediaMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime)
message.hasBody() -> messageId = handleTextMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime)
message.hasGroupCallUpdate() -> handleGroupCallUpdateMessage(envelope, message, senderRecipient.id, groupId)
}
@@ -195,6 +195,9 @@ object DataMessageProcessor {
StorageSyncHelper.scheduleSyncForDataChange()
}
} else if (messageProfileKey != null) {
if (messageProfileKeyBytes.contentEquals(senderRecipient.profileKey)) {
return
}
if (SignalDatabase.recipients.setProfileKey(senderRecipient.id, messageProfileKey)) {
log(timestamp, "Profile key on message from " + senderRecipient.id + " didn't match our local store. It has been updated.")
ApplicationDependencies.getJobManager().add(RetrieveProfileJob.forRecipient(senderRecipient.id))
@@ -321,14 +324,14 @@ object DataMessageProcessor {
envelope: Envelope,
metadata: EnvelopeMetadata,
senderRecipientId: RecipientId,
threadRecipientId: RecipientId,
threadRecipient: Recipient,
groupId: GroupId.V2?,
expiresIn: Duration,
receivedTime: Long
) {
if (SignalDatabase.recipients.getExpiresInSeconds(threadRecipientId) != expiresIn.inWholeSeconds) {
if (threadRecipient.expiresInSeconds.toLong() != expiresIn.inWholeSeconds) {
warn(envelope.timestamp, "Message expire time didn't match thread expire time. Handling timer update.")
handleExpirationUpdate(envelope, metadata, senderRecipientId, threadRecipientId, groupId, expiresIn, receivedTime, true)
handleExpirationUpdate(envelope, metadata, senderRecipientId, threadRecipient.id, groupId, expiresIn, receivedTime, true)
}
}
@@ -638,7 +641,7 @@ object DataMessageProcessor {
envelope: Envelope,
metadata: EnvelopeMetadata,
message: DataMessage,
senderRecipientId: RecipientId,
senderRecipient: Recipient,
groupId: GroupId.V2?,
receivedTime: Long
): MessageId? {
@@ -658,7 +661,7 @@ object DataMessageProcessor {
try {
if (selfId == storyAuthorRecipientId) {
storyMessageId = SignalDatabase.storySends.getStoryMessageFor(senderRecipientId, sentTimestamp)
storyMessageId = SignalDatabase.storySends.getStoryMessageFor(senderRecipient.id, sentTimestamp)
}
if (storyMessageId == null) {
@@ -666,19 +669,19 @@ object DataMessageProcessor {
}
val story: MmsMessageRecord = SignalDatabase.messages.getMessageRecord(storyMessageId.id) as MmsMessageRecord
var threadRecipientId: RecipientId = SignalDatabase.threads.getRecipientForThreadId(story.threadId)!!.id
val groupRecord: GroupRecord? = SignalDatabase.groups.getGroup(threadRecipientId).orNull()
var threadRecipient: Recipient = SignalDatabase.threads.getRecipientForThreadId(story.threadId)!!
val groupRecord: GroupRecord? = SignalDatabase.groups.getGroup(threadRecipient.id).orNull()
val groupStory: Boolean = groupRecord?.isActive ?: false
if (!groupStory) {
threadRecipientId = senderRecipientId
threadRecipient = senderRecipient
}
handlePossibleExpirationUpdate(envelope, metadata, senderRecipientId, threadRecipientId, groupId, message.expireTimer.seconds, receivedTime)
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimer.seconds, receivedTime)
if (message.hasGroupContext) {
parentStoryId = GroupReply(storyMessageId.id)
} else if (groupStory || SignalDatabase.storySends.canReply(senderRecipientId, sentTimestamp)) {
} else if (groupStory || SignalDatabase.storySends.canReply(senderRecipient.id, sentTimestamp)) {
parentStoryId = DirectReply(storyMessageId.id)
var displayText = ""
@@ -702,7 +705,7 @@ object DataMessageProcessor {
val bodyRanges: BodyRangeList? = message.bodyRangesList.filter { it.hasStyle() }.toList().toBodyRangeList()
val mediaMessage = IncomingMediaMessage(
from = senderRecipientId,
from = senderRecipient.id,
sentTimeMillis = envelope.timestamp,
serverTimeMillis = envelope.serverTimestamp,
receivedTimeMillis = System.currentTimeMillis(),
@@ -801,13 +804,13 @@ object DataMessageProcessor {
metadata: EnvelopeMetadata,
message: DataMessage,
senderRecipient: Recipient,
threadRecipientId: RecipientId,
threadRecipient: Recipient,
groupId: GroupId.V2?,
receivedTime: Long
): MessageId? {
log(envelope.timestamp, "Media message.")
notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipientId, metadata.sourceDeviceId)
notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipient.id, metadata.sourceDeviceId)
val insertResult: InsertResult?
@@ -821,7 +824,7 @@ object DataMessageProcessor {
val attachments: List<Attachment> = message.attachmentsList.toPointers()
val messageRanges: BodyRangeList? = if (message.bodyRangesCount > 0) message.bodyRangesList.filter { it.hasStyle() }.toList().toBodyRangeList() else null
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipientId, groupId, message.expireTimer.seconds, receivedTime)
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimer.seconds, receivedTime)
val mediaMessage = IncomingMediaMessage(
from = senderRecipient.id,
@@ -884,7 +887,7 @@ object DataMessageProcessor {
metadata: EnvelopeMetadata,
message: DataMessage,
senderRecipient: Recipient,
threadRecipientId: RecipientId,
threadRecipient: Recipient,
groupId: GroupId.V2?,
receivedTime: Long
): MessageId? {
@@ -892,9 +895,9 @@ object DataMessageProcessor {
val body = if (message.hasBody()) message.body else ""
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipientId, groupId, message.expireTimer.seconds, receivedTime)
handlePossibleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient, groupId, message.expireTimer.seconds, receivedTime)
notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipientId, metadata.sourceDeviceId)
notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipient.id, metadata.sourceDeviceId)
val textMessage = IncomingTextMessage(
senderRecipient.id,

View File

@@ -282,7 +282,7 @@ open class MessageContentProcessorV2(private val context: Context) {
*/
@JvmOverloads
open fun process(envelope: Envelope, content: Content, metadata: EnvelopeMetadata, serverDeliveredTimestamp: Long, processingEarlyContent: Boolean = false) {
val senderRecipient = Recipient.externalPush(SignalServiceAddress(metadata.sourceServiceId, metadata.sourceE164))
val senderRecipient = Recipient.resolved(RecipientId.from(SignalServiceAddress(metadata.sourceServiceId, metadata.sourceE164)))
handleMessage(senderRecipient, envelope, content, metadata, serverDeliveredTimestamp, processingEarlyContent)