From 157777cac1484f1550c2e6ee6639e4f178884b82 Mon Sep 17 00:00:00 2001 From: Nicholas Date: Thu, 2 Nov 2023 15:47:31 -0400 Subject: [PATCH] Batch update DB upon group receipt. --- .../securesms/database/GroupReceiptTable.kt | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt index 41a67006e1..08a31c3a88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt @@ -76,22 +76,46 @@ class GroupReceiptTable(context: Context?, databaseHelper: SignalDatabase?) : Da } fun setUnidentified(results: Collection>, mmsId: Long) { + val mmsMatchPrefix = "$MMS_ID = $mmsId AND" + val unidentifiedQueries = SqlUtil.buildCollectionQuery( + column = RECIPIENT_ID, + values = results.filter { it.second() }.map { it.first().serialize() }, + prefix = mmsMatchPrefix + ) + val identifiedQueries = SqlUtil.buildCollectionQuery( + column = RECIPIENT_ID, + values = results.filterNot { it.second() }.map { it.first().serialize() }, + prefix = mmsMatchPrefix + ) writableDatabase.withinTransaction { db -> - for (result in results) { + unidentifiedQueries.forEach { db.update(TABLE_NAME) - .values(UNIDENTIFIED to if (result.second()) 1 else 0) - .where("$MMS_ID = ? AND $RECIPIENT_ID = ?", mmsId.toString(), result.first().serialize()) + .values(UNIDENTIFIED to 1) + .where(it.where, it.whereArgs) + .run() + } + + identifiedQueries.forEach { + db.update(TABLE_NAME) + .values(UNIDENTIFIED to 0) + .where(it.where, it.whereArgs) .run() } } } fun setSkipped(recipients: Collection, mmsId: Long) { + val mmsMatchPrefix = "$MMS_ID = $mmsId AND" + val queries = SqlUtil.buildCollectionQuery( + column = RECIPIENT_ID, + values = recipients.map { it.serialize() }, + prefix = mmsMatchPrefix + ) writableDatabase.withinTransaction { db -> - for (recipient in recipients) { + queries.forEach { db.update(TABLE_NAME) .values(STATUS to STATUS_SKIPPED) - .where("$MMS_ID = ? AND $RECIPIENT_ID = ?", mmsId.toString(), recipient.serialize()) + .where(it.where, it.whereArgs) .run() } }