diff --git a/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt index fb53d66b48..514f818365 100644 --- a/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt +++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt @@ -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) } diff --git a/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt index 7965a6698d..3a787899b9 100644 --- a/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt +++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt @@ -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>(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() }