Add media retention policy (#5749)

* Add media retention policy.

Add `ByteSize` class to help with conversions between byte units.

* Use bit shifting instead of multiplication

Improve the tests too
This commit is contained in:
Jorge Martin Espinosa 2025-11-18 08:53:45 +01:00 committed by GitHub
parent 584ec4f64e
commit 36ecb440ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 94 additions and 0 deletions

View file

@ -10,6 +10,8 @@ package io.element.android.libraries.matrix.impl
import dev.zacsweers.metro.Inject
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.core.data.ByteUnit
import io.element.android.libraries.core.data.megaBytes
import io.element.android.libraries.di.CacheDirectory
import io.element.android.libraries.di.annotations.AppCoroutineScope
import io.element.android.libraries.featureflag.api.FeatureFlagService
@ -37,10 +39,13 @@ import org.matrix.rustcomponents.sdk.SlidingSyncVersionBuilder
import org.matrix.rustcomponents.sdk.SqliteStoreBuilder
import org.matrix.rustcomponents.sdk.use
import timber.log.Timber
import uniffi.matrix_sdk_base.MediaRetentionPolicy
import uniffi.matrix_sdk_crypto.CollectStrategy
import uniffi.matrix_sdk_crypto.DecryptionSettings
import uniffi.matrix_sdk_crypto.TrustRequirement
import java.io.File
import kotlin.time.Duration.Companion.days
import kotlin.time.toJavaDuration
@Inject
class RustMatrixClientFactory(
@ -70,6 +75,19 @@ class RustMatrixClientFactory(
.username(sessionData.userId)
.use { it.build() }
client.setMediaRetentionPolicy(
MediaRetentionPolicy(
// Make this 500MB instead of 400MB
maxCacheSize = 500.megaBytes.to(ByteUnit.BYTES).toULong(),
// This is the default value, but let's make it explicit
maxFileSize = 20.megaBytes.to(ByteUnit.BYTES).toULong(),
// Use 30 days instead of 60
lastAccessExpiry = 30.days.toJavaDuration(),
// This is the default value, but let's make it explicit
cleanupFrequency = 1.days.toJavaDuration(),
)
)
client.restoreSession(sessionData.toSession())
create(client)