feat: open group emoji reacts endpoints work

This commit is contained in:
Ryan Zhao 2022-08-01 15:45:59 +10:00
parent 8920cbdc28
commit a66948812e
5 changed files with 65 additions and 7 deletions

View File

@ -1110,7 +1110,7 @@ extension ConversationVC:
else { return }
if remove {
_ = OpenGroupAPI
OpenGroupAPI
.reactionDelete(
db,
emoji: emoji,
@ -1118,8 +1118,19 @@ extension ConversationVC:
in: openGroup.roomToken,
on: openGroup.server
)
.retainUntilComplete()
} else {
_ = OpenGroupAPI
OpenGroupAPI
.reactors(
db,
emoji: emoji,
id: openGroupServerMessageId,
in: openGroup.roomToken,
on: openGroup.server
)
.retainUntilComplete()
OpenGroupAPI
.reactionAdd(
db,
emoji: emoji,
@ -1127,6 +1138,7 @@ extension ConversationVC:
in: openGroup.roomToken,
on: openGroup.server
)
.retainUntilComplete()
}
} else {

View File

@ -659,6 +659,34 @@ public enum OpenGroupAPI {
// MARK: - Reactions
public static func reactors(
_ db: Database,
emoji: String,
id: Int64,
in roomToken: String,
on server: String,
using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> {
guard let encodedEmoji: String = "👍".addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
return Promise(error: OpenGroupAPIError.invalidEmoji)
}
return OpenGroupAPI
.send(
db,
request: Request<NoBody, Endpoint>(
method: .get,
server: server,
endpoint: .reactors(roomToken, id: id, emoji: encodedEmoji)
),
using: dependencies
)
.map { responseInfo, _ in
print("Ryan Test: \(responseInfo)")
return responseInfo
}
}
public static func reactionAdd(
_ db: Database,
emoji: String,
@ -667,13 +695,17 @@ public enum OpenGroupAPI {
on server: String,
using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> {
guard let encodedEmoji: String = emoji.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
return Promise(error: OpenGroupAPIError.invalidEmoji)
}
return OpenGroupAPI
.send(
db,
request: Request<NoBody, Endpoint>(
method: .put,
server: server,
endpoint: .reaction(roomToken, id: id, emoji: emoji)
endpoint: .reaction(roomToken, id: id, emoji: encodedEmoji)
),
using: dependencies
)
@ -688,13 +720,17 @@ public enum OpenGroupAPI {
on server: String,
using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> {
guard let encodedEmoji: String = emoji.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
return Promise(error: OpenGroupAPIError.invalidEmoji)
}
return OpenGroupAPI
.send(
db,
request: Request<NoBody, Endpoint>(
method: .delete,
server: server,
endpoint: .reaction(roomToken, id: id, emoji: emoji)
endpoint: .reaction(roomToken, id: id, emoji: encodedEmoji)
),
using: dependencies
)
@ -709,13 +745,17 @@ public enum OpenGroupAPI {
on server: String,
using dependencies: SMKDependencies = SMKDependencies()
) -> Promise<OnionRequestResponseInfoType> {
guard let encodedEmoji: String = emoji.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else {
return Promise(error: OpenGroupAPIError.invalidEmoji)
}
return OpenGroupAPI
.send(
db,
request: Request<NoBody, Endpoint>(
method: .delete,
server: server,
endpoint: .reactionDelete(roomToken, id: id, emoji: emoji)
endpoint: .reactionDelete(roomToken, id: id, emoji: encodedEmoji)
),
using: dependencies
)
@ -1286,7 +1326,7 @@ public enum OpenGroupAPI {
guard let url: URL = request.url else { return nil }
var updatedRequest: URLRequest = request
let path: String = url.path
let path: String = url.path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? url.path
.appending(url.query.map { value in "?\(value)" })
let method: String = (request.httpMethod ?? "GET")
let timestamp: Int = Int(floor(dependencies.date.timeIntervalSince1970))

View File

@ -6,12 +6,14 @@ public enum OpenGroupAPIError: LocalizedError {
case decryptionFailed
case signingFailed
case noPublicKey
case invalidEmoji
public var errorDescription: String? {
switch self {
case .decryptionFailed: return "Couldn't decrypt response."
case .signingFailed: return "Couldn't sign message."
case .noPublicKey: return "Couldn't find server public key."
case .invalidEmoji: return "The emoji is invalid."
}
}
}

View File

@ -30,6 +30,7 @@ extension OpenGroupAPI {
case reactionDelete(String, id: Int64, emoji: String)
case reaction(String, id: Int64, emoji: String)
case reactors(String, id: Int64, emoji: String)
// Pinning
@ -99,6 +100,9 @@ extension OpenGroupAPI {
case .reaction(let roomToken, let messageId, let emoji):
return "room/\(roomToken)/reaction/\(messageId)/\(emoji)"
case .reactors(let roomToken, let messageId, let emoji):
return "room/\(roomToken)/reactors/\(messageId)/\(emoji)"
// Pinning

View File

@ -588,7 +588,7 @@ public enum OnionRequestAPI: OnionRequestAPIType {
case .v4:
// Note: We need to remove the leading forward slash unless we are explicitly hitting a legacy
// endpoint (in which case we need it to ensure the request signing works correctly
let endpoint: String = url.path
let endpoint: String = (url.path.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? url.path)
.appending(url.query.map { value in "?\(value)" })
let requestInfo: RequestInfo = RequestInfo(