From 7c76a74a301a43f6b9da762df6ff1a580592a564 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 26 Jun 2023 22:32:59 +0200 Subject: [PATCH] RoomList/Timeline : Add Buffer(Unlimited) to avoid blocking rust listener thread --- .../libraries/matrix/impl/room/RoomListExtensions.kt | 8 +++++--- .../libraries/matrix/impl/timeline/TimelineDiffFlow.kt | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt index 176538c08a..2697fa87fb 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomListExtensions.kt @@ -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 = val result = loadingState(listener) send(result.state) result.stateStream - } + }.buffer(Channel.UNLIMITED) fun RoomList.entriesFlow(onInitialList: suspend (List) -> Unit): Flow = mxCallbackFlow { @@ -37,7 +39,7 @@ fun RoomList.entriesFlow(onInitialList: suspend (List) -> 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 = } } state(listener) - } + }.buffer(Channel.UNLIMITED) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineDiffFlow.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineDiffFlow.kt index 92ddac8f0a..ac75b9d074 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineDiffFlow.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/TimelineDiffFlow.kt @@ -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) - val result = addTimelineListener(listener) onInitialList(result.items) result.itemsStream - } + }.buffer(Channel.UNLIMITED)