Fix slidingSync being slow
This commit is contained in:
parent
e5bd96049e
commit
4ff6f56471
2 changed files with 12 additions and 18 deletions
|
|
@ -83,7 +83,7 @@ internal class RustMatrixClient internal constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private val visibleRoomsView = SlidingSyncViewBuilder()
|
private val visibleRoomsView = SlidingSyncViewBuilder()
|
||||||
.timelineLimit(limit = 10u)
|
.timelineLimit(limit = 1u)
|
||||||
.requiredState(
|
.requiredState(
|
||||||
requiredState = listOf(
|
requiredState = listOf(
|
||||||
RequiredState(key = "m.room.avatar", value = ""),
|
RequiredState(key = "m.room.avatar", value = ""),
|
||||||
|
|
@ -121,10 +121,13 @@ internal class RustMatrixClient internal constructor(
|
||||||
|
|
||||||
init {
|
init {
|
||||||
client.setDelegate(clientDelegate)
|
client.setDelegate(clientDelegate)
|
||||||
|
roomSummaryDataSource.init()
|
||||||
|
slidingSync.setObserver(slidingSyncObserverProxy)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onRestartSync() {
|
private fun onRestartSync() {
|
||||||
slidingSyncObserverToken = slidingSync.sync()
|
stopSync()
|
||||||
|
startSync()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getRoom(roomId: RoomId): MatrixRoom? {
|
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() {
|
override fun startSync() {
|
||||||
|
if (client.isSoftLogout()) return
|
||||||
if (isSyncing.compareAndSet(false, true)) {
|
if (isSyncing.compareAndSet(false, true)) {
|
||||||
roomSummaryDataSource.startSync()
|
|
||||||
slidingSync.setObserver(slidingSyncObserverProxy)
|
|
||||||
slidingSyncObserverToken = slidingSync.sync()
|
slidingSyncObserverToken = slidingSync.sync()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun stopSync() {
|
override fun stopSync() {
|
||||||
if (isSyncing.compareAndSet(true, false)) {
|
if (isSyncing.compareAndSet(true, false)) {
|
||||||
roomSummaryDataSource.stopSync()
|
|
||||||
slidingSync.setObserver(null)
|
|
||||||
slidingSyncObserverToken?.cancel()
|
slidingSyncObserverToken?.cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun roomSummaryDataSource(): RoomSummaryDataSource = roomSummaryDataSource
|
|
||||||
|
|
||||||
override fun mediaResolver(): MediaResolver = mediaResolver
|
|
||||||
|
|
||||||
override fun close() {
|
override fun close() {
|
||||||
stopSync()
|
stopSync()
|
||||||
|
slidingSync.setObserver(null)
|
||||||
roomSummaryDataSource.close()
|
roomSummaryDataSource.close()
|
||||||
client.setDelegate(null)
|
client.setDelegate(null)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.roomListDiff
|
||||||
import io.element.android.libraries.matrix.sync.state
|
import io.element.android.libraries.matrix.sync.state
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.FlowPreview
|
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
import kotlinx.coroutines.cancelChildren
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.flow.sample
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.matrix.rustcomponents.sdk.RoomListEntry
|
import org.matrix.rustcomponents.sdk.RoomListEntry
|
||||||
|
|
@ -62,7 +59,7 @@ internal class RustRoomSummaryDataSource(
|
||||||
private val roomSummaries = MutableStateFlow<List<RoomSummary>>(emptyList())
|
private val roomSummaries = MutableStateFlow<List<RoomSummary>>(emptyList())
|
||||||
private val state = MutableStateFlow(SlidingSyncState.COLD)
|
private val state = MutableStateFlow(SlidingSyncState.COLD)
|
||||||
|
|
||||||
fun startSync() {
|
fun init() {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
updateRoomSummaries {
|
updateRoomSummaries {
|
||||||
addAll(
|
addAll(
|
||||||
|
|
@ -91,10 +88,6 @@ internal class RustRoomSummaryDataSource(
|
||||||
}.launchIn(coroutineScope)
|
}.launchIn(coroutineScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopSync() {
|
|
||||||
coroutineScope.coroutineContext.cancelChildren()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
override fun close() {
|
||||||
coroutineScope.cancel()
|
coroutineScope.cancel()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue