Add MatrixClient.getDatabaseSizes

This returns a `SdkStoreSizes` object, with the possible SDK database sizes.
This commit is contained in:
Jorge Martín
2025-12-16 16:48:01 +01:00
committed by Jorge Martin Espinosa
parent 18482a99e3
commit dc0b508b08
4 changed files with 41 additions and 0 deletions

View File

@@ -9,6 +9,7 @@
package io.element.android.libraries.matrix.api
import io.element.android.libraries.core.data.tryOrNull
import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.MatrixPatterns
@@ -81,6 +82,7 @@ interface MatrixClient {
suspend fun joinRoomByIdOrAlias(roomIdOrAlias: RoomIdOrAlias, serverNames: List<String>): Result<RoomInfo?>
suspend fun knockRoom(roomIdOrAlias: RoomIdOrAlias, message: String, serverNames: List<String>): Result<RoomInfo?>
suspend fun getCacheSize(): Long
suspend fun getDatabaseSizes(): Result<SdkStoreSizes>
/**
* Will close the client and delete the cache data.

View File

@@ -0,0 +1,20 @@
/*
* Copyright (c) 2025 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.matrix.api.analytics
import io.element.android.libraries.core.data.ByteSize
/**
* The sizes of the different stores (DBs) in the SDK.
*/
data class SdkStoreSizes(
val stateStore: ByteSize?,
val eventCacheStore: ByteSize?,
val mediaStore: ByteSize?,
val cryptoStore: ByteSize?,
)

View File

@@ -12,11 +12,13 @@ import io.element.android.libraries.androidutils.file.getSizeOfFiles
import io.element.android.libraries.core.bool.orFalse
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.core.coroutine.childScope
import io.element.android.libraries.core.data.bytes
import io.element.android.libraries.core.data.tryOrNull
import io.element.android.libraries.core.extensions.mapFailure
import io.element.android.libraries.core.extensions.runCatchingExceptions
import io.element.android.libraries.featureflag.api.FeatureFlagService
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomAlias
@@ -566,6 +568,17 @@ class RustMatrixClient(
return getCacheSize(includeCryptoDb = false)
}
override suspend fun getDatabaseSizes(): Result<SdkStoreSizes> = runCatchingExceptions {
innerClient.getStoreSizes().run {
SdkStoreSizes(
stateStore = stateStore?.bytes,
eventCacheStore = eventCacheStore?.bytes,
mediaStore = mediaStore?.bytes,
cryptoStore = cryptoStore?.bytes,
)
}
}
override suspend fun clearCache() {
innerClient.clearCaches(innerSyncService)
destroy()

View File

@@ -9,6 +9,7 @@
package io.element.android.libraries.matrix.test
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.analytics.SdkStoreSizes
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomAlias
@@ -105,6 +106,7 @@ class FakeMatrixClient(
private val addRecentEmojiLambda: (String) -> Result<Unit> = { Result.success(Unit) },
private val markRoomAsFullyReadResult: (RoomId, EventId) -> Result<Unit> = { _, _ -> lambdaError() },
private val performDatabaseVacuumLambda: () -> Result<Unit> = { lambdaError() },
private val getDatabaseSizesLambda: () -> Result<SdkStoreSizes> = { lambdaError() },
) : MatrixClient {
var setDisplayNameCalled: Boolean = false
private set
@@ -184,6 +186,10 @@ class FakeMatrixClient(
return 0
}
override suspend fun getDatabaseSizes(): Result<SdkStoreSizes> {
return getDatabaseSizesLambda()
}
override suspend fun clearCache() = simulateLongTask {
clearCacheLambda()
}