Show banned members in the members list. (#2460)

Only shown to users with enough power to ban.
This commit is contained in:
Doug
2024-02-16 12:49:35 +00:00
committed by GitHub
parent 4787c17c38
commit 9d1d5e43a9
17 changed files with 246 additions and 69 deletions
@@ -44,10 +44,9 @@ final class RoomMemberProxy: RoomMemberProxyProtocol {
lazy var isIgnored = member.isIgnored()
lazy var powerLevel = Int(member.powerLevel())
lazy var role = member.suggestedRoleForPowerLevel()
lazy var canInviteUsers = member.canInvite()
lazy var canBanUsers = member.canBan()
func canSendStateEvent(type: StateEventType) -> Bool {
member.canSendState(stateEvent: type)
@@ -30,9 +30,11 @@ protocol RoomMemberProxyProtocol: AnyObject {
var membership: MembershipState { get }
var isAccountOwner: Bool { get }
var isIgnored: Bool { get }
var powerLevel: Int { get }
var role: RoomMemberRole { get }
var canInviteUsers: Bool { get }
var canBanUsers: Bool { get }
func ignoreUser() async -> Result<Void, RoomMemberProxyError>
func unignoreUser() async -> Result<Void, RoomMemberProxyError>
@@ -49,7 +51,7 @@ extension RoomMemberProxyProtocol {
/// it exists otherwise it will be the userID with the leading `@` removed.
var sortingName: String {
// If there isn't a displayname we sort by the userID without the @.
displayName ?? String(userID.dropFirst())
(displayName ?? String(userID.dropFirst())).lowercased()
}
}
@@ -60,7 +62,7 @@ extension [RoomMemberProxyProtocol] {
if lhs.powerLevel != rhs.powerLevel {
lhs.powerLevel > rhs.powerLevel
} else {
lhs.sortingName < rhs.sortingName
lhs.sortingName.localizedStandardCompare(rhs.sortingName) == .orderedAscending
}
}
}
@@ -24,17 +24,21 @@ struct RoomMemberDetails: Identifiable, Equatable {
let permalink: URL?
let isAccountOwner: Bool
var isIgnored: Bool
var isBanned: Bool
enum Role { case administrator, moderator, user }
let role: Role
}
extension RoomMemberDetails {
init(withProxy proxy: RoomMemberProxyProtocol) {
id = proxy.userID
name = proxy.displayName ?? proxy.userID
name = proxy.displayName
avatarURL = proxy.avatarURL
permalink = proxy.permalink
isAccountOwner = proxy.isAccountOwner
isIgnored = proxy.isIgnored
isBanned = proxy.membership == .ban
role = .init(proxy.role)
}
}