mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:12:26 +00:00
Update the SDK and handle breaking changes. (#2527)
This commit is contained in:
@@ -22,7 +22,7 @@ struct RoomMemberDetails: Identifiable, Hashable {
|
||||
let name: String?
|
||||
let avatarURL: URL?
|
||||
let permalink: URL?
|
||||
let isAccountOwner: Bool
|
||||
|
||||
var isIgnored: Bool
|
||||
var isBanned: Bool
|
||||
|
||||
@@ -36,7 +36,7 @@ extension RoomMemberDetails {
|
||||
name = proxy.displayName
|
||||
avatarURL = proxy.avatarURL
|
||||
permalink = proxy.permalink
|
||||
isAccountOwner = proxy.isAccountOwner
|
||||
|
||||
isIgnored = proxy.isIgnored
|
||||
isBanned = proxy.membership == .ban
|
||||
role = .init(proxy.role)
|
||||
@@ -47,7 +47,7 @@ extension RoomMemberDetails {
|
||||
name = nil
|
||||
avatarURL = nil
|
||||
permalink = nil
|
||||
isAccountOwner = false
|
||||
|
||||
isIgnored = false
|
||||
isBanned = false
|
||||
role = .user
|
||||
|
||||
@@ -19,69 +19,25 @@ import MatrixRustSDK
|
||||
|
||||
final class RoomMemberProxy: RoomMemberProxyProtocol {
|
||||
private let backgroundTaskService: BackgroundTaskServiceProtocol
|
||||
private let member: RoomMemberProtocol
|
||||
|
||||
private let member: RoomMember
|
||||
|
||||
private let backgroundAccountDataTaskName = "SendAccountDataEvent"
|
||||
private var sendAccountDataEventBackgroundTask: BackgroundTaskProtocol?
|
||||
|
||||
|
||||
private let userInitiatedDispatchQueue = DispatchQueue(label: "io.element.elementx.roommemberproxy.userinitiated", qos: .userInitiated)
|
||||
|
||||
init(member: RoomMemberProtocol, backgroundTaskService: BackgroundTaskServiceProtocol) {
|
||||
|
||||
init(member: RoomMember, backgroundTaskService: BackgroundTaskServiceProtocol) {
|
||||
self.backgroundTaskService = backgroundTaskService
|
||||
self.member = member
|
||||
}
|
||||
|
||||
lazy var userID = member.userId()
|
||||
|
||||
lazy var displayName = member.displayName()
|
||||
|
||||
lazy var avatarURL = member.avatarUrl().flatMap(URL.init(string:))
|
||||
|
||||
lazy var membership = member.membership()
|
||||
|
||||
lazy var isAccountOwner = member.isAccountUser()
|
||||
|
||||
lazy var isIgnored = member.isIgnored()
|
||||
|
||||
lazy var powerLevel = Int(member.powerLevel())
|
||||
lazy var role = member.suggestedRoleForPowerLevel()
|
||||
lazy var canInviteUsers = member.canInvite()
|
||||
lazy var canKickUsers = member.canKick()
|
||||
lazy var canBanUsers = member.canBan()
|
||||
var userID: String { member.userId }
|
||||
var displayName: String? { member.displayName }
|
||||
var avatarURL: URL? { member.avatarUrl.flatMap(URL.init(string:)) }
|
||||
|
||||
func canSendStateEvent(type: StateEventType) -> Bool {
|
||||
member.canSendState(stateEvent: type)
|
||||
}
|
||||
|
||||
func ignoreUser() async -> Result<Void, RoomMemberProxyError> {
|
||||
sendAccountDataEventBackgroundTask = await backgroundTaskService.startBackgroundTask(withName: backgroundAccountDataTaskName, isReusable: true)
|
||||
defer {
|
||||
sendAccountDataEventBackgroundTask?.stop()
|
||||
}
|
||||
|
||||
return await Task.dispatch(on: userInitiatedDispatchQueue) {
|
||||
do {
|
||||
try self.member.ignore()
|
||||
return .success(())
|
||||
} catch {
|
||||
return .failure(.ignoreUserFailed)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func unignoreUser() async -> Result<Void, RoomMemberProxyError> {
|
||||
sendAccountDataEventBackgroundTask = await backgroundTaskService.startBackgroundTask(withName: backgroundAccountDataTaskName, isReusable: true)
|
||||
defer {
|
||||
sendAccountDataEventBackgroundTask?.stop()
|
||||
}
|
||||
|
||||
return await Task.dispatch(on: userInitiatedDispatchQueue) {
|
||||
do {
|
||||
try self.member.unignore()
|
||||
return .success(())
|
||||
} catch {
|
||||
return .failure(.unignoreUserFailed)
|
||||
}
|
||||
}
|
||||
}
|
||||
var membership: MembershipState { member.membership }
|
||||
var isIgnored: Bool { member.isIgnored }
|
||||
|
||||
var powerLevel: Int { Int(member.powerLevel) }
|
||||
var role: RoomMemberRole { member.suggestedRoleForPowerLevel }
|
||||
}
|
||||
|
||||
@@ -27,19 +27,12 @@ protocol RoomMemberProxyProtocol: AnyObject {
|
||||
var userID: String { get }
|
||||
var displayName: String? { get }
|
||||
var avatarURL: URL? { get }
|
||||
|
||||
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 canKickUsers: Bool { get }
|
||||
var canBanUsers: Bool { get }
|
||||
|
||||
func ignoreUser() async -> Result<Void, RoomMemberProxyError>
|
||||
func unignoreUser() async -> Result<Void, RoomMemberProxyError>
|
||||
func canSendStateEvent(type: StateEventType) -> Bool
|
||||
}
|
||||
|
||||
extension RoomMemberProxyProtocol {
|
||||
|
||||
@@ -233,20 +233,6 @@ class RoomProxy: RoomProxyProtocol {
|
||||
return .failure(.failedRetrievingMember)
|
||||
}
|
||||
}
|
||||
|
||||
func ignoreUser(_ userID: String) async -> Result<Void, RoomProxyError> {
|
||||
sendMessageBackgroundTask = await backgroundTaskService.startBackgroundTask(withName: backgroundTaskName, isReusable: true)
|
||||
defer {
|
||||
sendMessageBackgroundTask?.stop()
|
||||
}
|
||||
|
||||
do {
|
||||
try await room.ignoreUser(userId: userID)
|
||||
return .success(())
|
||||
} catch {
|
||||
return .failure(.failedIgnoringUser)
|
||||
}
|
||||
}
|
||||
|
||||
func leaveRoom() async -> Result<Void, RoomProxyError> {
|
||||
sendMessageBackgroundTask = await backgroundTaskService.startBackgroundTask(withName: backgroundTaskName, isReusable: true)
|
||||
@@ -409,6 +395,24 @@ class RoomProxy: RoomProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func canUser(userID: String, sendStateEvent event: StateEventType) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserSendState(userId: userID, stateEvent: event))
|
||||
} catch {
|
||||
MXLog.error("Failed checking if the user can send \(event) with error: \(error)")
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
}
|
||||
|
||||
func canUserInvite(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserInvite(userId: userID))
|
||||
} catch {
|
||||
MXLog.error("Failed checking if the user can invite with error: \(error)")
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
}
|
||||
|
||||
func canUserRedactOther(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserRedactOther(userId: userID))
|
||||
@@ -427,6 +431,24 @@ class RoomProxy: RoomProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func canUserKick(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserKick(userId: userID))
|
||||
} catch {
|
||||
MXLog.error("Failed checking if the user can kick with error: \(error)")
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
}
|
||||
|
||||
func canUserBan(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserBan(userId: userID))
|
||||
} catch {
|
||||
MXLog.error("Failed checking if the user can ban with error: \(error)")
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
}
|
||||
|
||||
func canUserTriggerRoomNotification(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserTriggerRoomNotification(userId: userID))
|
||||
|
||||
@@ -82,8 +82,6 @@ protocol RoomProxyProtocol {
|
||||
func redact(_ eventID: String) async -> Result<Void, RoomProxyError>
|
||||
|
||||
func reportContent(_ eventID: String, reason: String?) async -> Result<Void, RoomProxyError>
|
||||
|
||||
func ignoreUser(_ userID: String) async -> Result<Void, RoomProxyError>
|
||||
|
||||
func leaveRoom() async -> Result<Void, RoomProxyError>
|
||||
|
||||
@@ -120,8 +118,12 @@ protocol RoomProxyProtocol {
|
||||
|
||||
func currentPowerLevelChanges() async -> Result<RoomPowerLevelChanges, RoomProxyError>
|
||||
func applyPowerLevelChanges(_ changes: RoomPowerLevelChanges) async -> Result<Void, RoomProxyError>
|
||||
func canUser(userID: String, sendStateEvent event: StateEventType) async -> Result<Bool, RoomProxyError>
|
||||
func canUserInvite(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
func canUserRedactOther(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
func canUserRedactOwn(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
func canUserKick(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
func canUserBan(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
func canUserTriggerRoomNotification(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
|
||||
// MARK: - Moderation
|
||||
|
||||
Reference in New Issue
Block a user