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 @@ -28,11 +28,21 @@ import kotlin.time.Duration
* Can be retrieved from [RoomListService] methods.
*/
interface RoomList {
/**
* The loading state of the room list.
*/
sealed interface LoadingState {
data object NotLoaded : 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 {
All,
Invites,

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

@ -197,10 +197,10 @@ class RustMatrixClient( @@ -197,10 +197,10 @@ class RustMatrixClient(
RustRoomListService(
innerRoomListService = innerRoomListService,
sessionCoroutineScope = sessionCoroutineScope,
sessionDispatcher = sessionDispatcher,
roomListFactory = RoomListFactory(
innerRoomListService = innerRoomListService,
defaultCoroutineScope = sessionCoroutineScope,
defaultCoroutineContext = sessionDispatcher,
sessionCoroutineScope = sessionCoroutineScope,
),
)

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 @@ -29,15 +29,14 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import org.matrix.rustcomponents.sdk.RoomListLoadingState
import org.matrix.rustcomponents.sdk.RoomListService
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
import org.matrix.rustcomponents.sdk.RoomList as InnerRoomList
import org.matrix.rustcomponents.sdk.RoomListService as InnerRoomListService
internal class RoomListFactory(
private val innerRoomListService: InnerRoomListService,
private val defaultCoroutineScope: CoroutineScope,
private val defaultCoroutineContext: CoroutineContext = EmptyCoroutineContext,
private val innerRoomListService: RoomListService,
private val sessionCoroutineScope: CoroutineScope,
private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(),
) {
/**
@ -45,8 +44,8 @@ internal class RoomListFactory( @@ -45,8 +44,8 @@ internal class RoomListFactory(
*/
fun createRoomList(
pageSize: Int,
coroutineScope: CoroutineScope = defaultCoroutineScope,
coroutineContext: CoroutineContext = defaultCoroutineContext,
coroutineScope: CoroutineScope = sessionCoroutineScope,
coroutineContext: CoroutineContext = EmptyCoroutineContext,
initialFilter: RoomListFilter = RoomListFilter.all(),
innerProvider: suspend () -> InnerRoomList
): 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 @@ -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.RoomListService
import io.element.android.libraries.matrix.api.roomlist.loadAllIncrementally
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
@ -42,6 +43,7 @@ private const val DEFAULT_PAGE_SIZE = 20 @@ -42,6 +43,7 @@ private const val DEFAULT_PAGE_SIZE = 20
internal class RustRoomListService(
private val innerRoomListService: InnerRustRoomListService,
private val sessionCoroutineScope: CoroutineScope,
private val sessionDispatcher: CoroutineDispatcher,
private val roomListFactory: RoomListFactory,
) : RoomListService {
override fun createRoomList(
@ -54,6 +56,7 @@ internal class RustRoomListService( @@ -54,6 +56,7 @@ internal class RustRoomListService(
pageSize = pageSize,
initialFilter = initialFilter,
coroutineScope = coroutineScope,
coroutineContext = sessionDispatcher,
) {
when (source) {
RoomList.Source.All -> innerRoomListService.allRooms()
@ -64,6 +67,7 @@ internal class RustRoomListService( @@ -64,6 +67,7 @@ internal class RustRoomListService(
override val allRooms: DynamicRoomList = roomListFactory.createRoomList(
pageSize = DEFAULT_PAGE_SIZE,
coroutineContext = sessionDispatcher,
initialFilter = RoomListFilter.all(RoomListFilter.NonLeft),
) {
innerRoomListService.allRooms()
@ -71,6 +75,7 @@ internal class RustRoomListService( @@ -71,6 +75,7 @@ internal class RustRoomListService(
override val invites: RoomList = roomListFactory.createRoomList(
pageSize = Int.MAX_VALUE,
coroutineContext = sessionDispatcher,
) {
innerRoomListService.invites()
}

Loading…
Cancel
Save