From 8a584204e4e80e7e18e3b51d6071b81ad24ace0d Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Tue, 10 Dec 2024 14:39:03 -0500 Subject: [PATCH] Limit wallpaper uploading to media tier. --- .../v2/database/ThreadTableArchiveExtensions.kt | 4 ++-- .../backup/v2/exporters/ChatArchiveExporter.kt | 11 +++++++++-- .../backup/v2/processor/ChatArchiveProcessor.kt | 7 ++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableArchiveExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableArchiveExtensions.kt index b41a55153c..b180a7587b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableArchiveExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableArchiveExtensions.kt @@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.ThreadTable -fun ThreadTable.getThreadsForBackup(db: SignalDatabase): ChatArchiveExporter { +fun ThreadTable.getThreadsForBackup(db: SignalDatabase, includeImageWallpapers: Boolean): ChatArchiveExporter { //language=sql val query = """ SELECT @@ -40,7 +40,7 @@ fun ThreadTable.getThreadsForBackup(db: SignalDatabase): ChatArchiveExporter { """ val cursor = readableDatabase.query(query) - return ChatArchiveExporter(cursor, db) + return ChatArchiveExporter(cursor, db, includeImageWallpapers) } fun ThreadTable.getThreadGroupStatus(messageIds: Collection): Map { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatArchiveExporter.kt index e8fad00f8b..46fa3b8ed8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatArchiveExporter.kt @@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper import java.io.Closeable import kotlin.time.Duration.Companion.seconds -class ChatArchiveExporter(private val cursor: Cursor, private val db: SignalDatabase) : Iterator, Closeable { +class ChatArchiveExporter(private val cursor: Cursor, private val db: SignalDatabase, private val includeImageWallpapers: Boolean) : Iterator, Closeable { override fun hasNext(): Boolean { return cursor.count > 0 && !cursor.isLast } @@ -40,7 +40,14 @@ class ChatArchiveExporter(private val cursor: Cursor, private val db: SignalData } val chatWallpaper: Wallpaper? = cursor.requireBlob(RecipientTable.WALLPAPER)?.let { serializedWallpaper -> - Wallpaper.ADAPTER.decodeOrNull(serializedWallpaper) + val wallpaper = Wallpaper.ADAPTER.decodeOrNull(serializedWallpaper) + val isImageWallpaper = wallpaper?.file_ != null + + if (includeImageWallpapers || !isImageWallpaper) { + wallpaper + } else { + null + } } return Chat( diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt index 08aed203c6..25f59033a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatArchiveProcessor.kt @@ -8,12 +8,14 @@ package org.thoughtcrime.securesms.backup.v2.processor import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.ExportState import org.thoughtcrime.securesms.backup.v2.ImportState +import org.thoughtcrime.securesms.backup.v2.MessageBackupTier import org.thoughtcrime.securesms.backup.v2.database.getThreadsForBackup import org.thoughtcrime.securesms.backup.v2.importer.ChatArchiveImporter import org.thoughtcrime.securesms.backup.v2.proto.Chat import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.backup.v2.stream.BackupFrameEmitter import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.RecipientId /** @@ -23,7 +25,10 @@ object ChatArchiveProcessor { val TAG = Log.tag(ChatArchiveProcessor::class.java) fun export(db: SignalDatabase, exportState: ExportState, emitter: BackupFrameEmitter) { - db.threadTable.getThreadsForBackup(db).use { reader -> + val includeImageWallpapers = SignalStore.backup.backupTier == MessageBackupTier.PAID + Log.i(TAG, "Including wallpapers: $includeImageWallpapers") + + db.threadTable.getThreadsForBackup(db, includeImageWallpapers).use { reader -> for (chat in reader) { if (exportState.recipientIds.contains(chat.recipientId)) { exportState.threadIds.add(chat.id)