RoomMembers: change the API again..

This commit is contained in:
ganfra 2023-04-28 15:04:33 +02:00
parent 4b9f2fdae0
commit 23a7b871f7
12 changed files with 109 additions and 73 deletions

View file

@ -23,7 +23,6 @@ import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.timeline.MatrixTimeline
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
import java.io.Closeable
interface MatrixRoom : Closeable {
@ -74,22 +73,3 @@ interface MatrixRoom : Closeable {
suspend fun rejectInvitation(): Result<Unit>
}
fun MatrixRoom.getMemberFlow(userId: UserId): Flow<RoomMember?> {
return membersStateFlow.map { state ->
state.roomMembers().find {
it.userId == userId
}
}
}
fun MatrixRoom.getDmMemberFlow(): Flow<RoomMember?> {
return membersStateFlow.map { state ->
val members = state.roomMembers()
if (members.size == 2 && isDirect && isEncrypted) {
members.find { it.userId != this.sessionId }
} else {
null
}
}
}

View file

@ -18,14 +18,18 @@ package io.element.android.libraries.matrix.api.room
sealed interface MatrixRoomMembersState {
object Unknown : MatrixRoomMembersState
object Pending : MatrixRoomMembersState
data class Error(val failure: Throwable) : MatrixRoomMembersState
data class Pending(val prevRoomMembers: List<RoomMember>? = null) : MatrixRoomMembersState
data class Error(val failure: Throwable, val prevRoomMembers: List<RoomMember>? = null) : MatrixRoomMembersState
data class Ready(val roomMembers: List<RoomMember>) : MatrixRoomMembersState
}
fun MatrixRoomMembersState.roomMembers(): List<RoomMember> {
fun MatrixRoomMembersState.roomMembers(): List<RoomMember>? {
return when (this) {
is MatrixRoomMembersState.Ready -> roomMembers
else -> emptyList()
is MatrixRoomMembersState.Pending -> prevRoomMembers
is MatrixRoomMembersState.Error -> prevRoomMembers
else -> null
}
}