Restore permissions to creator and display them as owners in the list (#4369)

* restore permissions to creator and display them as owners in the list

* improved the code to use actually 5 roles in the app to distinguish a real creator from an owner
This commit is contained in:
Mauro
2025-07-31 16:52:55 +02:00
committed by GitHub
parent 6133a563cf
commit 5a87fb4f92
29 changed files with 205 additions and 137 deletions

View File

@@ -86,17 +86,34 @@ extension RoomPermissions {
extension RoomMemberDetails.Role {
init(powerLevelValue: Int64) {
// Also this is not great, and should be handled by a `suggestedRoleForPowerLevelValue` function from the SDK
guard powerLevelValue < 150 else {
self = .owner
return
}
do {
try self.init(suggestedRoleForPowerLevel(powerLevel: .value(value: powerLevelValue)))
switch try suggestedRoleForPowerLevel(powerLevel: .value(value: powerLevelValue)) {
case .administrator:
self = .administrator
case .creator:
fatalError("Impossible")
case .moderator:
self = .moderator
case .user:
self = .user
}
} catch {
MXLog.error("Falied to convert power level value to role: \(error)")
self.init(.user)
self = .user
}
}
var rustRole: RoomMemberRole {
switch self {
case .administrator:
case .creator:
.creator
case .administrator, .owner:
.administrator
case .moderator:
.moderator
@@ -108,11 +125,15 @@ extension RoomMemberDetails.Role {
/// To be used when setting the power level of a user to get the suggested equivalent power level value for that specific role
/// NOTE: Do not use for comparison, use the true power level instead.
var powerLevelValue: Int64 {
guard self != .owner else {
// Would be better if the SDK would return this, maybe a `suggestedPowerLevelValueForRole` function would solve the problem
return 150
}
do {
switch try suggestedPowerLevelForRole(role: rustRole) {
case .infinite:
// Would be better if the SDK would return this, maybe a `suggestedPowerLevelValueForRole` function would solve the problem
return 150
fatalError("Impossible")
case .value(let value):
return value
}