From cc2bf11950fc0d1c08ae8795212bcd4313d2e648 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Thu, 28 Jul 2022 13:06:29 +1000 Subject: [PATCH] feat: remove all reaction per emoji for open group moderation. --- .../ConversationVC+Interaction.swift | 29 ++++++++++++------- .../Open Groups/OpenGroupAPI.swift | 23 +++++++++++++++ .../Open Groups/Types/SOGSEndpoint.swift | 13 +++++++++ 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/Session/Conversations/ConversationVC+Interaction.swift b/Session/Conversations/ConversationVC+Interaction.swift index 977773ab1..422a11bf3 100644 --- a/Session/Conversations/ConversationVC+Interaction.swift +++ b/Session/Conversations/ConversationVC+Interaction.swift @@ -1009,20 +1009,27 @@ extension ConversationVC: Storage.shared .read { db -> Promise in - guard let openGroup: OpenGroup = try? OpenGroup.fetchOne(db, id: cellViewModel.threadId) else { + guard + let openGroup: OpenGroup = try? OpenGroup + .fetchOne(db, id: cellViewModel.threadId), + let openGroupServerMessageId: Int64 = try? Interaction + .select(.openGroupServerMessageId) + .filter(id: cellViewModel.id) + .asRequest(of: Int64.self) + .fetchOne(db) + else { return Promise(error: StorageError.objectNotFound) } - // TODO: Need to add this API () - return Promise.value(()) - // OpenGroupAPI - // .reactionDelete( - // db, - // emoji: emoji, - // in: openGroup.roomToken, - // on: openGroup.server - // ) - // .map { _ in () } + return OpenGroupAPI + .reactionDelete( + db, + emoji: emoji, + id: openGroupServerMessageId, + in: openGroup.roomToken, + on: openGroup.server + ) + .map { _ in () } } .done { _ in Storage.shared.writeAsync { db in diff --git a/SessionMessagingKit/Open Groups/OpenGroupAPI.swift b/SessionMessagingKit/Open Groups/OpenGroupAPI.swift index 65190d397..f6f64a230 100644 --- a/SessionMessagingKit/Open Groups/OpenGroupAPI.swift +++ b/SessionMessagingKit/Open Groups/OpenGroupAPI.swift @@ -591,6 +591,29 @@ public enum OpenGroupAPI { ) } + // MARK: - Reactions + + public static func reactionDelete( + _ db: Database, + emoji: String, + id: Int64, + in roomToken: String, + on server: String, + using dependencies: SMKDependencies = SMKDependencies() + ) -> Promise { + return OpenGroupAPI + .send( + db, + request: Request( + method: .delete, + server: server, + endpoint: .reactionDelete(roomToken, id: id, emoji: emoji) + ), + using: dependencies + ) + .map { responseInfo, _ in responseInfo } + } + // MARK: - Pinning /// Adds a pinned message to this room diff --git a/SessionMessagingKit/Open Groups/Types/SOGSEndpoint.swift b/SessionMessagingKit/Open Groups/Types/SOGSEndpoint.swift index 052b2fe80..c0f70cf30 100644 --- a/SessionMessagingKit/Open Groups/Types/SOGSEndpoint.swift +++ b/SessionMessagingKit/Open Groups/Types/SOGSEndpoint.swift @@ -26,6 +26,11 @@ extension OpenGroupAPI { case roomMessagesSince(String, seqNo: Int64) case roomDeleteMessages(String, sessionId: String) + // Reactions + + case reactionDelete(String, id: Int64, emoji: String) + case reaction(String, id: Int64, emoji: String) + // Pinning case roomPinMessage(String, id: Int64) @@ -86,6 +91,14 @@ extension OpenGroupAPI { case .roomDeleteMessages(let roomToken, let sessionId): return "room/\(roomToken)/all/\(sessionId)" + + // Reactions + + case .reactionDelete(let roomToken, let messageId, let emoji): + return "room/\(roomToken)/reactions/\(messageId)/\(emoji)" + + case .reaction(let roomToken, let messageId, let emoji): + return "room/\(roomToken)/reaction/\(messageId)/\(emoji)" // Pinning