Fix slidingSync being slow

This commit is contained in:
ganfra 2023-02-07 19:48:20 +01:00
parent b487e5f128
commit 98ed021438
2 changed files with 12 additions and 18 deletions

View file

@ -83,7 +83,7 @@ internal class RustMatrixClient internal constructor(
}
private val visibleRoomsView = SlidingSyncViewBuilder()
.timelineLimit(limit = 10u)
.timelineLimit(limit = 1u)
.requiredState(
requiredState = listOf(
RequiredState(key = "m.room.avatar", value = ""),
@ -121,10 +121,13 @@ internal class RustMatrixClient internal constructor(
init {
client.setDelegate(clientDelegate)
roomSummaryDataSource.init()
slidingSync.setObserver(slidingSyncObserverProxy)
}
private fun onRestartSync() {
slidingSyncObserverToken = slidingSync.sync()
stopSync()
startSync()
}
override fun getRoom(roomId: RoomId): MatrixRoom? {
@ -139,28 +142,26 @@ internal class RustMatrixClient internal constructor(
)
}
override fun roomSummaryDataSource(): RoomSummaryDataSource = roomSummaryDataSource
override fun mediaResolver(): MediaResolver = mediaResolver
override fun startSync() {
if (client.isSoftLogout()) return
if (isSyncing.compareAndSet(false, true)) {
roomSummaryDataSource.startSync()
slidingSync.setObserver(slidingSyncObserverProxy)
slidingSyncObserverToken = slidingSync.sync()
}
}
override fun stopSync() {
if (isSyncing.compareAndSet(true, false)) {
roomSummaryDataSource.stopSync()
slidingSync.setObserver(null)
slidingSyncObserverToken?.cancel()
}
}
override fun roomSummaryDataSource(): RoomSummaryDataSource = roomSummaryDataSource
override fun mediaResolver(): MediaResolver = mediaResolver
override fun close() {
stopSync()
slidingSync.setObserver(null)
roomSummaryDataSource.close()
client.setDelegate(null)
}

View file

@ -20,16 +20,13 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.matrix.sync.roomListDiff
import io.element.android.libraries.matrix.sync.state
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.cancelChildren
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.matrix.rustcomponents.sdk.RoomListEntry
@ -62,7 +59,7 @@ internal class RustRoomSummaryDataSource(
private val roomSummaries = MutableStateFlow<List<RoomSummary>>(emptyList())
private val state = MutableStateFlow(SlidingSyncState.COLD)
fun startSync() {
fun init() {
coroutineScope.launch {
updateRoomSummaries {
addAll(
@ -91,10 +88,6 @@ internal class RustRoomSummaryDataSource(
}.launchIn(coroutineScope)
}
fun stopSync() {
coroutineScope.coroutineContext.cancelChildren()
}
override fun close() {
coroutineScope.cancel()
}