From 461264fea4daf44c88cc520e565e3083d6176a88 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 18 Sep 2024 21:07:39 +0200 Subject: [PATCH] Room list : debounce subscribe to visible rooms. --- .../android/features/roomlist/impl/RoomListPresenter.kt | 8 ++++++-- .../libraries/matrix/impl/roomlist/RustRoomListService.kt | 6 +----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 2983b6b695..bd65b2634d 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -61,7 +61,7 @@ import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job -import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.first @@ -73,6 +73,7 @@ import kotlinx.coroutines.launch import javax.inject.Inject private const val EXTENDED_RANGE_SIZE = 40 +private const val SUBSCRIBE_TO_VISIBLE_ROOMS_DEBOUNCE_IN_MILLIS = 300L class RoomListPresenter @Inject constructor( private val client: MatrixClient, @@ -301,7 +302,10 @@ class RoomListPresenter @Inject constructor( private var currentUpdateVisibleRangeJob: Job? = null private fun CoroutineScope.updateVisibleRange(range: IntRange) { currentUpdateVisibleRangeJob?.cancel() - currentUpdateVisibleRangeJob = launch(SupervisorJob()) { + currentUpdateVisibleRangeJob = launch { + // Debounce the subscription to avoid subscribing to too many rooms + delay(SUBSCRIBE_TO_VISIBLE_ROOMS_DEBOUNCE_IN_MILLIS) + if (range.isEmpty()) return@launch val currentRoomList = roomListDataSource.allRooms.first() // Use extended range to 'prefetch' the next rooms info diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt index b203ec958f..ee0be05e4b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt @@ -53,11 +53,7 @@ internal class RustRoomListService( } override suspend fun subscribeToVisibleRooms(roomIds: List) { - val toSubscribe = roomIds.filterNot { roomSyncSubscriber.isSubscribedTo(it) } - if (toSubscribe.isNotEmpty()) { - Timber.d("Subscribe to ${toSubscribe.size} rooms: $toSubscribe") - roomSyncSubscriber.batchSubscribe(toSubscribe) - } + roomSyncSubscriber.batchSubscribe(roomIds) } override val allRooms: DynamicRoomList = roomListFactory.createRoomList(