From c2f953b0975e6f92ca186049594539bd85508379 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 19 Jan 2022 11:12:07 -0500 Subject: [PATCH] Ensure reactions are deleted for 'delete for everyone'. --- .../securesms/database/MmsDatabase.java | 2 ++ .../securesms/database/ReactionDatabase.kt | 4 ++++ .../securesms/database/SmsDatabase.java | 1 + .../database/helpers/SignalDatabaseMigrations.kt | 16 +++++++++++++++- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index 130f24f432..b3a477cede 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -850,9 +850,11 @@ public class MmsDatabase extends MessageDatabase { deletedAttachments = SignalDatabase.attachments().deleteAttachmentsForMessage(messageId); SignalDatabase.mentions().deleteMentionsForMessage(messageId); SignalDatabase.messageLog().deleteAllRelatedToMessage(messageId, true); + SignalDatabase.reactions().deleteReactions(new MessageId(messageId, true)); threadId = getThreadIdForMessage(messageId); SignalDatabase.threads().update(threadId, false); + db.setTransactionSuccessful(); } finally { db.endTransaction(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt index 6ce8ce7a75..d80e6da5fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt @@ -168,6 +168,10 @@ class ReactionDatabase(context: Context, databaseHelper: SignalDatabase) : Datab ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(messageId) } + fun deleteReactions(messageId: MessageId) { + writableDatabase.delete(TABLE_NAME, "$MESSAGE_ID = ? AND $IS_MMS = ?", SqlUtil.buildArgs(messageId.id, if (messageId.mms) 1 else 0)) + } + fun hasReaction(messageId: MessageId, reaction: ReactionRecord): Boolean { val query = "$MESSAGE_ID = ? AND $IS_MMS = ? AND $AUTHOR_ID = ? AND $EMOJI = ?" val args = SqlUtil.buildArgs(messageId.id, if (messageId.mms) 1 else 0, reaction.author, reaction.emoji) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index 4773937484..411677fc99 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -392,6 +392,7 @@ public class SmsDatabase extends MessageDatabase { threadId = getThreadIdForMessage(id); + SignalDatabase.reactions().deleteReactions(new MessageId(id, false)); SignalDatabase.threads().update(threadId, false); SignalDatabase.messageLog().deleteAllRelatedToMessage(id, false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index 936eb3572a..c1e0f76959 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -182,8 +182,9 @@ object SignalDatabaseMigrations { private const val NOTIFICATION_PROFILES = 123 private const val NOTIFICATION_PROFILES_END_FIX = 124 private const val REACTION_BACKUP_CLEANUP = 125 + private const val REACTION_REMOTE_DELETE_CLEANUP = 126 - const val DATABASE_VERSION = 125 + const val DATABASE_VERSION = 126 @JvmStatic fun migrate(context: Context, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { @@ -2246,6 +2247,19 @@ object SignalDatabaseMigrations { """.trimIndent() ) } + + if (oldVersion < REACTION_REMOTE_DELETE_CLEANUP) { + db.execSQL( + // language=sql + """ + DELETE FROM reaction + WHERE + (is_mms = 0 AND message_id IN (SELECT _id from sms WHERE remote_deleted = 1)) + OR + (is_mms = 1 AND message_id IN (SELECT _id from mms WHERE remote_deleted = 1)) + """.trimIndent() + ) + } } @JvmStatic