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 f974fbf674..3afcefaa6f 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 @@ -115,4 +115,10 @@ interface MatrixClient : Closeable { * connectivity is back on the device. */ suspend fun enableSendingQueue(enable: Boolean) + + /** + * Returns the current status of the sending queue as a [StateFlow]. + * If true, the sending queue is enabled. + */ + fun sendingQueueStatus(): StateFlow } 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 724a7451f9..8c8e04e3f8 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 @@ -98,6 +98,7 @@ import org.matrix.rustcomponents.sdk.ClientDelegate import org.matrix.rustcomponents.sdk.IgnoredUsersListener import org.matrix.rustcomponents.sdk.NotificationProcessSetup import org.matrix.rustcomponents.sdk.PowerLevels +import org.matrix.rustcomponents.sdk.SendingQueueStatusListener import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.use import timber.log.Timber @@ -551,10 +552,20 @@ class RustMatrixClient( }.distinctUntilChanged() } - override suspend fun enableSendingQueue(enable: Boolean) = withContext(sessionDispatcher){ + override suspend fun enableSendingQueue(enable: Boolean) = withContext(sessionDispatcher) { client.enableSendingQueue(enable) } + override fun sendingQueueStatus(): StateFlow = mxCallbackFlow { + client.subscribeToSendingQueueStatus(object : SendingQueueStatusListener { + override fun onValue(newValue: Boolean) { + channel.trySend(newValue) + } + }) + } + .buffer(Channel.UNLIMITED) + .stateIn(sessionCoroutineScope, started = SharingStarted.Eagerly, initialValue = true) + private suspend fun File.getCacheSize( includeCryptoDb: Boolean = false, ): Long = withContext(sessionDispatcher) { @@ -594,9 +605,6 @@ 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 8a6facaee2..23efbdb7fa 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 @@ -305,4 +305,7 @@ class FakeMatrixClient( } override suspend fun enableSendingQueue(enable: Boolean) = enableSendingQueueLambda(enable) + + var sendingQueueStatusFlow = MutableStateFlow(true) + override fun sendingQueueStatus(): StateFlow = sendingQueueStatusFlow }