Update API

This commit is contained in:
Ilya Laktyushin
2022-03-27 20:16:54 +04:00
parent b8390c10cb
commit e952261254
25 changed files with 462 additions and 179 deletions

View File

@@ -4,6 +4,40 @@ import SwiftSignalKit
import TelegramApi
import MtProtoKit
public enum RequestSimpleWebViewError {
case generic
}
func _internal_requestSimpleWebView(postbox: Postbox, network: Network, botId: PeerId, url: String, themeParams: [String: Any]?) -> Signal<String, RequestSimpleWebViewError> {
var serializedThemeParams: Api.DataJSON?
if let themeParams = themeParams, let data = try? JSONSerialization.data(withJSONObject: themeParams, options: []), let dataString = String(data: data, encoding: .utf8) {
serializedThemeParams = .dataJSON(data: dataString)
}
return postbox.transaction { transaction -> Signal<String, RequestSimpleWebViewError> in
guard let bot = transaction.getPeer(botId), let inputUser = apiInputUser(bot) else {
return .fail(.generic)
}
var flags: Int32 = 0
if let _ = serializedThemeParams {
flags |= (1 << 0)
}
return network.request(Api.functions.messages.requestSimpleWebView(flags: flags, bot: inputUser, url: url, themeParams: serializedThemeParams))
|> mapError { _ -> RequestSimpleWebViewError in
return .generic
}
|> mapToSignal { result -> Signal<String, RequestSimpleWebViewError> in
switch result {
case let .simpleWebViewResultUrl(url):
return .single(url)
}
}
}
|> castError(RequestSimpleWebViewError.self)
|> switchToLatest
}
public enum RequestWebViewResult {
case webViewResult(queryId: Int64, url: String)
case requestConfirmation(botIcon: TelegramMediaFile)
@@ -13,7 +47,7 @@ public enum RequestWebViewError {
case generic
}
func _internal_requestWebView(postbox: Postbox, network: Network, peerId: PeerId, botId: PeerId, url: String?, themeParams: [String: Any]?) -> Signal<RequestWebViewResult, RequestWebViewError> {
func _internal_requestWebView(postbox: Postbox, network: Network, peerId: PeerId, botId: PeerId, url: String?, themeParams: [String: Any]?, replyToMessageId: MessageId?) -> Signal<RequestWebViewResult, RequestWebViewError> {
var serializedThemeParams: Api.DataJSON?
if let themeParams = themeParams, let data = try? JSONSerialization.data(withJSONObject: themeParams, options: []), let dataString = String(data: data, encoding: .utf8) {
serializedThemeParams = .dataJSON(data: dataString)
@@ -26,12 +60,17 @@ func _internal_requestWebView(postbox: Postbox, network: Network, peerId: PeerId
var flags: Int32 = 0
if let _ = url {
flags |= (1 << 0)
}
if let _ = serializedThemeParams {
flags |= (1 << 1)
}
return network.request(Api.functions.messages.requestWebView(flags: flags, peer: inputPeer, bot: inputUser, url: url, themeParams: serializedThemeParams))
if let _ = serializedThemeParams {
flags |= (1 << 2)
}
var replyToMsgId: Int32?
if let replyToMessageId = replyToMessageId {
flags |= (1 << 0)
replyToMsgId = replyToMessageId.id
}
return network.request(Api.functions.messages.requestWebView(flags: flags, peer: inputPeer, bot: inputUser, url: url, themeParams: serializedThemeParams, replyToMsgId: replyToMsgId))
|> mapError { _ -> RequestWebViewError in
return .generic
}
@@ -48,7 +87,7 @@ func _internal_requestWebView(postbox: Postbox, network: Network, peerId: PeerId
return updated
})
if case let .attachMenuBot(_, attachMenuIcon) = bot, let icon = telegramMediaFileFromApiDocument(attachMenuIcon) {
if case let .attachMenuBot(_, _, _, attachMenuIcon) = bot, let icon = telegramMediaFileFromApiDocument(attachMenuIcon) {
return .single(.requestConfirmation(botIcon: icon))
} else {
return .complete()
@@ -64,38 +103,3 @@ func _internal_requestWebView(postbox: Postbox, network: Network, peerId: PeerId
|> castError(RequestWebViewError.self)
|> switchToLatest
}
public enum GetWebViewResultError {
case generic
}
func _internal_getWebViewResult(postbox: Postbox, network: Network, peerId: PeerId, botId: PeerId, queryId: Int64) -> Signal<ChatContextResult, GetWebViewResultError> {
return postbox.transaction { transaction -> Signal<ChatContextResult, GetWebViewResultError> in
guard let peer = transaction.getPeer(peerId), let inputPeer = apiInputPeer(peer), let bot = transaction.getPeer(botId), let inputUser = apiInputUser(bot) else {
return .fail(.generic)
}
return network.request(Api.functions.messages.getWebViewResult(peer: inputPeer, bot: inputUser, queryId: queryId))
|> mapError { _ -> GetWebViewResultError in
return .generic
}
|> mapToSignal { result -> Signal<ChatContextResult, GetWebViewResultError> in
return postbox.transaction { transaction -> ChatContextResult in
switch result {
case let .webViewResult(result, users):
var peers: [Peer] = []
for user in users {
let telegramUser = TelegramUser(user: user)
peers.append(telegramUser)
}
updatePeers(transaction: transaction, peers: peers, update: { _, updated -> Peer in
return updated
})
return ChatContextResult(apiResult: result, queryId: queryId)
}
}
|> castError(GetWebViewResultError.self)
}
}
|> castError(GetWebViewResultError.self)
|> switchToLatest
}