diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 148fdd2469..4cb7457249 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 6378685636..712fa4139f 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -163,7 +163,7 @@ jsoup = "org.jsoup:jsoup:1.18.1"
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
molecule-runtime = "app.cash.molecule:molecule-runtime:2.0.0"
timber = "com.jakewharton.timber:timber:5.0.1"
-matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.38"
+matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.39"
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt
index a52d3a87ed..b149f88006 100644
--- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt
+++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt
@@ -51,23 +51,15 @@ class RoomSyncSubscriber(
includeHeroes = false,
)
- suspend fun subscribe(roomId: RoomId) = mutex.withLock {
- withContext(dispatchers.io) {
- try {
- subscribeToRoom(roomId)
- } catch (exception: Exception) {
- Timber.e("Failed to subscribe to room $roomId")
- }
- }
- }
-
- suspend fun batchSubscribe(roomIds: List) = mutex.withLock {
- withContext(dispatchers.io) {
- for (roomId in roomIds) {
+ suspend fun subscribe(roomId: RoomId) {
+ mutex.withLock {
+ withContext(dispatchers.io) {
try {
- subscribeToRoom(roomId)
- } catch (cancellationException: CancellationException) {
- throw cancellationException
+ if (!isSubscribedTo(roomId)) {
+ Timber.d("Subscribing to room $roomId}")
+ roomListService.subscribeToRooms(listOf(roomId.value), settings)
+ }
+ subscribedRoomIds.add(roomId)
} catch (exception: Exception) {
Timber.e("Failed to subscribe to room $roomId")
}
@@ -75,14 +67,21 @@ class RoomSyncSubscriber(
}
}
- private fun subscribeToRoom(roomId: RoomId) {
- if (!isSubscribedTo(roomId)) {
- Timber.d("Subscribing to room $roomId}")
- roomListService.room(roomId.value).use { roomListItem ->
- roomListItem.subscribe(settings)
+ suspend fun batchSubscribe(roomIds: List) = mutex.withLock {
+ withContext(dispatchers.io) {
+ try {
+ val roomIdsToSubscribeTo = roomIds.filterNot { isSubscribedTo(it) }
+ if (roomIdsToSubscribeTo.isNotEmpty()) {
+ Timber.d("Subscribing to rooms: $roomIds")
+ roomListService.subscribeToRooms(roomIdsToSubscribeTo.map { it.value }, settings)
+ subscribedRoomIds.addAll(roomIds)
+ }
+ } catch (cancellationException: CancellationException) {
+ throw cancellationException
+ } catch (exception: Exception) {
+ Timber.e(exception, "Failed to subscribe to rooms: $roomIds")
}
}
- subscribedRoomIds.add(roomId)
}
fun isSubscribedTo(roomId: RoomId): Boolean {
diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt
index 33d8a94bb5..abaae99397 100644
--- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt
+++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt
@@ -189,6 +189,8 @@ class RoomSummaryListProcessorTest {
override fun syncIndicator(delayBeforeShowingInMs: UInt, delayBeforeHidingInMs: UInt, listener: RoomListServiceSyncIndicatorListener): TaskHandle {
return TaskHandle(Pointer.NULL)
}
+
+ override fun subscribeToRooms(roomIds: List, settings: RoomSubscription?) = Unit
}
}
@@ -270,6 +272,4 @@ class FakeRoomListItem(
override suspend fun latestEvent(): EventTimelineItem? {
return latestEvent
}
-
- override fun subscribe(settings: RoomSubscription?) = Unit
}