Add support for new ban and delete all endpoint

This commit is contained in:
Niels Andriesse 2021-07-13 14:33:42 +10:00
parent 3238487917
commit ba60879343
3 changed files with 36 additions and 3 deletions

View File

@ -35,6 +35,11 @@ extension ContextMenuVC {
let title = "Ban User" let title = "Ban User"
return Action(icon: UIImage(named: "ic_block")!, title: title) { delegate?.ban(viewItem) } return Action(icon: UIImage(named: "ic_block")!, title: title) { delegate?.ban(viewItem) }
} }
static func banAndDeleteAllMessages(_ viewItem: ConversationViewItem, _ delegate: ContextMenuActionDelegate?) -> Action {
let title = "Ban and Delete All"
return Action(icon: UIImage(named: "ic_block")!, title: title) { delegate?.banAndDeleteAllMessages(viewItem) }
}
} }
static func actions(for viewItem: ConversationViewItem, delegate: ContextMenuActionDelegate?) -> [Action] { static func actions(for viewItem: ConversationViewItem, delegate: ContextMenuActionDelegate?) -> [Action] {
@ -53,7 +58,10 @@ extension ContextMenuVC {
let isGroup = viewItem.isGroupThread let isGroup = viewItem.isGroupThread
if isGroup && viewItem.interaction is TSIncomingMessage { result.append(Action.copySessionID(viewItem, delegate)) } if isGroup && viewItem.interaction is TSIncomingMessage { result.append(Action.copySessionID(viewItem, delegate)) }
if !isGroup || viewItem.userCanDeleteGroupMessage { result.append(Action.delete(viewItem, delegate)) } if !isGroup || viewItem.userCanDeleteGroupMessage { result.append(Action.delete(viewItem, delegate)) }
if isGroup && viewItem.interaction is TSIncomingMessage && viewItem.userHasModerationPermission { result.append(Action.ban(viewItem, delegate)) } if isGroup && viewItem.interaction is TSIncomingMessage && viewItem.userHasModerationPermission {
result.append(Action.ban(viewItem, delegate))
result.append(Action.banAndDeleteAllMessages(viewItem, delegate))
}
return result return result
case .mediaMessage, .audio, .genericAttachment: case .mediaMessage, .audio, .genericAttachment:
var result: [Action] = [] var result: [Action] = []
@ -63,7 +71,10 @@ extension ContextMenuVC {
let isGroup = viewItem.isGroupThread let isGroup = viewItem.isGroupThread
if isGroup && viewItem.interaction is TSIncomingMessage { result.append(Action.copySessionID(viewItem, delegate)) } if isGroup && viewItem.interaction is TSIncomingMessage { result.append(Action.copySessionID(viewItem, delegate)) }
if !isGroup || viewItem.userCanDeleteGroupMessage { result.append(Action.delete(viewItem, delegate)) } if !isGroup || viewItem.userCanDeleteGroupMessage { result.append(Action.delete(viewItem, delegate)) }
if isGroup && viewItem.interaction is TSIncomingMessage && viewItem.userHasModerationPermission { result.append(Action.ban(viewItem, delegate)) } if isGroup && viewItem.interaction is TSIncomingMessage && viewItem.userHasModerationPermission {
result.append(Action.ban(viewItem, delegate))
result.append(Action.banAndDeleteAllMessages(viewItem, delegate))
}
return result return result
default: return [] default: return []
} }
@ -79,4 +90,5 @@ protocol ContextMenuActionDelegate : class {
func delete(_ viewItem: ConversationViewItem) func delete(_ viewItem: ConversationViewItem)
func save(_ viewItem: ConversationViewItem) func save(_ viewItem: ConversationViewItem)
func ban(_ viewItem: ConversationViewItem) func ban(_ viewItem: ConversationViewItem)
func banAndDeleteAllMessages(_ viewItem: ConversationViewItem)
} }

View File

@ -532,7 +532,8 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
func ban(_ viewItem: ConversationViewItem) { func ban(_ viewItem: ConversationViewItem) {
guard let message = viewItem.interaction as? TSIncomingMessage, message.isOpenGroupMessage else { return } guard let message = viewItem.interaction as? TSIncomingMessage, message.isOpenGroupMessage else { return }
let alert = UIAlertController(title: "Ban This User?", message: nil, preferredStyle: .alert) let explanation = "This will ban the selected user from this room. It won't ban them from other rooms."
let alert = UIAlertController(title: "Session", message: explanation, preferredStyle: .alert)
let threadID = thread.uniqueId! let threadID = thread.uniqueId!
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
let publicKey = message.authorId let publicKey = message.authorId
@ -542,6 +543,20 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil)) alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
present(alert, animated: true, completion: nil) present(alert, animated: true, completion: nil)
} }
func banAndDeleteAllMessages(_ viewItem: ConversationViewItem) {
guard let message = viewItem.interaction as? TSIncomingMessage, message.isOpenGroupMessage else { return }
let explanation = "This will ban the selected user from this room and delete all messages sent by them. It won't ban them from other rooms or delete the messages they sent there."
let alert = UIAlertController(title: "Session", message: explanation, preferredStyle: .alert)
let threadID = thread.uniqueId!
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { _ in
let publicKey = message.authorId
guard let openGroupV2 = Storage.shared.getV2OpenGroup(for: threadID) else { return }
OpenGroupAPIV2.banAndDeleteAllMessages(publicKey, from: openGroupV2.room, on: openGroupV2.server).retainUntilComplete()
}))
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
}
func handleQuoteViewCancelButtonTapped() { func handleQuoteViewCancelButtonTapped() {
snInputView.quoteDraftInfo = nil snInputView.quoteDraftInfo = nil

View File

@ -406,6 +406,12 @@ public final class OpenGroupAPIV2 : NSObject {
return send(request).map(on: OpenGroupAPIV2.workQueue) { _ in } return send(request).map(on: OpenGroupAPIV2.workQueue) { _ in }
} }
public static func banAndDeleteAllMessages(_ publicKey: String, from room: String, on server: String) -> Promise<Void> {
let parameters = [ "public_key" : publicKey ]
let request = Request(verb: .post, room: room, server: server, endpoint: "ban_and_delete_all", parameters: parameters)
return send(request).map(on: OpenGroupAPIV2.workQueue) { _ in }
}
public static func unban(_ publicKey: String, from room: String, on server: String) -> Promise<Void> { public static func unban(_ publicKey: String, from room: String, on server: String) -> Promise<Void> {
let request = Request(verb: .delete, room: room, server: server, endpoint: "block_list/\(publicKey)") let request = Request(verb: .delete, room: room, server: server, endpoint: "block_list/\(publicKey)")
return send(request).map(on: OpenGroupAPIV2.workQueue) { _ in } return send(request).map(on: OpenGroupAPIV2.workQueue) { _ in }