Merge pull request #5908 from element-hq/feature/fga/space_settings_iteration

Change : space settings iteration
This commit is contained in:
ganfra 2025-12-16 22:41:03 +01:00 committed by GitHub
commit 8266902ec2
78 changed files with 428 additions and 205 deletions

View file

@ -23,6 +23,9 @@ import kotlinx.coroutines.flow.map
* Provides information about the permissions of users in a room.
*/
interface RoomPermissions : AutoCloseable {
/**
* Returns true if the current user is able to ban from the room.
*/
fun canOwnUserBan(): Boolean
/**
@ -31,7 +34,7 @@ interface RoomPermissions : AutoCloseable {
fun canOwnUserInvite(): Boolean
/**
* Returns true if the current user is able to kick in the room.
* Returns true if the current user is able to kick from the room.
*/
fun canOwnUserKick(): Boolean
@ -128,10 +131,18 @@ interface RoomPermissions : AutoCloseable {
fun canUserTriggerRoomNotification(userId: UserId): Boolean
}
/**
* Returns true if the current user can edit roles and permissions in the room ie. can send
* a power levels state event.
*/
fun RoomPermissions.canEditRolesAndPermissions(): Boolean {
return canOwnUserSendState(StateEventType.ROOM_POWER_LEVELS)
}
/**
* Returns true if the current user can start a call in the room ie. can send
* a call member state event.
*/
fun RoomPermissions.canCall(): Boolean {
return canOwnUserSendState(StateEventType.CALL_MEMBER)
}

View file

@ -12,7 +12,8 @@ data class RoomPowerLevelsValues(
val ban: Long,
val invite: Long,
val kick: Long,
val sendEvents: Long,
val eventsDefault: Long,
val stateDefault: Long,
val redactEvents: Long,
val roomName: Long,
val roomAvatar: Long,

View file

@ -397,10 +397,12 @@ class JoinedRustRoom(
invite = roomPowerLevelsValues.invite,
kick = roomPowerLevelsValues.kick,
redact = roomPowerLevelsValues.redactEvents,
eventsDefault = roomPowerLevelsValues.sendEvents,
stateDefault = roomPowerLevelsValues.stateDefault,
eventsDefault = roomPowerLevelsValues.eventsDefault,
roomName = roomPowerLevelsValues.roomName,
roomAvatar = roomPowerLevelsValues.roomAvatar,
roomTopic = roomPowerLevelsValues.roomTopic,
spaceChild = roomPowerLevelsValues.spaceChild,
)
innerRoom.applyPowerLevelChanges(changes)
}

View file

@ -19,7 +19,8 @@ object RoomPowerLevelsValuesMapper {
ban = values.ban,
invite = values.invite,
kick = values.kick,
sendEvents = values.eventsDefault,
eventsDefault = values.eventsDefault,
stateDefault = values.stateDefault,
redactEvents = values.redact,
roomName = values.roomName,
roomAvatar = values.roomAvatar,

View file

@ -25,11 +25,11 @@ fun defaultFfiRoomPowerLevelValues() = RoomPowerLevelsValues(
invite = 0,
kick = 50,
eventsDefault = 0,
stateDefault = 50,
redact = 50,
roomName = 100,
roomAvatar = 100,
roomTopic = 100,
stateDefault = 0,
roomName = 50,
roomAvatar = 50,
roomTopic = 50,
spaceChild = 50,
usersDefault = 0,
spaceChild = 100,
)

View file

@ -37,8 +37,9 @@ class RoomPowerLevelsValuesMapperTest {
ban = 1,
invite = 2,
kick = 3,
sendEvents = 5,
redactEvents = 4,
eventsDefault = 5,
stateDefault = 6,
roomName = 8,
roomAvatar = 9,
roomTopic = 10,

View file

@ -211,10 +211,11 @@ fun defaultRoomPowerLevelValues() = RoomPowerLevelsValues(
ban = 50,
invite = 0,
kick = 50,
sendEvents = 0,
eventsDefault = 0,
stateDefault = 50,
redactEvents = 50,
roomName = 100,
roomAvatar = 100,
roomTopic = 100,
spaceChild = 100,
roomName = 50,
roomAvatar = 50,
roomTopic = 50,
spaceChild = 50,
)