App now prevents redacting own messages if there is no permission (#2368)
This commit is contained in:
parent
31286c75fc
commit
30a0561251
|
@ -2180,6 +2180,27 @@ class RoomProxyMock: RoomProxyProtocol {
|
|||
return canUserRedactOtherUserIDReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - canUserRedactOwn
|
||||
|
||||
var canUserRedactOwnUserIDCallsCount = 0
|
||||
var canUserRedactOwnUserIDCalled: Bool {
|
||||
return canUserRedactOwnUserIDCallsCount > 0
|
||||
}
|
||||
var canUserRedactOwnUserIDReceivedUserID: String?
|
||||
var canUserRedactOwnUserIDReceivedInvocations: [String] = []
|
||||
var canUserRedactOwnUserIDReturnValue: Result<Bool, RoomProxyError>!
|
||||
var canUserRedactOwnUserIDClosure: ((String) async -> Result<Bool, RoomProxyError>)?
|
||||
|
||||
func canUserRedactOwn(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
canUserRedactOwnUserIDCallsCount += 1
|
||||
canUserRedactOwnUserIDReceivedUserID = userID
|
||||
canUserRedactOwnUserIDReceivedInvocations.append(userID)
|
||||
if let canUserRedactOwnUserIDClosure = canUserRedactOwnUserIDClosure {
|
||||
return await canUserRedactOwnUserIDClosure(userID)
|
||||
} else {
|
||||
return canUserRedactOwnUserIDReturnValue
|
||||
}
|
||||
}
|
||||
//MARK: - canUserTriggerRoomNotification
|
||||
|
||||
var canUserTriggerRoomNotificationUserIDCallsCount = 0
|
||||
|
|
|
@ -52,6 +52,7 @@ class RoomScreenInteractionHandler {
|
|||
|
||||
private var voiceMessageRecorderObserver: AnyCancellable?
|
||||
private var canCurrentUserRedactOthers = false
|
||||
private var canCurrentUserRedactSelf = false
|
||||
private var resumeVoiceMessagePlaybackAfterScrubbing = false
|
||||
|
||||
init(roomProxy: RoomProxyProtocol,
|
||||
|
@ -86,6 +87,12 @@ class RoomScreenInteractionHandler {
|
|||
} else {
|
||||
canCurrentUserRedactOthers = false
|
||||
}
|
||||
|
||||
if case let .success(value) = await roomProxy.canUserRedactOwn(userID: roomProxy.ownUserID) {
|
||||
canCurrentUserRedactSelf = value
|
||||
} else {
|
||||
canCurrentUserRedactSelf = false
|
||||
}
|
||||
|
||||
guard let timelineItem = timelineController.timelineItems.firstUsingStableID(itemID),
|
||||
let eventTimelineItem = timelineItem as? EventBasedTimelineItemProtocol else {
|
||||
|
@ -604,7 +611,7 @@ class RoomScreenInteractionHandler {
|
|||
// MARK: - Private
|
||||
|
||||
private func canRedactItem(_ item: EventBasedTimelineItemProtocol) -> Bool {
|
||||
item.isOutgoing || (canCurrentUserRedactOthers && !roomProxy.isDirect)
|
||||
item.isOutgoing ? canCurrentUserRedactSelf : canCurrentUserRedactOthers && !roomProxy.isDirect
|
||||
}
|
||||
|
||||
private func buildReplyInfo(for item: EventBasedTimelineItemProtocol) -> ReplyInfo {
|
||||
|
|
|
@ -332,7 +332,16 @@ class RoomProxy: RoomProxyProtocol {
|
|||
do {
|
||||
return try await .success(room.canUserRedactOther(userId: userID))
|
||||
} catch {
|
||||
MXLog.error("Failed checking if the user can redact with error: \(error)")
|
||||
MXLog.error("Failed checking if the user can redact others with error: \(error)")
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
}
|
||||
|
||||
func canUserRedactOwn(userID: String) async -> Result<Bool, RoomProxyError> {
|
||||
do {
|
||||
return try await .success(room.canUserRedactOwn(userId: userID))
|
||||
} catch {
|
||||
MXLog.error("Failed checking if the user can redact self with error: \(error)")
|
||||
return .failure(.failedCheckingPermission)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,8 @@ protocol RoomProxyProtocol {
|
|||
|
||||
func canUserRedactOther(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
|
||||
func canUserRedactOwn(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
|
||||
func canUserTriggerRoomNotification(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
|
||||
func canUserJoinCall(userID: String) async -> Result<Bool, RoomProxyError>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
You can't redact a message of your own if the room does not allow it.
|
Loading…
Reference in New Issue