From b2f1867787c072c3f4f4a3c568e73e223af103ac Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 30 May 2025 13:20:05 -0400 Subject: [PATCH] Exclude remote megaphones from local backups. --- .../securesms/backup/FullBackupExporter.java | 4 +++- .../securesms/backup/FullBackupImporter.java | 9 +++++---- .../securesms/database/RemoteMegaphoneTable.kt | 2 +- .../securesms/jobs/RetrieveRemoteAnnouncementsJob.kt | 2 +- .../securesms/megaphone/RemoteMegaphoneRepository.kt | 6 +++--- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index e9d1f74606..004fa66df7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -38,6 +38,7 @@ import org.thoughtcrime.securesms.database.OneTimePreKeyTable; import org.thoughtcrime.securesms.database.PendingRetryReceiptTable; import org.thoughtcrime.securesms.database.ReactionTable; import org.thoughtcrime.securesms.database.RemappedRecordTables; +import org.thoughtcrime.securesms.database.RemoteMegaphoneTable; import org.thoughtcrime.securesms.database.SearchTable; import org.thoughtcrime.securesms.database.SenderKeyTable; import org.thoughtcrime.securesms.database.SenderKeySharedTable; @@ -95,7 +96,8 @@ public class FullBackupExporter extends FullBackupBase { PendingRetryReceiptTable.TABLE_NAME, AvatarPickerDatabase.TABLE_NAME, RemappedRecordTables.Recipients.TABLE_NAME, - RemappedRecordTables.Threads.TABLE_NAME + RemappedRecordTables.Threads.TABLE_NAME, + RemoteMegaphoneTable.TABLE_NAME ); public static BackupEvent export(@NonNull Context context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java index d16b28d335..e13b945b0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java @@ -168,11 +168,12 @@ public class FullBackupImporter extends FullBackupBase { return; } - boolean isForMmsFtsSecretTable = statement.statement.contains(SearchTable.FTS_TABLE_NAME + "_"); - boolean isForEmojiSecretTable = statement.statement.contains(EmojiSearchTable.TABLE_NAME + "_"); - boolean isForSqliteSecretTable = statement.statement.toLowerCase().startsWith("create table sqlite_"); + boolean isForMmsFtsSecretTable = statement.statement.contains(SearchTable.FTS_TABLE_NAME + "_"); + boolean isForEmojiSecretTable = statement.statement.contains(EmojiSearchTable.TABLE_NAME + "_"); + boolean isForSqliteSecretTable = statement.statement.toLowerCase().startsWith("create table sqlite_"); + boolean isForRemoteMegaphoneTable = statement.statement.toLowerCase().startsWith("insert into remote_megaphone"); - if (isForMmsFtsSecretTable || isForEmojiSecretTable || isForSqliteSecretTable) { + if (isForMmsFtsSecretTable || isForEmojiSecretTable || isForSqliteSecretTable || isForRemoteMegaphoneTable) { Log.i(TAG, "Ignoring import for statement: " + statement.statement); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt index 9f38be56af..306b4547d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt @@ -29,7 +29,7 @@ class RemoteMegaphoneTable(context: Context, databaseHelper: SignalDatabase) : D companion object { private val TAG = Log.tag(RemoteMegaphoneTable::class.java) - private const val TABLE_NAME = "remote_megaphone" + const val TABLE_NAME = "remote_megaphone" private const val ID = "_id" private const val UUID = "uuid" private const val COUNTRIES = "countries" diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt index e453505427..453771d89e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt @@ -323,10 +323,10 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool if (megaphonesToDelete.isNotEmpty()) { Log.i(TAG, "Clearing ${megaphonesToDelete.size} stale megaphones ${megaphonesToDelete.keys}") for ((uuid, megaphone) in megaphonesToDelete) { + SignalDatabase.remoteMegaphones.clear(uuid) if (megaphone.imageUri != null) { BlobProvider.getInstance().delete(context, megaphone.imageUri) } - SignalDatabase.remoteMegaphones.clear(uuid) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt index 0159a5f098..935d533c1b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt @@ -47,12 +47,12 @@ object RemoteMegaphoneRepository { } private val finish: Action = Action { context, controller, remote -> - if (remote.imageUri != null) { - BlobProvider.getInstance().delete(context, remote.imageUri) - } controller.onMegaphoneSnooze(Megaphones.Event.REMOTE_MEGAPHONE) SignalExecutors.BOUNDED_IO.execute { db.markFinished(remote.uuid) + if (remote.imageUri != null) { + BlobProvider.getInstance().delete(context, remote.imageUri) + } } }