Add optimize storage infrastructure for backupsv2.

This commit is contained in:
Cody Henthorne
2024-09-20 16:47:18 -04:00
committed by GitHub
parent 7935d12675
commit a10958ee13
16 changed files with 391 additions and 94 deletions

View File

@@ -383,7 +383,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
)
} else {
AppDependencies.jobManager.add(
RestoreAttachmentJob(
RestoreAttachmentJob.forInitialRestore(
messageId = insertMessage.messageId,
attachmentId = archivedAttachment.attachmentId
)

View File

@@ -106,11 +106,11 @@ class ManageStorageSettingsFragment : ComposeFragment() {
onSetChatLengthLimit = { navController.navigate("set-chat-length-limit") },
onSyncTrimThreadDeletes = { viewModel.setSyncTrimDeletes(it) },
onDeleteChatHistory = { navController.navigate("confirm-delete-chat-history") },
onToggleOnDeviceStorageOptimization = {
onToggleOnDeviceStorageOptimization = { enabled ->
if (state.onDeviceStorageOptimizationState == ManageStorageSettingsViewModel.OnDeviceStorageOptimizationState.REQUIRES_PAID_TIER) {
UpgradeToEnableOptimizedStorageSheet().show(parentFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
} else {
viewModel.setOptimizeStorage(it)
viewModel.setOptimizeStorage(enabled)
}
}
)
@@ -535,6 +535,7 @@ private fun ManageStorageSettingsScreenPreview() {
state = ManageStorageSettingsViewModel.ManageStorageState(
keepMessagesDuration = KeepMessagesDuration.FOREVER,
lengthLimit = ManageStorageSettingsViewModel.ManageStorageState.NO_LIMIT,
syncTrimDeletes = true,
onDeviceStorageOptimizationState = ManageStorageSettingsViewModel.OnDeviceStorageOptimizationState.DISABLED
)
)

View File

@@ -19,6 +19,8 @@ import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.SignalDatabase.Companion.media
import org.thoughtcrime.securesms.database.ThreadTable
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobs.OptimizeMediaJob
import org.thoughtcrime.securesms.jobs.RestoreOptimizedMediaJob
import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.RemoteConfig
@@ -95,7 +97,12 @@ class ManageStorageSettingsViewModel : ViewModel() {
val storageState = getOnDeviceStorageOptimizationState()
if (storageState >= OnDeviceStorageOptimizationState.DISABLED) {
SignalStore.backup.optimizeStorage = enabled
store.update { it.copy(onDeviceStorageOptimizationState = if (enabled) OnDeviceStorageOptimizationState.ENABLED else OnDeviceStorageOptimizationState.DISABLED) }
store.update {
it.copy(
onDeviceStorageOptimizationState = if (enabled) OnDeviceStorageOptimizationState.ENABLED else OnDeviceStorageOptimizationState.DISABLED,
storageOptimizationStateChanged = true
)
}
}
}
@@ -112,6 +119,16 @@ class ManageStorageSettingsViewModel : ViewModel() {
}
}
override fun onCleared() {
if (state.value.storageOptimizationStateChanged) {
when (state.value.onDeviceStorageOptimizationState) {
OnDeviceStorageOptimizationState.DISABLED -> RestoreOptimizedMediaJob.enqueue()
OnDeviceStorageOptimizationState.ENABLED -> OptimizeMediaJob.enqueue()
else -> Unit
}
}
}
enum class OnDeviceStorageOptimizationState {
/**
* The entire feature is not available and the option should not be displayed to the user.
@@ -136,11 +153,12 @@ class ManageStorageSettingsViewModel : ViewModel() {
@Immutable
data class ManageStorageState(
val keepMessagesDuration: KeepMessagesDuration = KeepMessagesDuration.FOREVER,
val lengthLimit: Int = NO_LIMIT,
val syncTrimDeletes: Boolean = true,
val keepMessagesDuration: KeepMessagesDuration,
val lengthLimit: Int,
val syncTrimDeletes: Boolean,
val breakdown: MediaTable.StorageBreakdown? = null,
val onDeviceStorageOptimizationState: OnDeviceStorageOptimizationState
val onDeviceStorageOptimizationState: OnDeviceStorageOptimizationState,
val storageOptimizationStateChanged: Boolean = false
) {
companion object {
const val NO_LIMIT = 0