Add additional safeguards around disappearing messages.
This commit is contained in:
parent
1c99939dfa
commit
71f54701d2
3 changed files with 15 additions and 5 deletions
|
@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.database.OneTimePreKeyDatabase;
|
||||||
import org.thoughtcrime.securesms.database.SearchDatabase;
|
import org.thoughtcrime.securesms.database.SearchDatabase;
|
||||||
import org.thoughtcrime.securesms.database.SessionDatabase;
|
import org.thoughtcrime.securesms.database.SessionDatabase;
|
||||||
import org.thoughtcrime.securesms.database.SignedPreKeyDatabase;
|
import org.thoughtcrime.securesms.database.SignedPreKeyDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.SmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.StickerDatabase;
|
import org.thoughtcrime.securesms.database.StickerDatabase;
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
import org.thoughtcrime.securesms.profiles.AvatarHelper;
|
import org.thoughtcrime.securesms.profiles.AvatarHelper;
|
||||||
|
@ -40,7 +41,6 @@ import org.whispersystems.libsignal.kdf.HKDFv3;
|
||||||
import org.whispersystems.libsignal.util.ByteUtil;
|
import org.whispersystems.libsignal.util.ByteUtil;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
@ -96,7 +96,9 @@ public class FullBackupExporter extends FullBackupBase {
|
||||||
|
|
||||||
for (String table : tables) {
|
for (String table : tables) {
|
||||||
if (table.equals(MmsDatabase.TABLE_NAME)) {
|
if (table.equals(MmsDatabase.TABLE_NAME)) {
|
||||||
count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringMessage, null, count);
|
count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringMmsMessage, null, count);
|
||||||
|
} else if (table.equals(SmsDatabase.TABLE_NAME)) {
|
||||||
|
count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringSmsMessage, null, count);
|
||||||
} else if (table.equals(GroupReceiptDatabase.TABLE_NAME)) {
|
} else if (table.equals(GroupReceiptDatabase.TABLE_NAME)) {
|
||||||
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(GroupReceiptDatabase.MMS_ID))), null, count);
|
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(GroupReceiptDatabase.MMS_ID))), null, count);
|
||||||
} else if (table.equals(AttachmentDatabase.TABLE_NAME)) {
|
} else if (table.equals(AttachmentDatabase.TABLE_NAME)) {
|
||||||
|
@ -283,11 +285,15 @@ public class FullBackupExporter extends FullBackupBase {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isNonExpiringMessage(@NonNull Cursor cursor) {
|
private static boolean isNonExpiringMmsMessage(@NonNull Cursor cursor) {
|
||||||
return cursor.getInt(cursor.getColumnIndexOrThrow(MmsSmsColumns.EXPIRES_IN)) <= 0 &&
|
return cursor.getInt(cursor.getColumnIndexOrThrow(MmsSmsColumns.EXPIRES_IN)) <= 0 &&
|
||||||
cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.VIEW_ONCE)) <= 0;
|
cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.VIEW_ONCE)) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isNonExpiringSmsMessage(@NonNull Cursor cursor) {
|
||||||
|
return cursor.getInt(cursor.getColumnIndexOrThrow(MmsSmsColumns.EXPIRES_IN)) <= 0;
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isForNonExpiringMessage(@NonNull SQLiteDatabase db, long mmsId) {
|
private static boolean isForNonExpiringMessage(@NonNull SQLiteDatabase db, long mmsId) {
|
||||||
String[] columns = new String[] { MmsDatabase.EXPIRES_IN, MmsDatabase.VIEW_ONCE};
|
String[] columns = new String[] { MmsDatabase.EXPIRES_IN, MmsDatabase.VIEW_ONCE};
|
||||||
String where = MmsDatabase.ID + " = ?";
|
String where = MmsDatabase.ID + " = ?";
|
||||||
|
|
|
@ -599,11 +599,13 @@ public class MmsDatabase extends MessagingDatabase {
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
String query = ID + " = ? AND (" + EXPIRE_STARTED + " = 0 OR " + EXPIRE_STARTED + " > ?)";
|
||||||
|
|
||||||
for (long id : ids) {
|
for (long id : ids) {
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
contentValues.put(EXPIRE_STARTED, startedAtTimestamp);
|
contentValues.put(EXPIRE_STARTED, startedAtTimestamp);
|
||||||
|
|
||||||
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[]{String.valueOf(id)});
|
db.update(TABLE_NAME, contentValues, query, new String[]{String.valueOf(id), String.valueOf(startedAtTimestamp)});
|
||||||
|
|
||||||
if (threadId < 0) {
|
if (threadId < 0) {
|
||||||
threadId = getThreadIdForMessage(id);
|
threadId = getThreadIdForMessage(id);
|
||||||
|
|
|
@ -366,11 +366,13 @@ public class SmsDatabase extends MessagingDatabase {
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
try {
|
try {
|
||||||
|
String query = ID + " = ? AND (" + EXPIRE_STARTED + " = 0 OR " + EXPIRE_STARTED + " > ?)";
|
||||||
|
|
||||||
for (long id : ids) {
|
for (long id : ids) {
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
contentValues.put(EXPIRE_STARTED, startedAtTimestamp);
|
contentValues.put(EXPIRE_STARTED, startedAtTimestamp);
|
||||||
|
|
||||||
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[]{String.valueOf(id)});
|
db.update(TABLE_NAME, contentValues, query, new String[]{String.valueOf(id), String.valueOf(startedAtTimestamp)});
|
||||||
|
|
||||||
if (threadId < 0) {
|
if (threadId < 0) {
|
||||||
threadId = getThreadIdForMessage(id);
|
threadId = getThreadIdForMessage(id);
|
||||||
|
|
Loading…
Add table
Reference in a new issue