Browse Source

RoomList : clean after PR review

pull/2405/head
ganfra 7 months ago
parent
commit
bdb660f346
  1. 10
      libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomList.kt
  2. 4
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt
  3. 11
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFactory.kt
  4. 5
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt

10
libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomlist/RoomList.kt

@ -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,

4
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt

@ -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,
), ),
) )

11
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomListFactory.kt

@ -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 {

5
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt

@ -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…
Cancel
Save