mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 04:58:45 +00:00
Regularly delete any archived media we don't know about.
This commit is contained in:
@@ -36,9 +36,20 @@ class BackupMessagesJob private constructor(parameters: Parameters) : BaseJob(pa
|
||||
|
||||
const val QUEUE = "BackupMessagesQueue"
|
||||
|
||||
fun enqueue() {
|
||||
/**
|
||||
* Pruning abandoned remote media is relatively expensive, so we should
|
||||
* not do this every time we backup.
|
||||
*/
|
||||
fun enqueue(pruneAbandonedRemoteMedia: Boolean = false) {
|
||||
val jobManager = AppDependencies.jobManager
|
||||
jobManager.add(BackupMessagesJob())
|
||||
if (pruneAbandonedRemoteMedia) {
|
||||
jobManager
|
||||
.startChain(BackupMessagesJob())
|
||||
.then(SyncArchivedMediaJob())
|
||||
.enqueue()
|
||||
} else {
|
||||
jobManager.add(BackupMessagesJob())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.thoughtcrime.securesms.backup.v2.BackupRepository
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.jobmanager.Job
|
||||
import org.thoughtcrime.securesms.jobmanager.JsonJobData
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.whispersystems.signalservice.api.archive.ArchiveGetMediaItemsResponse
|
||||
import org.whispersystems.signalservice.api.push.exceptions.NetworkFailureException
|
||||
import java.lang.Exception
|
||||
@@ -75,6 +76,7 @@ class SyncArchivedMediaJob private constructor(
|
||||
BackupRepository.deleteAbandonedMediaObjects(attachmentsToDelete)
|
||||
Log.i(TAG, "Deleted ${attachmentsToDelete.size} attachments off CDN")
|
||||
}
|
||||
SignalStore.backup.lastMediaSyncTime = System.currentTimeMillis()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,6 +26,7 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) {
|
||||
|
||||
private const val KEY_NEXT_BACKUP_TIME = "backup.nextBackupTime"
|
||||
private const val KEY_LAST_BACKUP_TIME = "backup.lastBackupTime"
|
||||
private const val KEY_LAST_BACKUP_MEDIA_SYNC_TIME = "backup.lastBackupMediaSyncTime"
|
||||
private const val KEY_BACKUP_FREQUENCY = "backup.backupFrequency"
|
||||
|
||||
private const val KEY_CDN_BACKUP_DIRECTORY = "backup.cdn.directory"
|
||||
@@ -59,6 +60,7 @@ class BackupValues(store: KeyValueStore) : SignalStoreValues(store) {
|
||||
|
||||
var nextBackupTime: Long by longValue(KEY_NEXT_BACKUP_TIME, -1)
|
||||
var lastBackupTime: Long by longValue(KEY_LAST_BACKUP_TIME, -1)
|
||||
var lastMediaSyncTime: Long by longValue(KEY_LAST_BACKUP_MEDIA_SYNC_TIME, -1)
|
||||
var backupFrequency: BackupFrequency by enumValue(KEY_BACKUP_FREQUENCY, BackupFrequency.MANUAL, BackupFrequency.Serializer)
|
||||
var backupTier: MessageBackupTier? by enumValue(KEY_BACKUP_TIER, null, MessageBackupTier.Serializer)
|
||||
|
||||
|
||||
@@ -26,13 +26,15 @@ class MessageBackupListener : PersistentAlarmManagerListener() {
|
||||
|
||||
override fun onAlarm(context: Context, scheduledTime: Long): Long {
|
||||
if (SignalStore.backup.areBackupsEnabled) {
|
||||
BackupMessagesJob.enqueue()
|
||||
val timeSinceLastSync = System.currentTimeMillis() - SignalStore.backup.lastMediaSyncTime
|
||||
BackupMessagesJob.enqueue(pruneAbandonedRemoteMedia = timeSinceLastSync >= BACKUP_MEDIA_SYNC_INTERVAL || timeSinceLastSync < 0)
|
||||
}
|
||||
return setNextBackupTimeToIntervalFromNow()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val BACKUP_JITTER_WINDOW_SECONDS = Math.toIntExact(TimeUnit.MINUTES.toSeconds(10))
|
||||
private val BACKUP_MEDIA_SYNC_INTERVAL = TimeUnit.DAYS.toMillis(7)
|
||||
|
||||
@JvmStatic
|
||||
fun schedule(context: Context?) {
|
||||
|
||||
Reference in New Issue
Block a user