From 4990778a97865ed61fe94b913e38bee8a5a5b488 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 13 Dec 2022 09:54:36 -0500 Subject: [PATCH] Fix recipient remapping of sms/mms records. --- .../RecipientTableTest_getAndPossiblyMerge.kt | 2 -- .../securesms/database/MessageTable.java | 2 +- .../thoughtcrime/securesms/database/MmsTable.java | 12 ------------ .../securesms/database/RecipientTable.kt | 7 +------ .../thoughtcrime/securesms/database/ThreadTable.kt | 4 ++++ 5 files changed, 6 insertions(+), 21 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt index dce568c285..9be6eba6f2 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt @@ -8,7 +8,6 @@ import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Before -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith import org.signal.core.util.CursorUtil @@ -388,7 +387,6 @@ class RecipientTableTest_getAndPossiblyMerge { * Somewhat exhaustive test of verifying all the data that gets merged. */ @Test - @Ignore("Currently failing when verifying something with sms2") fun getAndPossiblyMerge_merge_general() { // Setup val recipientIdAci: RecipientId = SignalDatabase.recipients.getOrInsertFromServiceId(ACI_A) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java index 54ab76b6fd..162de317fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java @@ -561,7 +561,7 @@ public abstract class MessageTable extends DatabaseTable implements MmsSmsColumn public void remapRecipient(@NonNull RecipientId fromId, @NonNull RecipientId toId) { ContentValues values = new ContentValues(); values.put(RECIPIENT_ID, toId.serialize()); - getWritableDatabase().update(getTableName(), values, RECIPIENT_ID + " = ?", SqlUtil.buildArgs(toId)); + getWritableDatabase().update(getTableName(), values, RECIPIENT_ID + " = ?", SqlUtil.buildArgs(fromId)); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java index 09e6794662..842af47f1b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java @@ -2803,18 +2803,6 @@ public class MmsTable extends MessageTable { return new OutgoingMessageReader(message, threadId); } - @Override - public void remapRecipient(@NonNull RecipientId fromId, @NonNull RecipientId toId) { - - } - - @Override - public void remapThread(long fromId, long toId) { - ContentValues values = new ContentValues(); - values.put(SmsTable.THREAD_ID, toId); - getWritableDatabase().update(TABLE_NAME, values, THREAD_ID + " = ?", SqlUtil.buildArgs(fromId)); - } - public static class Status { public static final int DOWNLOAD_INITIALIZED = 1; public static final int DOWNLOAD_NO_CONNECTIVITY = 2; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt index 8f8e96986e..68f10188c2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -3551,13 +3551,8 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da table.remapRecipient(secondaryId, primaryId) } - // Thread remaps + // Thread Merge Event (remaps happen inside ThreadTable#merge) if (threadMerge.neededMerge) { - for (table in threadIdDatabaseTables) { - table.remapThread(threadMerge.previousThreadId, threadMerge.threadId) - } - - // Thread Merge Event val mergeEvent: ThreadMergeEvent.Builder = ThreadMergeEvent.newBuilder() if (secondaryRecord.e164 != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index 866bbb8e38..4ba5d2f26b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -1455,6 +1455,10 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa check(primary != null) check(secondary != null) + for (table in threadIdDatabaseTables) { + table.remapThread(secondary.threadId, primary.threadId) + } + writableDatabase .delete(TABLE_NAME) .where("$ID = ?", secondary.threadId)