mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-08 09:18:39 +01:00
Do not backup past revision if latest revision is soon-to-expire.
This commit is contained in:
committed by
Nicholas Tinsley
parent
673fe2625c
commit
e3fe852a34
@@ -160,7 +160,7 @@ public class FullBackupExporter extends FullBackupBase {
|
|||||||
for (String table : tables) {
|
for (String table : tables) {
|
||||||
throwIfCanceled(cancellationSignal);
|
throwIfCanceled(cancellationSignal);
|
||||||
if (table.equals(MessageTable.TABLE_NAME)) {
|
if (table.equals(MessageTable.TABLE_NAME)) {
|
||||||
count = exportTable(table, input, outputStream, cursor -> isNonExpiringMessage(cursor), null, count, estimatedCount, cancellationSignal);
|
count = exportTable(table, input, outputStream, cursor -> isNonExpiringMessage(input, cursor), null, count, estimatedCount, cancellationSignal);
|
||||||
} else if (table.equals(ReactionTable.TABLE_NAME)) {
|
} else if (table.equals(ReactionTable.TABLE_NAME)) {
|
||||||
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID)), null, count, estimatedCount, cancellationSignal);
|
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID)), null, count, estimatedCount, cancellationSignal);
|
||||||
} else if (table.equals(MentionTable.TABLE_NAME)) {
|
} else if (table.equals(MentionTable.TABLE_NAME)) {
|
||||||
@@ -579,28 +579,38 @@ public class FullBackupExporter extends FullBackupBase {
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isNonExpiringMessage(@NonNull Cursor cursor) {
|
private static boolean isNonExpiringMessage(@NonNull SQLiteDatabase db, @NonNull Cursor cursor) {
|
||||||
long expireStarted = CursorUtil.requireLong(cursor, MessageTable.EXPIRE_STARTED);
|
long expireStarted = CursorUtil.requireLong(cursor, MessageTable.EXPIRE_STARTED);
|
||||||
long expiresIn = CursorUtil.requireLong(cursor, MessageTable.EXPIRES_IN);
|
long expiresIn = CursorUtil.requireLong(cursor, MessageTable.EXPIRES_IN);
|
||||||
|
long originalMessageId = CursorUtil.requireLong(cursor, MessageTable.ORIGINAL_MESSAGE_ID);
|
||||||
if (expireStarted == 0 || expiresIn == 0) {
|
long latestRevisionId = CursorUtil.requireLong(cursor, MessageTable.LATEST_REVISION_ID);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
long expiresAt = expireStarted + expiresIn;
|
long expiresAt = expireStarted + expiresIn;
|
||||||
long timeRemaining = expiresAt - System.currentTimeMillis();
|
long timeRemaining = expiresAt - System.currentTimeMillis();
|
||||||
|
|
||||||
return timeRemaining > EXPIRATION_BACKUP_THRESHOLD;
|
if (expireStarted > 0 && timeRemaining <= EXPIRATION_BACKUP_THRESHOLD) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (originalMessageId > 0 && !isForNonExpiringMessage(db, originalMessageId)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (latestRevisionId > 0 && !isForNonExpiringMessage(db, latestRevisionId)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isForNonExpiringMessage(@NonNull SQLiteDatabase db, long messageId) {
|
private static boolean isForNonExpiringMessage(@NonNull SQLiteDatabase db, long messageId) {
|
||||||
String[] columns = new String[] { MessageTable.EXPIRE_STARTED, MessageTable.EXPIRES_IN };
|
String[] columns = new String[] { MessageTable.EXPIRE_STARTED, MessageTable.EXPIRES_IN, MessageTable.LATEST_REVISION_ID, MessageTable.ORIGINAL_MESSAGE_ID };
|
||||||
String where = MessageTable.ID + " = ?";
|
String where = MessageTable.ID + " = ?";
|
||||||
String[] args = SqlUtil.buildArgs(messageId);
|
String[] args = SqlUtil.buildArgs(messageId);
|
||||||
|
|
||||||
try (Cursor mmsCursor = db.query(MessageTable.TABLE_NAME, columns, where, args, null, null, null)) {
|
try (Cursor mmsCursor = db.query(MessageTable.TABLE_NAME, columns, where, args, null, null, null)) {
|
||||||
if (mmsCursor != null && mmsCursor.moveToFirst()) {
|
if (mmsCursor != null && mmsCursor.moveToFirst()) {
|
||||||
return isNonExpiringMessage(mmsCursor);
|
return isNonExpiringMessage(db, mmsCursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user