Calculate remote backup media quota usage locally.

This commit is contained in:
Cody Henthorne
2025-06-06 10:47:32 -04:00
committed by Greyson Parrelli
parent efa9dd6ec3
commit 882a11c420
12 changed files with 119 additions and 37 deletions

View File

@@ -25,6 +25,7 @@ import org.signal.core.util.billing.BillingPurchaseResult
import org.signal.core.util.bytes
import org.signal.core.util.logging.Log
import org.signal.core.util.money.FiatMoney
import org.signal.core.util.throttleLatest
import org.signal.donations.InAppPaymentType
import org.thoughtcrime.securesms.backup.ArchiveUploadProgress
import org.thoughtcrime.securesms.backup.DeletionState
@@ -39,6 +40,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaym
import org.thoughtcrime.securesms.components.settings.app.subscription.RecurringInAppPaymentRepository
import org.thoughtcrime.securesms.database.InAppPaymentTable
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.attachmentUpdates
import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobs.BackupMessagesJob
@@ -63,7 +65,6 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
RemoteBackupsSettingsState(
backupsEnabled = SignalStore.backup.areBackupsEnabled,
lastBackupTimestamp = SignalStore.backup.lastBackupTime,
backupMediaSize = SignalStore.backup.totalBackupSize,
backupsFrequency = SignalStore.backup.backupFrequency,
canBackUpUsingCellular = SignalStore.backup.backupWithCellular,
canRestoreUsingCellular = SignalStore.backup.restoreWithCellular
@@ -77,6 +78,10 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
val restoreState: StateFlow<BackupRestoreState> = _restoreState
init {
viewModelScope.launch(Dispatchers.IO) {
_state.update { it.copy(backupMediaSize = SignalDatabase.attachments.getEstimatedArchiveMediaSize()) }
}
viewModelScope.launch(Dispatchers.IO) {
SignalStore.backup.deletionStateFlow.collectLatest {
refresh()
@@ -91,6 +96,16 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
}
}
viewModelScope.launch(Dispatchers.IO) {
AppDependencies
.databaseObserver
.attachmentUpdates()
.throttleLatest(5.seconds)
.collectLatest {
_state.update { it.copy(backupMediaSize = SignalDatabase.attachments.getEstimatedArchiveMediaSize()) }
}
}
viewModelScope.launch(Dispatchers.IO) {
val restoreProgress = MediaRestoreProgressBanner()
@@ -222,7 +237,7 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
backupsEnabled = SignalStore.backup.areBackupsEnabled,
backupState = RemoteBackupsSettingsState.BackupState.Loading,
lastBackupTimestamp = SignalStore.backup.lastBackupTime,
backupMediaSize = SignalStore.backup.totalBackupSize,
backupMediaSize = SignalDatabase.attachments.getEstimatedArchiveMediaSize(),
backupsFrequency = SignalStore.backup.backupFrequency,
canBackUpUsingCellular = SignalStore.backup.backupWithCellular,
canRestoreUsingCellular = SignalStore.backup.restoreWithCellular
@@ -392,7 +407,4 @@ class RemoteBackupsSettingsViewModel : ViewModel() {
}
}
}
private fun refreshLocalState() {
}
}