mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Improve incoming group receipt processing.
This commit is contained in:
committed by
jeffrey-signal
parent
da2eb02cde
commit
bb730c137f
@@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.messages
|
||||
|
||||
import org.signal.libsignal.zkgroup.groups.GroupMasterKey
|
||||
import org.signal.libsignal.zkgroup.groups.GroupSecretParams
|
||||
import org.thoughtcrime.securesms.database.MessageTable
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.model.GroupRecord
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||
@@ -38,6 +39,9 @@ abstract class BatchCache {
|
||||
val groupRevisionCache = HashMap<GroupId, Int>(BATCH_SIZE)
|
||||
val groupRecordCache = HashMap<GroupId.V2, Optional<GroupRecord>>(BATCH_SIZE)
|
||||
|
||||
val deliveryReceiptLookupCache = HashMap<Long, MessageTable.ReceiptData>(BATCH_SIZE)
|
||||
val readReceiptLookupCache = HashMap<Long, MessageTable.ReceiptData>(BATCH_SIZE)
|
||||
|
||||
protected val groupSecretParamsAndIdCache = HashMap<GroupMasterKey, Pair<GroupSecretParams, GroupId.V2>>(BATCH_SIZE)
|
||||
|
||||
fun getGroupInfo(message: DataMessage): Pair<GroupSecretParams?, GroupId.V2?> {
|
||||
@@ -56,6 +60,8 @@ abstract class BatchCache {
|
||||
groupRevisionCache.clear()
|
||||
groupRecordCache.clear()
|
||||
groupSecretParamsAndIdCache.clear()
|
||||
deliveryReceiptLookupCache.clear()
|
||||
readReceiptLookupCache.clear()
|
||||
}
|
||||
|
||||
protected fun flushJob(job: Job) {
|
||||
|
||||
@@ -29,7 +29,7 @@ object ReceiptMessageProcessor {
|
||||
|
||||
when (receiptMessage.type) {
|
||||
ReceiptMessage.Type.DELIVERY -> handleDeliveryReceipt(envelope, metadata, receiptMessage, senderRecipient.id, batchCache)
|
||||
ReceiptMessage.Type.READ -> handleReadReceipt(context, senderRecipient.id, envelope, metadata, receiptMessage, earlyMessageCacheEntry)
|
||||
ReceiptMessage.Type.READ -> handleReadReceipt(context, senderRecipient.id, envelope, metadata, receiptMessage, earlyMessageCacheEntry, batchCache)
|
||||
ReceiptMessage.Type.VIEWED -> handleViewedReceipt(context, envelope, metadata, receiptMessage, senderRecipient.id, earlyMessageCacheEntry)
|
||||
else -> warn(envelope.timestamp!!, "Unknown recipient message type ${receiptMessage.type}")
|
||||
}
|
||||
@@ -47,7 +47,7 @@ object ReceiptMessageProcessor {
|
||||
val stopwatch: Stopwatch? = if (VERBOSE) Stopwatch("delivery-receipt", decimalPlaces = 2) else null
|
||||
|
||||
SignalTrace.beginSection("ReceiptMessageProcessor#incrementDeliveryReceiptCounts")
|
||||
val missingTargetTimestamps: Set<Long> = SignalDatabase.messages.incrementDeliveryReceiptCounts(deliveryReceipt.timestamp, senderRecipientId, envelope.timestamp!!, stopwatch)
|
||||
val missingTargetTimestamps: Set<Long> = SignalDatabase.messages.incrementDeliveryReceiptCounts(deliveryReceipt.timestamp, senderRecipientId, envelope.timestamp!!, stopwatch, batchCache.deliveryReceiptLookupCache)
|
||||
SignalTrace.endSection()
|
||||
|
||||
for (targetTimestamp in missingTargetTimestamps) {
|
||||
@@ -75,7 +75,8 @@ object ReceiptMessageProcessor {
|
||||
envelope: Envelope,
|
||||
metadata: EnvelopeMetadata,
|
||||
readReceipt: ReceiptMessage,
|
||||
earlyMessageCacheEntry: EarlyMessageCacheEntry?
|
||||
earlyMessageCacheEntry: EarlyMessageCacheEntry?,
|
||||
batchCache: BatchCache
|
||||
) {
|
||||
if (!TextSecurePreferences.isReadReceiptsEnabled(context)) {
|
||||
log(envelope.timestamp!!, "Ignoring read receipts for IDs: " + readReceipt.timestamp.joinToString(", "))
|
||||
@@ -85,7 +86,7 @@ object ReceiptMessageProcessor {
|
||||
log(envelope.timestamp!!, "Processing read receipts. Sender: $senderRecipientId, Device: ${metadata.sourceDeviceId}, Timestamps: ${readReceipt.timestamp.joinToString(", ")}")
|
||||
|
||||
SignalTrace.beginSection("ReceiptMessageProcessor#incrementReadReceiptCounts")
|
||||
val missingTargetTimestamps: Set<Long> = SignalDatabase.messages.incrementReadReceiptCounts(readReceipt.timestamp, senderRecipientId, envelope.timestamp!!)
|
||||
val missingTargetTimestamps: Set<Long> = SignalDatabase.messages.incrementReadReceiptCounts(readReceipt.timestamp, senderRecipientId, envelope.timestamp!!, batchCache.readReceiptLookupCache)
|
||||
SignalTrace.endSection()
|
||||
|
||||
if (missingTargetTimestamps.isNotEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user