feat: add & delete emoji reacts in open groups

pull/638/head
Ryan Zhao 3 years ago
parent cc2bf11950
commit f7a6d0dbb0

@ -1022,7 +1022,7 @@ extension ConversationVC:
} }
return OpenGroupAPI return OpenGroupAPI
.reactionDelete( .reactionDeleteAll(
db, db,
emoji: emoji, emoji: emoji,
id: openGroupServerMessageId, id: openGroupServerMessageId,
@ -1077,7 +1077,6 @@ extension ConversationVC:
.filter(id: thread.id) .filter(id: thread.id)
.updateAll(db, SessionThread.Columns.shouldBeVisible.set(to: true)) .updateAll(db, SessionThread.Columns.shouldBeVisible.set(to: true))
// TODO: Need to handle open group specific logic
// Update the database // Update the database
if remove { if remove {
_ = try Reaction _ = try Reaction
@ -1100,30 +1099,60 @@ extension ConversationVC:
Emoji.addRecent(db, emoji: emoji) Emoji.addRecent(db, emoji: emoji)
} }
// Send the actual message if let openGroup: OpenGroup = try? OpenGroup.fetchOne(db, id: cellViewModel.threadId) {
try MessageSender.send( // Send reaction to open groups
db, guard
message: VisibleMessage( let openGroupServerMessageId: Int64 = try? Interaction
sentTimestamp: UInt64(sentTimestamp), .select(.openGroupServerMessageId)
// TODO: Is the 'groupPublicKey' needed here? .filter(id: cellViewModel.id)
groupPublicKey: (thread.variant == .closedGroup ? thread.id : nil), .asRequest(of: Int64.self)
text: nil, .fetchOne(db)
reaction: VisibleMessage.VMReaction( else { return }
timestamp: UInt64(cellViewModel.timestampMs),
publicKey: { if remove {
guard cellViewModel.variant == .standardIncoming else { _ = OpenGroupAPI
return cellViewModel.currentUserPublicKey .reactionDelete(
} db,
emoji: emoji,
return cellViewModel.authorId id: openGroupServerMessageId,
}(), in: openGroup.roomToken,
emoji: emoji, on: openGroup.server
kind: (remove ? .remove : .react) )
) } else {
), _ = OpenGroupAPI
interactionId: cellViewModel.id, .reactionAdd(
in: thread db,
) emoji: emoji,
id: openGroupServerMessageId,
in: openGroup.roomToken,
on: openGroup.server
)
}
} else {
// Send the actual message
try MessageSender.send(
db,
message: VisibleMessage(
sentTimestamp: UInt64(sentTimestamp),
text: nil,
reaction: VisibleMessage.VMReaction(
timestamp: UInt64(cellViewModel.timestampMs),
publicKey: {
guard cellViewModel.variant == .standardIncoming else {
return cellViewModel.currentUserPublicKey
}
return cellViewModel.authorId
}(),
emoji: emoji,
kind: (remove ? .remove : .react)
)
),
interactionId: cellViewModel.id,
in: thread
)
}
}, },
completion: { [weak self] _, _ in completion: { [weak self] _, _ in
self?.handleMessageSent() self?.handleMessageSent()

@ -593,6 +593,27 @@ public enum OpenGroupAPI {
// MARK: - Reactions // MARK: - Reactions
public static func reactionAdd(
_ db: Database,
emoji: String,
id: Int64,
in roomToken: String,
on server: String,
using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> {
return OpenGroupAPI
.send(
db,
request: Request<NoBody, Endpoint>(
method: .put,
server: server,
endpoint: .reaction(roomToken, id: id, emoji: emoji)
),
using: dependencies
)
.map { responseInfo, _ in responseInfo }
}
public static func reactionDelete( public static func reactionDelete(
_ db: Database, _ db: Database,
emoji: String, emoji: String,
@ -600,6 +621,27 @@ public enum OpenGroupAPI {
in roomToken: String, in roomToken: String,
on server: String, on server: String,
using dependencies: SMKDependencies = SMKDependencies() using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> {
return OpenGroupAPI
.send(
db,
request: Request<NoBody, Endpoint>(
method: .delete,
server: server,
endpoint: .reaction(roomToken, id: id, emoji: emoji)
),
using: dependencies
)
.map { responseInfo, _ in responseInfo }
}
public static func reactionDeleteAll(
_ db: Database,
emoji: String,
id: Int64,
in roomToken: String,
on server: String,
using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> { ) -> Promise<OnionRequestResponseInfoType> {
return OpenGroupAPI return OpenGroupAPI
.send( .send(

Loading…
Cancel
Save