Fix polls in local backups.

This commit is contained in:
Michelle Tang
2026-01-06 11:13:43 -05:00
committed by jeffrey-signal
parent 88be84297e
commit 1da75018eb

View File

@@ -39,6 +39,7 @@ import org.thoughtcrime.securesms.database.MentionTable;
import org.thoughtcrime.securesms.database.MessageTable;
import org.thoughtcrime.securesms.database.OneTimePreKeyTable;
import org.thoughtcrime.securesms.database.PendingRetryReceiptTable;
import org.thoughtcrime.securesms.database.PollTables;
import org.thoughtcrime.securesms.database.ReactionTable;
import org.thoughtcrime.securesms.database.RemappedRecordTables;
import org.thoughtcrime.securesms.database.RemoteMegaphoneTable;
@@ -180,6 +181,12 @@ public class FullBackupExporter extends FullBackupBase {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(GroupReceiptTable.MMS_ID))), null, count, estimatedCount, cancellationSignal);
} else if (table.equals(AttachmentTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.MESSAGE_ID))), (cursor, innerCount) -> exportAttachment(attachmentSecret, cursor, outputStream, innerCount, estimatedCount), count, estimatedCount, cancellationSignal);
} else if (table.equals(PollTables.PollTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(PollTables.PollTable.MESSAGE_ID))), null, count, estimatedCount, cancellationSignal);
} else if (table.equals(PollTables.PollOptionTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringPollMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(PollTables.PollOptionTable.POLL_ID))), null, count, estimatedCount, cancellationSignal);
} else if (table.equals(PollTables.PollVoteTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> isForNonExpiringPollMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(PollTables.PollVoteTable.POLL_ID))), null, count, estimatedCount, cancellationSignal);
} else if (table.equals(StickerTable.TABLE_NAME)) {
count = exportTable(table, input, outputStream, cursor -> true, (cursor, innerCount) -> exportSticker(attachmentSecret, cursor, outputStream, innerCount, estimatedCount), count, estimatedCount, cancellationSignal);
} else if (!TABLE_CONTENT_BLOCKLIST.contains(table)) {
@@ -624,6 +631,20 @@ public class FullBackupExporter extends FullBackupBase {
return false;
}
private static boolean isForNonExpiringPollMessage(@NonNull SQLiteDatabase db, long pollId) {
String[] columns = new String[] { PollTables.PollTable.MESSAGE_ID };
String where = PollTables.PollTable.ID + " = ?";
String[] args = SqlUtil.buildArgs(pollId);
try (Cursor cursor = db.query(PollTables.PollTable.TABLE_NAME, columns, where, args, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
return isForNonExpiringMessage(db, cursor.getLong(cursor.getColumnIndexOrThrow(PollTables.PollTable.MESSAGE_ID)));
}
}
return false;
}
public interface PostProcessor {
int postProcess(@NonNull Cursor cursor, int count) throws IOException;
}