From 39c7df88a1428b1c02e62b2ef548c437a1169a41 Mon Sep 17 00:00:00 2001 From: Frank Rotermund Date: Fri, 19 Sep 2025 14:23:45 +0200 Subject: [PATCH] feat: last admin works with owners (MESSENGER-7561) --- bwi/LeaveRoom/LeaveRoomHelper.swift | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/bwi/LeaveRoom/LeaveRoomHelper.swift b/bwi/LeaveRoom/LeaveRoomHelper.swift index 71635f6df..019c11469 100644 --- a/bwi/LeaveRoom/LeaveRoomHelper.swift +++ b/bwi/LeaveRoom/LeaveRoomHelper.swift @@ -30,11 +30,16 @@ final class LeaveRoomHelper { var canLeave = false var hasInvites = false - // admins can only leave if there is at least one other admin + // bwi #7561 add differenciation for admin and owner + let myPowerLevel = self.powerLevel(session.myUserId, room) + + // admins can only leave if there is at least one other admin or owner + // owners can only leave if there is another owner room.state { (state) in if let members = state?.members.joinedMembers { for user in members where user.userId != myUserId { - if self.isAdmin(user.userId, room) { + if self.powerLevel(user.userId, room) >= myPowerLevel + { canLeave = true break } @@ -52,6 +57,16 @@ final class LeaveRoomHelper { return canLeave } + static private func powerLevel(_ userId: String, _ room: MXRoom) -> Int { + var powerLevel: Int = 0 + + room.state { (state) in + powerLevel = state?.powerLevelOfUser(withUserID: userId) ?? 0 + } + + return powerLevel + } + static private func isAdmin(_ userId: String, _ room: MXRoom) -> Bool { var admin = false