mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 21:15:48 +00:00
Reduce number of db calls when processing data messages.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user