mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 06:55:41 +00:00
Timeline : expose new pagination status api
This commit is contained in:
+19
-7
@@ -27,13 +27,14 @@ import kotlinx.coroutines.flow.Flow
|
|||||||
import kotlinx.coroutines.flow.buffer
|
import kotlinx.coroutines.flow.buffer
|
||||||
import kotlinx.coroutines.flow.callbackFlow
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import org.matrix.rustcomponents.sdk.BackPaginationStatusListener
|
import org.matrix.rustcomponents.sdk.PaginationStatusListener
|
||||||
|
import org.matrix.rustcomponents.sdk.TaskHandle
|
||||||
import org.matrix.rustcomponents.sdk.Timeline
|
import org.matrix.rustcomponents.sdk.Timeline
|
||||||
import org.matrix.rustcomponents.sdk.TimelineDiff
|
import org.matrix.rustcomponents.sdk.TimelineDiff
|
||||||
import org.matrix.rustcomponents.sdk.TimelineItem
|
import org.matrix.rustcomponents.sdk.TimelineItem
|
||||||
import org.matrix.rustcomponents.sdk.TimelineListener
|
import org.matrix.rustcomponents.sdk.TimelineListener
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import uniffi.matrix_sdk_ui.BackPaginationStatus
|
import uniffi.matrix_sdk_ui.PaginationStatus
|
||||||
|
|
||||||
internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List<TimelineItem>) -> Unit): Flow<List<TimelineDiff>> =
|
internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List<TimelineItem>) -> Unit): Flow<List<TimelineDiff>> =
|
||||||
callbackFlow {
|
callbackFlow {
|
||||||
@@ -58,17 +59,28 @@ internal fun Timeline.timelineDiffFlow(onInitialList: suspend (List<TimelineItem
|
|||||||
Timber.d(it, "timelineDiffFlow() failed")
|
Timber.d(it, "timelineDiffFlow() failed")
|
||||||
}.buffer(Channel.UNLIMITED)
|
}.buffer(Channel.UNLIMITED)
|
||||||
|
|
||||||
internal fun Timeline.backPaginationStatusFlow(): Flow<BackPaginationStatus> =
|
internal fun Timeline.backPaginationStatusFlow(): Flow<PaginationStatus> =
|
||||||
mxCallbackFlow {
|
paginationStatusFlow { listener ->
|
||||||
val listener = object : BackPaginationStatusListener {
|
subscribeToBackPaginationStatus(listener)
|
||||||
override fun onUpdate(status: BackPaginationStatus) {
|
}
|
||||||
|
|
||||||
|
internal fun Timeline.forwardPaginationStatusFlow(): Flow<PaginationStatus> =
|
||||||
|
paginationStatusFlow { listener ->
|
||||||
|
subscribeToForwardPaginationStatus(listener)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun paginationStatusFlow(subscriber: suspend (PaginationStatusListener)->TaskHandle): Flow<PaginationStatus>{
|
||||||
|
return mxCallbackFlow {
|
||||||
|
val listener = object : PaginationStatusListener {
|
||||||
|
override fun onUpdate(status: PaginationStatus) {
|
||||||
trySendBlocking(status)
|
trySendBlocking(status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tryOrNull {
|
tryOrNull {
|
||||||
subscribeToBackPaginationStatus(listener)
|
subscriber(listener)
|
||||||
}
|
}
|
||||||
}.buffer(Channel.UNLIMITED)
|
}.buffer(Channel.UNLIMITED)
|
||||||
|
}
|
||||||
|
|
||||||
internal suspend fun Timeline.runWithTimelineListenerRegistered(action: suspend () -> Unit) {
|
internal suspend fun Timeline.runWithTimelineListenerRegistered(action: suspend () -> Unit) {
|
||||||
val result = addListener(NoOpTimelineListener)
|
val result = addListener(NoOpTimelineListener)
|
||||||
|
|||||||
Reference in New Issue
Block a user