Add the setting to change live location permissions to the change permissions screen.
This commit is contained in:
@@ -1132,6 +1132,7 @@
|
||||
"screen_room_change_permissions_delete_messages" = "Remove messages";
|
||||
"screen_room_change_permissions_everyone" = "Member";
|
||||
"screen_room_change_permissions_invite_people" = "Invite people";
|
||||
"screen_room_change_permissions_live_location" = "Share live location";
|
||||
"screen_room_change_permissions_manage_space" = "Manage space";
|
||||
"screen_room_change_permissions_manage_space_rooms" = "Manage rooms";
|
||||
"screen_room_change_permissions_member_moderation" = "Manage members";
|
||||
|
||||
@@ -1132,6 +1132,7 @@
|
||||
"screen_room_change_permissions_delete_messages" = "Remove messages";
|
||||
"screen_room_change_permissions_everyone" = "Member";
|
||||
"screen_room_change_permissions_invite_people" = "Invite people";
|
||||
"screen_room_change_permissions_live_location" = "Share live location";
|
||||
"screen_room_change_permissions_manage_space" = "Manage space";
|
||||
"screen_room_change_permissions_manage_space_rooms" = "Manage rooms";
|
||||
"screen_room_change_permissions_member_moderation" = "Manage members";
|
||||
|
||||
@@ -2632,6 +2632,8 @@ internal enum L10n {
|
||||
internal static var screenRoomChangePermissionsEveryone: String { return L10n.tr("Localizable", "screen_room_change_permissions_everyone") }
|
||||
/// Invite people
|
||||
internal static var screenRoomChangePermissionsInvitePeople: String { return L10n.tr("Localizable", "screen_room_change_permissions_invite_people") }
|
||||
/// Share live location
|
||||
internal static var screenRoomChangePermissionsLiveLocation: String { return L10n.tr("Localizable", "screen_room_change_permissions_live_location") }
|
||||
/// Manage space
|
||||
internal static var screenRoomChangePermissionsManageSpace: String { return L10n.tr("Localizable", "screen_room_change_permissions_manage_space") }
|
||||
/// Manage rooms
|
||||
|
||||
@@ -114,7 +114,11 @@ extension RoomChangePermissionsScreenViewState {
|
||||
RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsDeleteMessages,
|
||||
value: currentPermissions.redact,
|
||||
ownPowerLevel: ownPowerLevel,
|
||||
keyPath: \.redact)
|
||||
keyPath: \.redact),
|
||||
RoomPermissionsSetting(title: L10n.screenRoomChangePermissionsLiveLocation,
|
||||
value: currentPermissions.liveLocation,
|
||||
ownPowerLevel: ownPowerLevel,
|
||||
keyPath: \.liveLocation)
|
||||
]
|
||||
}
|
||||
case .manageSpace:
|
||||
|
||||
@@ -67,7 +67,9 @@ class RoomChangePermissionsScreenViewModel: RoomChangePermissionsScreenViewModel
|
||||
.flatMap { $0 }
|
||||
.filter { state.currentPermissions[keyPath: $0.keyPath] != $0.value }
|
||||
for setting in changedSettings {
|
||||
changes[keyPath: setting.rustKeyPath] = setting.value
|
||||
for keyPath in setting.rustKeyPaths {
|
||||
changes[keyPath: keyPath] = setting.value
|
||||
}
|
||||
}
|
||||
|
||||
switch await roomProxy.applyPowerLevelChanges(changes) {
|
||||
|
||||
@@ -36,19 +36,20 @@ struct RoomPermissionsSetting: Identifiable {
|
||||
/// The `RoomPermissions` property that this setting is for.
|
||||
let keyPath: KeyPath<RoomPermissions, Int64>
|
||||
/// The `RoomPowerLevelChanges` property that this setting is saved into.
|
||||
var rustKeyPath: WritableKeyPath<RoomPowerLevelChanges, Int64?> {
|
||||
var rustKeyPaths: [WritableKeyPath<RoomPowerLevelChanges, Int64?>] {
|
||||
switch keyPath {
|
||||
case \.ban: \.ban
|
||||
case \.invite: \.invite
|
||||
case \.kick: \.kick
|
||||
case \.redact: \.redact
|
||||
case \.eventsDefault: \.eventsDefault
|
||||
case \.stateDefault: \.stateDefault
|
||||
case \.usersDefault: \.usersDefault
|
||||
case \.roomName: \.roomName
|
||||
case \.roomAvatar: \.roomAvatar
|
||||
case \.roomTopic: \.roomTopic
|
||||
case \.spaceChild: \.spaceChild
|
||||
case \.ban: [\.ban]
|
||||
case \.invite: [\.invite]
|
||||
case \.kick: [\.kick]
|
||||
case \.redact: [\.redact]
|
||||
case \.eventsDefault: [\.eventsDefault]
|
||||
case \.stateDefault: [\.stateDefault]
|
||||
case \.usersDefault: [\.usersDefault]
|
||||
case \.roomName: [\.roomName]
|
||||
case \.roomAvatar: [\.roomAvatar]
|
||||
case \.roomTopic: [\.roomTopic]
|
||||
case \.spaceChild: [\.spaceChild]
|
||||
case \.liveLocation: [\.beacon, \.beaconInfo]
|
||||
default: fatalError("Unexpected key path: \(keyPath)")
|
||||
}
|
||||
}
|
||||
@@ -96,6 +97,8 @@ struct RoomPermissions {
|
||||
var roomTopic: Int64
|
||||
/// The level required to add/remove childrens from a space.
|
||||
var spaceChild: Int64
|
||||
/// The level required to send live location updates
|
||||
var liveLocation: Int64
|
||||
}
|
||||
|
||||
extension RoomPermissions {
|
||||
@@ -112,5 +115,6 @@ extension RoomPermissions {
|
||||
roomAvatar = powerLevels.roomAvatar
|
||||
roomTopic = powerLevels.roomTopic
|
||||
spaceChild = powerLevels.spaceChild
|
||||
liveLocation = max(powerLevels.beacon, powerLevels.beaconInfo)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,5 +43,6 @@ struct RoomPermissionsTests {
|
||||
#expect(permissions.roomAvatar == RoomRole.user.powerLevelValue)
|
||||
#expect(permissions.roomTopic == RoomRole.user.powerLevelValue)
|
||||
#expect(permissions.spaceChild == RoomRole.administrator.powerLevelValue)
|
||||
#expect(permissions.liveLocation == RoomRole.moderator.powerLevelValue)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user