RoomList/Timeline : Add Buffer(Unlimited) to avoid blocking rust listener thread

This commit is contained in:
ganfra
2023-06-26 22:32:59 +02:00
parent 5090bff06a
commit 7ba14b3014
2 changed files with 8 additions and 4 deletions

View File

@@ -1,8 +1,10 @@
package io.element.android.libraries.matrix.impl.room
import io.element.android.libraries.matrix.impl.util.mxCallbackFlow
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.trySendBlocking
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.buffer
import org.matrix.rustcomponents.sdk.RoomList
import org.matrix.rustcomponents.sdk.RoomListEntriesListener
import org.matrix.rustcomponents.sdk.RoomListEntriesUpdate
@@ -25,7 +27,7 @@ fun RoomList.loadingStateFlow(): Flow<RoomListLoadingState> =
val result = loadingState(listener)
send(result.state)
result.stateStream
}
}.buffer(Channel.UNLIMITED)
fun RoomList.entriesFlow(onInitialList: suspend (List<RoomListEntry>) -> Unit): Flow<RoomListEntriesUpdate> =
mxCallbackFlow {
@@ -37,7 +39,7 @@ fun RoomList.entriesFlow(onInitialList: suspend (List<RoomListEntry>) -> Unit):
val result = entries(listener)
onInitialList(result.entries)
result.entriesStream
}
}.buffer(Channel.UNLIMITED)
fun RoomListService.roomOrNull(roomId: String): RoomListItem? {
return try {
@@ -56,4 +58,4 @@ fun RoomListService.stateFlow(): Flow<RoomListServiceState> =
}
}
state(listener)
}
}.buffer(Channel.UNLIMITED)

View File

@@ -17,8 +17,10 @@
package io.element.android.libraries.matrix.impl.timeline
import io.element.android.libraries.matrix.impl.util.mxCallbackFlow
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.trySendBlocking
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.buffer
import org.matrix.rustcomponents.sdk.Room
import org.matrix.rustcomponents.sdk.TimelineDiff
import org.matrix.rustcomponents.sdk.TimelineItem
@@ -34,4 +36,4 @@ internal fun Room.timelineDiffFlow(onInitialList: suspend (List<TimelineItem>) -
val result = addTimelineListener(listener)
onInitialList(result.items)
result.itemsStream
}
}.buffer(Channel.UNLIMITED)