Refactor and cleanup backupv2 media restore.

This commit is contained in:
Cody Henthorne
2024-09-11 12:38:19 -04:00
parent baa6032770
commit 816006c67e
25 changed files with 498 additions and 671 deletions

View File

@@ -184,7 +184,8 @@ class InternalBackupPlaygroundFragment : ComposeFragment() {
deleteArchivedMedia = { viewModel.deleteArchivedMedia(it) },
batchArchiveAttachmentMedia = { viewModel.archiveAttachmentMedia(it) },
batchDeleteBackupAttachmentMedia = { viewModel.deleteArchivedMedia(it) },
restoreArchivedMedia = { viewModel.restoreArchivedMedia(it) }
restoreArchivedMedia = { viewModel.restoreArchivedMedia(it, asThumbnail = false) },
restoreArchivedMediaThumbnail = { viewModel.restoreArchivedMedia(it, asThumbnail = true) }
)
}
)
@@ -450,7 +451,8 @@ fun MediaList(
deleteArchivedMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit,
batchArchiveAttachmentMedia: (Set<AttachmentId>) -> Unit,
batchDeleteBackupAttachmentMedia: (Set<AttachmentId>) -> Unit,
restoreArchivedMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit
restoreArchivedMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit,
restoreArchivedMediaThumbnail: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit
) {
if (!enabled) {
Text(
@@ -553,6 +555,14 @@ fun MediaList(
}
)
DropdownMenuItem(
text = { Text("Pseudo Restore Thumbnail") },
onClick = {
selectionState = selectionState.copy(expandedOption = null)
restoreArchivedMediaThumbnail(attachment)
}
)
if (attachment.dbAttachment.dataHash != null && attachment.state == InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED_UNDOWNLOADED) {
DropdownMenuItem(
text = { Text("Re-copy with hash") },

View File

@@ -32,11 +32,12 @@ import org.thoughtcrime.securesms.database.MessageType
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobs.ArchiveAttachmentJob
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob
import org.thoughtcrime.securesms.jobs.AttachmentUploadJob
import org.thoughtcrime.securesms.jobs.BackupMessagesJob
import org.thoughtcrime.securesms.jobs.BackupRestoreJob
import org.thoughtcrime.securesms.jobs.BackupRestoreMediaJob
import org.thoughtcrime.securesms.jobs.RestoreAttachmentJob
import org.thoughtcrime.securesms.jobs.RestoreAttachmentThumbnailJob
import org.thoughtcrime.securesms.jobs.RestoreLocalAttachmentJob
import org.thoughtcrime.securesms.jobs.SyncArchivedMediaJob
import org.thoughtcrime.securesms.keyvalue.SignalStore
@@ -346,7 +347,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
}
}
fun restoreArchivedMedia(attachment: BackupAttachment) {
fun restoreArchivedMedia(attachment: BackupAttachment, asThumbnail: Boolean) {
disposables += Completable
.fromCallable {
val recipientId = SignalStore.releaseChannel.releaseChannelRecipientId!!
@@ -365,20 +366,29 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
val insertMessage = SignalDatabase.messages.insertMessageInbox(message, threadId).get()
SignalDatabase.attachments.debugCopyAttachmentForArchiveRestore(
insertMessage.messageId,
attachment.dbAttachment
mmsId = insertMessage.messageId,
attachment = attachment.dbAttachment,
forThumbnail = asThumbnail
)
val archivedAttachment = SignalDatabase.attachments.getAttachmentsForMessage(insertMessage.messageId).first()
AppDependencies.jobManager.add(
AttachmentDownloadJob(
messageId = insertMessage.messageId,
attachmentId = archivedAttachment.attachmentId,
manual = false,
forceArchiveDownload = true
if (asThumbnail) {
AppDependencies.jobManager.add(
RestoreAttachmentThumbnailJob(
messageId = insertMessage.messageId,
attachmentId = archivedAttachment.attachmentId,
highPriority = false
)
)
)
} else {
AppDependencies.jobManager.add(
RestoreAttachmentJob(
messageId = insertMessage.messageId,
attachmentId = archivedAttachment.attachmentId
)
)
}
}
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.single())