RoomList/Timeline : Add Buffer(Unlimited) to avoid blocking rust listener thread
This commit is contained in:
parent
5090bff06a
commit
7ba14b3014
2 changed files with 8 additions and 4 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue