Improve handling members

This commit is contained in:
ganfra 2023-04-20 18:21:47 +02:00
parent 5104fc8ac1
commit a1869a3019
15 changed files with 107 additions and 139 deletions

View file

@ -18,12 +18,15 @@ package io.element.android.libraries.matrix.api.room
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId
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 java.io.Closeable
interface MatrixRoom: Closeable {
interface MatrixRoom : Closeable {
val sessionId: SessionId
val roomId: RoomId
val name: String?
val bestName: String
@ -36,20 +39,22 @@ interface MatrixRoom: Closeable {
val isDirect: Boolean
val isPublic: Boolean
suspend fun members() : List<RoomMember>
/**
* The current loaded members as a StateFlow.
* Initial value is an emptyList.
* To update them you should call [updateMembers].
*/
val membersFlow: StateFlow<List<RoomMember>>
suspend fun memberCount(): Int
fun getMember(userId: UserId): RoomMember?
fun getDmMember(): RoomMember?
/**
* Try to load the room members and update the membersFlow.
*/
suspend fun updateMembers(): Result<Unit>
fun syncUpdateFlow(): Flow<Long>
fun timeline(): MatrixTimeline
suspend fun fetchMembers(): Result<Unit>
suspend fun userDisplayName(userId: UserId): Result<String?>
suspend fun userAvatarUrl(userId: UserId): Result<String?>
@ -64,3 +69,19 @@ interface MatrixRoom: Closeable {
suspend fun leave(): Result<Unit>
}
fun MatrixRoom.getMember(userId: UserId): RoomMember? {
return membersFlow.value.find { it.userId == userId }
}
fun MatrixRoom.getDmMember(): RoomMember? {
return if (membersFlow.value.size == 2 && isDirect && isEncrypted) {
membersFlow.value.find { it.userId != this.sessionId }
} else {
null
}
}
fun MatrixRoom.memberCount(): Int {
return membersFlow.value.size
}