Fix recipient remapping of sms/mms records.

This commit is contained in:
Greyson Parrelli 2022-12-13 09:54:36 -05:00
parent 303e5c7996
commit 4990778a97
5 changed files with 6 additions and 21 deletions

View file

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

View file

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

View file

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

View file

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

View file

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