Perform bulk receipt processing in a transaction.

This commit is contained in:
Greyson Parrelli
2020-11-10 15:08:39 -05:00
committed by Cody Henthorne
parent 0b77b33902
commit e8f0038c36
2 changed files with 89 additions and 23 deletions

View File

@@ -37,8 +37,10 @@ import org.thoughtcrime.securesms.tracing.Trace;
import org.whispersystems.libsignal.util.Pair;
import java.io.Closeable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -317,18 +319,74 @@ public class MmsSmsDatabase extends Database {
else return id;
}
public void incrementDeliveryReceiptCounts(@NonNull List<SyncMessageId> syncMessageIds, long timestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.beginTransaction();
try {
for (SyncMessageId id : syncMessageIds) {
incrementDeliveryReceiptCount(id, timestamp);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
public void incrementDeliveryReceiptCount(SyncMessageId syncMessageId, long timestamp) {
DatabaseFactory.getSmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
/**
* @return A list of ID's that were not updated.
*/
public @NonNull Collection<SyncMessageId> incrementReadReceiptCounts(@NonNull List<SyncMessageId> syncMessageIds, long timestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
List<SyncMessageId> unhandled = new LinkedList<>();
db.beginTransaction();
try {
for (SyncMessageId id : syncMessageIds) {
boolean handled = incrementReadReceiptCount(id, timestamp);
if (!handled) {
unhandled.add(id);
}
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return unhandled;
}
public boolean incrementReadReceiptCount(SyncMessageId syncMessageId, long timestamp) {
boolean handled = false;
SQLiteDatabase db = databaseHelper.getWritableDatabase();
handled |= DatabaseFactory.getSmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
handled |= DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
db.beginTransaction();
try {
boolean handled = false;
return handled;
handled |= DatabaseFactory.getSmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
handled |= DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
db.setTransactionSuccessful();
return handled;
} finally {
db.endTransaction();
}
}
public int getQuotedMessagePosition(long threadId, long quoteId, @NonNull RecipientId recipientId) {