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