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

View file

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