Exclude remote megaphones from local backups.

This commit is contained in:
Cody Henthorne
2025-05-30 13:20:05 -04:00
parent 3bd4e39093
commit b2f1867787
5 changed files with 13 additions and 10 deletions

View File

@@ -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,

View File

@@ -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;
}

View File

@@ -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"

View File

@@ -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)
}
}
}

View File

@@ -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)
}
}
}