Add SpaceRoomList extension functions for pagination
This commit is contained in:
parent
33eb848c94
commit
4ccfb31646
1 changed files with 30 additions and 0 deletions
|
|
@ -9,9 +9,15 @@
|
||||||
package io.element.android.libraries.matrix.api.spaces
|
package io.element.android.libraries.matrix.api.spaces
|
||||||
|
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
import kotlinx.coroutines.flow.first
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
import java.util.Optional
|
import java.util.Optional
|
||||||
|
import kotlin.time.Duration
|
||||||
|
|
||||||
interface SpaceRoomList {
|
interface SpaceRoomList {
|
||||||
sealed interface PaginationStatus {
|
sealed interface PaginationStatus {
|
||||||
|
|
@ -30,3 +36,27 @@ interface SpaceRoomList {
|
||||||
|
|
||||||
fun destroy()
|
fun destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun SpaceRoomList.loadAllIncrementally(coroutineScope: CoroutineScope) {
|
||||||
|
paginationStatusFlow
|
||||||
|
.onEach { paginationStatus ->
|
||||||
|
when (paginationStatus) {
|
||||||
|
is SpaceRoomList.PaginationStatus.Idle -> {
|
||||||
|
if (paginationStatus.hasMoreToLoad) {
|
||||||
|
paginate()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SpaceRoomList.PaginationStatus.Loading -> Unit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.launchIn(coroutineScope)
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun SpaceRoomList.resetAndWaitForFullReload(timeout: Duration) {
|
||||||
|
reset()
|
||||||
|
withTimeoutOrNull(timeout) {
|
||||||
|
paginationStatusFlow.first { status ->
|
||||||
|
status is SpaceRoomList.PaginationStatus.Idle && !status.hasMoreToLoad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue