From ed1aa74affce4f43242b070a66e0b12c6f4188a2 Mon Sep 17 00:00:00 2001 From: Clark Date: Thu, 11 May 2023 16:26:18 -0400 Subject: [PATCH] Reduce number of thread snippet updates from receipts. --- .../securesms/database/MessageTable.kt | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 8cbc20464f..2de1d93c69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -4290,7 +4290,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } fun incrementViewedStoryReceiptCounts(targetTimestamps: List, receiptAuthor: RecipientId, receiptSentTimestamp: Long): Set { - val messageUpdates: MutableSet = HashSet() + val messageUpdates: MutableSet = HashSet() val unhandled: MutableSet = HashSet() writableDatabase.withinTransaction { @@ -4323,7 +4323,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat * @return Whether or not some thread was updated. */ private fun incrementReceiptCount(targetTimestamp: Long, receiptAuthor: RecipientId, receiptSentTimestamp: Long, receiptType: ReceiptType, messageQualifier: MessageQualifier = MessageQualifier.ALL): Boolean { - var messageUpdates: Set = HashSet() + var messageUpdates: Set = HashSet() writableDatabase.withinTransaction { messageUpdates = incrementReceiptCountInternal(targetTimestamp, receiptAuthor, receiptSentTimestamp, receiptType, messageQualifier) @@ -4346,13 +4346,12 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat * @return All of the target timestamps that couldn't be found in the table. */ private fun incrementReceiptCounts(targetTimestamps: List, receiptAuthor: RecipientId, receiptSentTimestamp: Long, receiptType: ReceiptType, messageQualifier: MessageQualifier = MessageQualifier.ALL): Set { - val messageUpdates: MutableSet = HashSet() + val messageUpdates: MutableSet = HashSet() val missingTargetTimestamps: MutableSet = HashSet() writableDatabase.withinTransaction { for (targetTimestamp in targetTimestamps) { - val updates: Set = incrementReceiptCountInternal(targetTimestamp, receiptAuthor, receiptSentTimestamp, receiptType, messageQualifier) - + val updates: Set = incrementReceiptCountInternal(targetTimestamp, receiptAuthor, receiptSentTimestamp, receiptType, messageQualifier) if (updates.isNotEmpty()) { messageUpdates += updates } else { @@ -4361,7 +4360,9 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } for (update in messageUpdates) { - threads.updateSilently(update.threadId, false) + if (update.shouldUpdateSnippet) { + threads.updateSilently(update.threadId, false) + } } } @@ -4381,8 +4382,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat return missingTargetTimestamps } - private fun incrementReceiptCountInternal(targetTimestamp: Long, receiptAuthor: RecipientId, receiptSentTimestamp: Long, receiptType: ReceiptType, messageQualifier: MessageQualifier): Set { - val messageUpdates: MutableSet = HashSet() + private fun incrementReceiptCountInternal(targetTimestamp: Long, receiptAuthor: RecipientId, receiptSentTimestamp: Long, receiptType: ReceiptType, messageQualifier: MessageQualifier): Set { + val messageUpdates: MutableSet = HashSet() val qualifierWhere: String = when (messageQualifier) { MessageQualifier.NORMAL -> " AND NOT ($IS_STORY_CLAUSE)" @@ -4415,16 +4416,17 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat ) ) $qualifierWhere - RETURNING $ID, $THREAD_ID, $STORY_TYPE + RETURNING $ID, $THREAD_ID, $STORY_TYPE, ${receiptType.columnName} """, buildArgs(Recipient.self().id, receiptAuthor) ).forEach { cursor -> val messageId = cursor.requireLong(ID) val threadId = cursor.requireLong(THREAD_ID) val storyType = StoryType.fromCode(cursor.requireInt(STORY_TYPE)) + val receiptCount = cursor.requireInt(receiptType.columnName) groupReceipts.update(receiptAuthor, messageId, receiptType.groupStatus, receiptSentTimestamp) - messageUpdates += MessageUpdate(threadId, MessageId(messageId)) + messageUpdates += MessageReceiptUpdate(threadId, MessageId(messageId), receiptType != ReceiptType.VIEWED && receiptCount == 1) found = true hasStory = storyType != StoryType.NONE @@ -4437,7 +4439,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat if (hasStory) { for (messageId in storySends.getStoryMessagesFor(receiptAuthor, targetTimestamp)) { groupReceipts.update(receiptAuthor, messageId.id, receiptType.groupStatus, receiptSentTimestamp) - messageUpdates += MessageUpdate(-1, messageId) + messageUpdates += MessageReceiptUpdate(-1, messageId, false) } } @@ -4922,9 +4924,10 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val subscriptionId: Int ) - data class MessageUpdate( + data class MessageReceiptUpdate( val threadId: Long, - val messageId: MessageId + val messageId: MessageId, + val shouldUpdateSnippet: Boolean ) data class ReportSpamData(