[Room member list] Display room member list (#276)

* Implement room member list

* Move timeline initialization back to `TimelinePresenter`.

* Fix crash when the `innerRoom` inside a `RustMatrixRoom` is destroyed but `syncUpdateFlow` is still running.

* Address review comments
This commit is contained in:
Jorge Martin Espinosa 2023-04-04 18:07:57 +02:00 committed by GitHub
parent 7d3fd30d66
commit 11f041d940
62 changed files with 1159 additions and 157 deletions

View file

@ -34,13 +34,18 @@ class FakeMatrixRoom(
override val displayName: String = "",
override val topic: String? = null,
override val avatarUrl: String? = null,
override val members: List<RoomMember> = emptyList(),
override val isEncrypted: Boolean = false,
override val alias: String? = null,
override val alternativeAliases: List<String> = emptyList(),
private val members: List<RoomMember> = emptyList(),
private val matrixTimeline: MatrixTimeline = FakeMatrixTimeline(),
) : MatrixRoom {
private var fetchMemberResult: Result<Unit> = Result.success(Unit)
var areMembersFetched: Boolean = false
private set
override fun syncUpdateFlow(): Flow<Long> {
return emptyFlow()
}
@ -50,7 +55,11 @@ class FakeMatrixRoom(
}
override suspend fun fetchMembers(): Result<Unit> {
return Result.success(Unit)
return fetchMemberResult.also { result ->
if (result.isSuccess) {
areMembersFetched = true
}
}
}
override suspend fun userDisplayName(userId: String): Result<String?> {
@ -61,6 +70,18 @@ class FakeMatrixRoom(
TODO("Not yet implemented")
}
override suspend fun members(): List<RoomMember> {
return members
}
override suspend fun memberCount(): Int {
if (fetchMemberResult.isSuccess) {
return members.count()
} else {
throw fetchMemberResult.exceptionOrNull()!!
}
}
override suspend fun sendMessage(message: String): Result<Unit> {
delay(100)
return Result.success(Unit)
@ -94,4 +115,8 @@ class FakeMatrixRoom(
}
override fun close() = Unit
fun givenFetchMemberResult(result: Result<Unit>) {
fetchMemberResult = result
}
}