From 3fca46de925fbb7ab2d99a36ca20b32a7d96d1c5 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 5 Aug 2021 11:12:21 -0400 Subject: [PATCH] Alleviate database contention when archiving threads. --- .../securesms/database/RecipientDatabase.java | 3 +-- .../securesms/database/ThreadDatabase.java | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index f1b86c1ece..38c450056a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -741,14 +741,13 @@ public class RecipientDatabase extends Database { return null; } - public void markNeedsSync(@NonNull Collection recipientIds) { + public void markNeedsSyncWithoutRefresh(@NonNull Collection recipientIds) { SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.beginTransaction(); try { for (RecipientId recipientId : recipientIds) { rotateStorageId(recipientId); - Recipient.live(recipientId).refresh(); } db.setTransactionSuccessful(); } finally { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index 3cc72ffae4..32a2cf6157 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -455,23 +455,29 @@ public class ThreadDatabase extends Database { } public void setForcedUnread(@NonNull Collection threadIds) { - SQLiteDatabase db = databaseHelper.getWritableDatabase(); + SQLiteDatabase db = databaseHelper.getWritableDatabase(); + List recipientIds = Collections.emptyList(); db.beginTransaction(); try { - List recipientIds = getRecipientIdsForThreadIds(threadIds); SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, threadIds); ContentValues contentValues = new ContentValues(); contentValues.put(READ, ReadStatus.FORCED_UNREAD.serialize()); db.update(TABLE_NAME, contentValues, query.getWhere(), query.getWhereArgs()); - DatabaseFactory.getRecipientDatabase(context).markNeedsSync(recipientIds); + + recipientIds = getRecipientIdsForThreadIds(threadIds); + DatabaseFactory.getRecipientDatabase(context).markNeedsSyncWithoutRefresh(recipientIds); db.setTransactionSuccessful(); } finally { db.endTransaction(); + for (RecipientId id : recipientIds) { + Recipient.live(id).refresh(); + } + StorageSyncHelper.scheduleSyncForDataChange(); notifyConversationListListeners(); } @@ -627,7 +633,8 @@ public class ThreadDatabase extends Database { } public void setArchived(Set threadIds, boolean archive) { - SQLiteDatabase db = databaseHelper.getReadableDatabase(); + SQLiteDatabase db = databaseHelper.getReadableDatabase(); + List recipientIds = Collections.emptyList(); db.beginTransaction(); try { @@ -642,12 +649,17 @@ public class ThreadDatabase extends Database { db.update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(threadId)); } - List recipientIds = getRecipientIdsForThreadIds(threadIds); - DatabaseFactory.getRecipientDatabase(context).markNeedsSync(recipientIds); + recipientIds = getRecipientIdsForThreadIds(threadIds); + DatabaseFactory.getRecipientDatabase(context).markNeedsSyncWithoutRefresh(recipientIds); db.setTransactionSuccessful(); } finally { db.endTransaction(); + + for (RecipientId id : recipientIds) { + Recipient.live(id).refresh(); + } + notifyConversationListListeners(); StorageSyncHelper.scheduleSyncForDataChange(); }