From dc0b508b089ca9ae84f4f0935cb125eb548e91b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Tue, 16 Dec 2025 16:48:01 +0100 Subject: [PATCH] Add `MatrixClient.getDatabaseSizes` This returns a `SdkStoreSizes` object, with the possible SDK database sizes. --- .../libraries/matrix/api/MatrixClient.kt | 2 ++ .../matrix/api/analytics/SdkStoreSizes.kt | 20 +++++++++++++++++++ .../libraries/matrix/impl/RustMatrixClient.kt | 13 ++++++++++++ .../libraries/matrix/test/FakeMatrixClient.kt | 6 ++++++ 4 files changed, 41 insertions(+) create mode 100644 libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index ae803110d5..de6257094b 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -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): Result suspend fun knockRoom(roomIdOrAlias: RoomIdOrAlias, message: String, serverNames: List): Result suspend fun getCacheSize(): Long + suspend fun getDatabaseSizes(): Result /** * Will close the client and delete the cache data. diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt new file mode 100644 index 0000000000..62b68b8fdb --- /dev/null +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/analytics/SdkStoreSizes.kt @@ -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?, +) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 8784a69d7c..739a14a533 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -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 = 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() diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 38d4d1aefe..a2088713a7 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -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 = { Result.success(Unit) }, private val markRoomAsFullyReadResult: (RoomId, EventId) -> Result = { _, _ -> lambdaError() }, private val performDatabaseVacuumLambda: () -> Result = { lambdaError() }, + private val getDatabaseSizesLambda: () -> Result = { lambdaError() }, ) : MatrixClient { var setDisplayNameCalled: Boolean = false private set @@ -184,6 +186,10 @@ class FakeMatrixClient( return 0 } + override suspend fun getDatabaseSizes(): Result { + return getDatabaseSizesLambda() + } + override suspend fun clearCache() = simulateLongTask { clearCacheLambda() }