RoomList : clean after PR review
This commit is contained in:
parent
3d1665a732
commit
1c5f0389f7
4 changed files with 22 additions and 8 deletions
|
|
@ -28,11 +28,21 @@ import kotlin.time.Duration
|
||||||
* Can be retrieved from [RoomListService] methods.
|
* Can be retrieved from [RoomListService] methods.
|
||||||
*/
|
*/
|
||||||
interface RoomList {
|
interface RoomList {
|
||||||
|
/**
|
||||||
|
* The loading state of the room list.
|
||||||
|
*/
|
||||||
sealed interface LoadingState {
|
sealed interface LoadingState {
|
||||||
data object NotLoaded : LoadingState
|
data object NotLoaded : LoadingState
|
||||||
data class Loaded(val numberOfRooms: Int) : LoadingState
|
data class Loaded(val numberOfRooms: Int) : LoadingState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The source of the room list data.
|
||||||
|
* All: all rooms except invites.
|
||||||
|
* Invites: only invites.
|
||||||
|
*
|
||||||
|
* To apply some dynamic filtering on top of that, use [DynamicRoomList].
|
||||||
|
*/
|
||||||
enum class Source {
|
enum class Source {
|
||||||
All,
|
All,
|
||||||
Invites,
|
Invites,
|
||||||
|
|
|
||||||
|
|
@ -197,10 +197,10 @@ class RustMatrixClient(
|
||||||
RustRoomListService(
|
RustRoomListService(
|
||||||
innerRoomListService = innerRoomListService,
|
innerRoomListService = innerRoomListService,
|
||||||
sessionCoroutineScope = sessionCoroutineScope,
|
sessionCoroutineScope = sessionCoroutineScope,
|
||||||
|
sessionDispatcher = sessionDispatcher,
|
||||||
roomListFactory = RoomListFactory(
|
roomListFactory = RoomListFactory(
|
||||||
innerRoomListService = innerRoomListService,
|
innerRoomListService = innerRoomListService,
|
||||||
defaultCoroutineScope = sessionCoroutineScope,
|
sessionCoroutineScope = sessionCoroutineScope,
|
||||||
defaultCoroutineContext = sessionDispatcher,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,15 +29,14 @@ import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.rustcomponents.sdk.RoomListLoadingState
|
import org.matrix.rustcomponents.sdk.RoomListLoadingState
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListService
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
import kotlin.coroutines.EmptyCoroutineContext
|
import kotlin.coroutines.EmptyCoroutineContext
|
||||||
import org.matrix.rustcomponents.sdk.RoomList as InnerRoomList
|
import org.matrix.rustcomponents.sdk.RoomList as InnerRoomList
|
||||||
import org.matrix.rustcomponents.sdk.RoomListService as InnerRoomListService
|
|
||||||
|
|
||||||
internal class RoomListFactory(
|
internal class RoomListFactory(
|
||||||
private val innerRoomListService: InnerRoomListService,
|
private val innerRoomListService: RoomListService,
|
||||||
private val defaultCoroutineScope: CoroutineScope,
|
private val sessionCoroutineScope: CoroutineScope,
|
||||||
private val defaultCoroutineContext: CoroutineContext = EmptyCoroutineContext,
|
|
||||||
private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(),
|
private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(),
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
|
|
@ -45,8 +44,8 @@ internal class RoomListFactory(
|
||||||
*/
|
*/
|
||||||
fun createRoomList(
|
fun createRoomList(
|
||||||
pageSize: Int,
|
pageSize: Int,
|
||||||
coroutineScope: CoroutineScope = defaultCoroutineScope,
|
coroutineScope: CoroutineScope = sessionCoroutineScope,
|
||||||
coroutineContext: CoroutineContext = defaultCoroutineContext,
|
coroutineContext: CoroutineContext = EmptyCoroutineContext,
|
||||||
initialFilter: RoomListFilter = RoomListFilter.all(),
|
initialFilter: RoomListFilter = RoomListFilter.all(),
|
||||||
innerProvider: suspend () -> InnerRoomList
|
innerProvider: suspend () -> InnerRoomList
|
||||||
): DynamicRoomList {
|
): DynamicRoomList {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally
|
import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally
|
||||||
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
@ -42,6 +43,7 @@ private const val DEFAULT_PAGE_SIZE = 20
|
||||||
internal class RustRoomListService(
|
internal class RustRoomListService(
|
||||||
private val innerRoomListService: InnerRustRoomListService,
|
private val innerRoomListService: InnerRustRoomListService,
|
||||||
private val sessionCoroutineScope: CoroutineScope,
|
private val sessionCoroutineScope: CoroutineScope,
|
||||||
|
private val sessionDispatcher: CoroutineDispatcher,
|
||||||
private val roomListFactory: RoomListFactory,
|
private val roomListFactory: RoomListFactory,
|
||||||
) : RoomListService {
|
) : RoomListService {
|
||||||
override fun createRoomList(
|
override fun createRoomList(
|
||||||
|
|
@ -54,6 +56,7 @@ internal class RustRoomListService(
|
||||||
pageSize = pageSize,
|
pageSize = pageSize,
|
||||||
initialFilter = initialFilter,
|
initialFilter = initialFilter,
|
||||||
coroutineScope = coroutineScope,
|
coroutineScope = coroutineScope,
|
||||||
|
coroutineContext = sessionDispatcher,
|
||||||
) {
|
) {
|
||||||
when (source) {
|
when (source) {
|
||||||
RoomList.Source.All -> innerRoomListService.allRooms()
|
RoomList.Source.All -> innerRoomListService.allRooms()
|
||||||
|
|
@ -64,6 +67,7 @@ internal class RustRoomListService(
|
||||||
|
|
||||||
override val allRooms: DynamicRoomList = roomListFactory.createRoomList(
|
override val allRooms: DynamicRoomList = roomListFactory.createRoomList(
|
||||||
pageSize = DEFAULT_PAGE_SIZE,
|
pageSize = DEFAULT_PAGE_SIZE,
|
||||||
|
coroutineContext = sessionDispatcher,
|
||||||
initialFilter = RoomListFilter.all(RoomListFilter.NonLeft),
|
initialFilter = RoomListFilter.all(RoomListFilter.NonLeft),
|
||||||
) {
|
) {
|
||||||
innerRoomListService.allRooms()
|
innerRoomListService.allRooms()
|
||||||
|
|
@ -71,6 +75,7 @@ internal class RustRoomListService(
|
||||||
|
|
||||||
override val invites: RoomList = roomListFactory.createRoomList(
|
override val invites: RoomList = roomListFactory.createRoomList(
|
||||||
pageSize = Int.MAX_VALUE,
|
pageSize = Int.MAX_VALUE,
|
||||||
|
coroutineContext = sessionDispatcher,
|
||||||
) {
|
) {
|
||||||
innerRoomListService.invites()
|
innerRoomListService.invites()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue