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 a4b808d653..f974fbf674 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 @@ -105,4 +105,14 @@ interface MatrixClient : Closeable { suspend fun getRecentlyVisitedRooms(): Result> suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result suspend fun getRoomPreviewFromRoomId(roomId: RoomId, serverNames: List): Result + + /** + * Enables or disables the sending queue, according to the given parameter. + * + * The sending queue automatically disables itself whenever sending an + * event with it failed (e.g., sending an event via the Timeline, + * so it's required to manually re-enable it as soon as + * connectivity is back on the device. + */ + suspend fun enableSendingQueue(enable: Boolean) } 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 4319077946..724a7451f9 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 @@ -551,6 +551,10 @@ class RustMatrixClient( }.distinctUntilChanged() } + override suspend fun enableSendingQueue(enable: Boolean) = withContext(sessionDispatcher){ + client.enableSendingQueue(enable) + } + private suspend fun File.getCacheSize( includeCryptoDb: Boolean = false, ): Long = withContext(sessionDispatcher) { @@ -590,6 +594,9 @@ class RustMatrixClient( true } } + + + } private val defaultRoomCreationPowerLevels = PowerLevels( 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 be029705fb..8a6facaee2 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 @@ -48,6 +48,7 @@ import io.element.android.libraries.matrix.test.roomdirectory.FakeRoomDirectoryS import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService import io.element.android.libraries.matrix.test.sync.FakeSyncService import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService +import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.simulateLongTask import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -298,4 +299,10 @@ class FakeMatrixClient( } override fun getRoomInfoFlow(roomId: RoomId) = getRoomInfoFlowLambda(roomId) + + var enableSendingQueueLambda = lambdaRecorder(ensureNeverCalled = true) { enable: Boolean -> + // no-op + } + + override suspend fun enableSendingQueue(enable: Boolean) = enableSendingQueueLambda(enable) }