Skip to content

Commit c0caa90

Browse files
committed
Move usersWithRole() function to a dedicated file and make it a documented extension of MatrixRoom.
1 parent 34f3208 commit c0caa90

File tree

3 files changed

+43
-16
lines changed

3 files changed

+43
-16
lines changed

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesPresenter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import io.element.android.libraries.matrix.api.core.UserId
4242
import io.element.android.libraries.matrix.api.room.MatrixRoom
4343
import io.element.android.libraries.matrix.api.room.RoomMember
4444
import io.element.android.libraries.matrix.api.room.powerlevels.UserRoleChange
45+
import io.element.android.libraries.matrix.api.room.powerlevels.usersWithRole
4546
import io.element.android.libraries.matrix.api.room.toMatrixUser
4647
import io.element.android.libraries.matrix.api.user.MatrixUser
4748
import io.element.android.services.analytics.api.AnalyticsService

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,8 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimeline
3535
import io.element.android.libraries.matrix.api.timeline.ReceiptType
3636
import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver
3737
import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings
38-
import kotlinx.collections.immutable.ImmutableList
39-
import kotlinx.collections.immutable.toPersistentList
4038
import kotlinx.coroutines.flow.Flow
4139
import kotlinx.coroutines.flow.StateFlow
42-
import kotlinx.coroutines.flow.combine
43-
import kotlinx.coroutines.flow.distinctUntilChanged
44-
import kotlinx.coroutines.flow.map
4540
import java.io.Closeable
4641
import java.io.File
4742

@@ -183,17 +178,6 @@ interface MatrixRoom : Closeable {
183178
suspend fun canUserJoinCall(userId: UserId): Result<Boolean> =
184179
canUserSendState(userId, StateEventType.CALL_MEMBER)
185180

186-
fun usersWithRole(role: RoomMember.Role): Flow<ImmutableList<RoomMember>> {
187-
return roomInfoFlow
188-
.map { it.userPowerLevels.filter { (_, powerLevel) -> RoomMember.Role.forPowerLevel(powerLevel) == role } }
189-
.combine(membersStateFlow) { powerLevels, membersState ->
190-
membersState.joinedRoomMembers()
191-
.filter { powerLevels.containsKey(it.userId) }
192-
.toPersistentList()
193-
}
194-
.distinctUntilChanged()
195-
}
196-
197181
suspend fun updateAvatar(mimeType: String, data: ByteArray): Result<Unit>
198182

199183
suspend fun removeAvatar(): Result<Unit>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright (c) 2024 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.element.android.libraries.matrix.api.room.powerlevels
18+
19+
import io.element.android.libraries.matrix.api.room.MatrixRoom
20+
import io.element.android.libraries.matrix.api.room.RoomMember
21+
import io.element.android.libraries.matrix.api.room.joinedRoomMembers
22+
import kotlinx.collections.immutable.ImmutableList
23+
import kotlinx.collections.immutable.toPersistentList
24+
import kotlinx.coroutines.flow.Flow
25+
import kotlinx.coroutines.flow.combine
26+
import kotlinx.coroutines.flow.distinctUntilChanged
27+
import kotlinx.coroutines.flow.map
28+
29+
/**
30+
* Return a flow of the list of room members who are still in the room (with membership == RoomMembershipState.JOIN)
31+
* and who have the given role.
32+
*/
33+
fun MatrixRoom.usersWithRole(role: RoomMember.Role): Flow<ImmutableList<RoomMember>> {
34+
return roomInfoFlow
35+
.map { it.userPowerLevels.filter { (_, powerLevel) -> RoomMember.Role.forPowerLevel(powerLevel) == role } }
36+
.combine(membersStateFlow) { powerLevels, membersState ->
37+
membersState.joinedRoomMembers()
38+
.filter { powerLevels.containsKey(it.userId) }
39+
.toPersistentList()
40+
}
41+
.distinctUntilChanged()
42+
}

0 commit comments

Comments
 (0)