From d7de5415b583993f8a201c8f8670e8215d51797a Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Fri, 12 Dec 2014 19:35:52 -0800 Subject: [PATCH] Skip drafts and outbox messages during imports. // FREEBIE Closes #1468 Fixes #892 --- .../securesms/database/MmsSmsColumns.java | 2 ++ .../database/PlaintextBackupImporter.java | 12 ++++++++++++ .../securesms/database/SmsMigrator.java | 17 +++++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java b/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java index df5750890..5a09813f7 100644 --- a/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java +++ b/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java @@ -196,8 +196,10 @@ public interface MmsSmsColumns { switch ((int)theirType) { case 1: return BASE_INBOX_TYPE; case 2: return BASE_SENT_TYPE; + case 3: return BASE_DRAFT_TYPE; case 4: return BASE_OUTBOX_TYPE; case 5: return BASE_SENT_FAILED_TYPE; + case 6: return BASE_OUTBOX_TYPE; } return BASE_INBOX_TYPE; diff --git a/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java b/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java index 75346e846..9f8972d88 100644 --- a/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java +++ b/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java @@ -63,6 +63,9 @@ public class PlaintextBackupImporter { if (item.getAddress() == null || item.getAddress().equals("null")) continue; + if (!isAppropriateTypeForImport(item.getType())) + continue; + addStringToStatement(statement, 1, item.getAddress()); addNullToStatement(statement, 2); addLongToStatement(statement, 3, item.getDate()); @@ -121,4 +124,13 @@ public class PlaintextBackupImporter { statement.bindLong(index, value); } + private static boolean isAppropriateTypeForImport(long theirType) { + long ourType = SmsDatabase.Types.translateFromSystemBaseType(theirType); + + return ourType == MmsSmsColumns.Types.BASE_INBOX_TYPE || + ourType == MmsSmsColumns.Types.BASE_SENT_TYPE || + ourType == MmsSmsColumns.Types.BASE_SENT_FAILED_TYPE; + } + + } diff --git a/src/org/thoughtcrime/securesms/database/SmsMigrator.java b/src/org/thoughtcrime/securesms/database/SmsMigrator.java index 0e375337e..541576259 100644 --- a/src/org/thoughtcrime/securesms/database/SmsMigrator.java +++ b/src/org/thoughtcrime/securesms/database/SmsMigrator.java @@ -83,6 +83,15 @@ public class SmsMigrator { } } + private static boolean isAppropriateTypeForMigration(Cursor cursor, int columnIndex) { + long systemType = cursor.getLong(columnIndex); + long ourType = SmsDatabase.Types.translateFromSystemBaseType(systemType); + + return ourType == MmsSmsColumns.Types.BASE_INBOX_TYPE || + ourType == MmsSmsColumns.Types.BASE_SENT_TYPE || + ourType == MmsSmsColumns.Types.BASE_SENT_FAILED_TYPE; + } + private static void getContentValuesForRow(Context context, MasterSecret masterSecret, Cursor cursor, long threadId, SQLiteStatement statement) @@ -171,8 +180,12 @@ public class SmsMigrator { SQLiteStatement statement = ourSmsDatabase.createInsertStatement(transaction); while (cursor != null && cursor.moveToNext()) { - getContentValuesForRow(context, masterSecret, cursor, ourThreadId, statement); - statement.execute(); + int typeColumn = cursor.getColumnIndex(SmsDatabase.TYPE); + + if (cursor.isNull(typeColumn) || isAppropriateTypeForMigration(cursor, typeColumn)) { + getContentValuesForRow(context, masterSecret, cursor, ourThreadId, statement); + statement.execute(); + } listener.progressUpdate(new ProgressDescription(progress, cursor.getCount(), cursor.getPosition())); }