Ensure reactions are deleted for 'delete for everyone'.

This commit is contained in:
Greyson Parrelli 2022-01-19 11:12:07 -05:00
parent 4984cc8eb4
commit c2f953b097
4 changed files with 22 additions and 1 deletions

View file

@ -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();

View file

@ -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)

View file

@ -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);

View file

@ -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