Add SpaceRoomList extension functions for pagination

This commit is contained in:
ganfra 2026-01-22 20:35:49 +01:00
parent 5f52b38de6
commit ae4d635357

View file

@ -9,9 +9,15 @@
package io.element.android.libraries.matrix.api.spaces
import io.element.android.libraries.matrix.api.core.RoomId
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
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 kotlin.time.Duration
interface SpaceRoomList {
sealed interface PaginationStatus {
@ -30,3 +36,27 @@ interface SpaceRoomList {
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
}
}
}