From 2eff9e02307e0aae240a9f121579bec2f2af984a Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 12 May 2023 09:26:44 -0400 Subject: [PATCH] Update default conflict method to be 'ignore'. --- .../org/thoughtcrime/securesms/database/CallTable.kt | 8 ++++---- .../thoughtcrime/securesms/database/MessageTable.kt | 6 +++++- .../thoughtcrime/securesms/jobs/MmsReceiveJob.java | 12 ++++++++---- .../org/signal/core/util/SQLiteDatabaseExtensions.kt | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt index d5de3bf570..3cce00ec0d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt @@ -292,7 +292,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl TIMESTAMP to timestamp, DELETION_TIMESTAMP to System.currentTimeMillis() ) - .run() + .run(SQLiteDatabase.CONFLICT_ABORT) ApplicationDependencies.getDeletedCallEventManager().scheduleIfNecessary() } @@ -356,7 +356,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl TIMESTAMP to timestamp, RINGER to ringer ) - .run() + .run(SQLiteDatabase.CONFLICT_ABORT) } ApplicationDependencies.getDatabaseObserver().notifyCallUpdateObservers() @@ -462,7 +462,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl TIMESTAMP to timestamp, RINGER to null ) - .run() + .run(SQLiteDatabase.CONFLICT_ABORT) Log.d(TAG, "Inserted new call event from group call update message. Call Id: $callId") } else { @@ -670,7 +670,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl TIMESTAMP to timestamp, RINGER to ringerRecipient.toLong() ) - .run() + .run(SQLiteDatabase.CONFLICT_ABORT) } Log.d(TAG, "Inserted a new group ring event for $callId with event $event") 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 7739a47884..8cbc20464f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -2725,7 +2725,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat READ to if (Util.isDefaultSmsProvider(context)) 0 else 1, SMS_SUBSCRIPTION_ID to subscriptionId ) - .run() + .run(SQLiteDatabase.CONFLICT_IGNORE) return Pair(messageId, threadId) } @@ -3041,6 +3041,10 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat unarchive = false ) + if (messageId < 0) { + throw MmsException("Failed to insert message! Likely a duplicate.") + } + if (message.threadRecipient.isGroup) { val members: MutableSet = mutableSetOf() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java index 96de6a8759..d60f8b9bd2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java @@ -80,11 +80,15 @@ public class MmsReceiveJob extends BaseJob { MessageTable database = SignalDatabase.messages(); Pair messageAndThreadId = database.insertMessageInbox((NotificationInd)pdu, subscriptionId); - Log.i(TAG, "Inserted received MMS notification..."); + if (messageAndThreadId.first() > 0) { + Log.i(TAG, "Inserted received MMS notification..."); - ApplicationDependencies.getJobManager().add(new MmsDownloadJob(messageAndThreadId.first(), - messageAndThreadId.second(), - true)); + ApplicationDependencies.getJobManager().add(new MmsDownloadJob(messageAndThreadId.first(), + messageAndThreadId.second(), + true)); + } else { + Log.w(TAG, "Did not insert MMS because it was a duplicate!"); + } } else { Log.w(TAG, "Unable to process MMS."); } diff --git a/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt b/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt index 51ad843eec..0a54089f02 100644 --- a/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt @@ -369,7 +369,7 @@ class InsertBuilderPart2( private val tableName: String, private val values: ContentValues ) { - fun run(conflictStrategy: Int = SQLiteDatabase.CONFLICT_NONE): Long { + fun run(conflictStrategy: Int = SQLiteDatabase.CONFLICT_IGNORE): Long { return db.insert(tableName, conflictStrategy, values) } }