Update API

This commit is contained in:
isaac 2026-06-04 16:37:07 +02:00
parent a5825d5a67
commit ef9c1def4e
2 changed files with 74 additions and 0 deletions

View file

@ -7807,6 +7807,22 @@ public extension Api.functions.messages {
})
}
}
public extension Api.functions.messages {
static func getRichMessage(peer: Api.InputPeer, id: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.messages.Messages>) {
let buffer = Buffer()
buffer.appendInt32(1343580623)
peer.serialize(buffer, true)
serializeInt32(id, buffer: buffer, boxed: false)
return (FunctionDescription(name: "messages.getRichMessage", parameters: [("peer", ConstructorParameterDescription(peer)), ("id", ConstructorParameterDescription(id))]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.messages.Messages? in
let reader = BufferReader(buffer)
var result: Api.messages.Messages?
if let signature = reader.readInt32() {
result = Api.parse(reader, signature: signature) as? Api.messages.Messages
}
return result
})
}
}
public extension Api.functions.messages {
static func getSavedDialogs(flags: Int32, parentPeer: Api.InputPeer?, offsetDate: Int32, offsetId: Int32, offsetPeer: Api.InputPeer, limit: Int32, hash: Int64) -> (FunctionDescription, Buffer, DeserializeFunctionResponse<Api.messages.SavedDialogs>) {
let buffer = Buffer()

View file

@ -1866,6 +1866,64 @@ public extension TelegramEngine {
}
}
}
public func requestFullRichText(id: EngineMessage.Id) -> Signal<RichTextMessageAttribute?, NoError> {
let account = self.account
return self.account.postbox.transaction { transaction -> Api.InputPeer? in
return transaction.getPeer(id.peerId).flatMap(apiInputPeer)
}
|> mapToSignal { inputPeer -> Signal<RichTextMessageAttribute?, NoError> in
guard let inputPeer else {
return .single(nil)
}
if id.namespace != Namespaces.Message.Cloud {
return .single(nil)
}
return account.network.request(Api.functions.messages.getRichMessage(peer: inputPeer, id: id.id))
|> map(Optional.init)
|> `catch` { _ -> Signal<Api.messages.Messages?, NoError> in
return .single(nil)
}
|> mapToSignal { result -> Signal<RichTextMessageAttribute?, NoError> in
guard let result else {
return .single(nil)
}
let messages: [Api.Message]
let users: [Api.User]
let chats: [Api.Chat]
switch result {
case let .channelMessages(channelMessages):
messages = channelMessages.messages
users = channelMessages.users
chats = channelMessages.chats
case let .messages(messagesValue):
messages = messagesValue.messages
users = messagesValue.users
chats = messagesValue.chats
case .messagesNotModified:
return .single(nil)
case let .messagesSlice(messagesSlice):
messages = messagesSlice.messages
users = messagesSlice.users
chats = messagesSlice.chats
}
return account.postbox.transaction { transaction -> RichTextMessageAttribute? in
var peerIsForum = false
if let peer = transaction.getPeer(id.peerId), peer.isForum {
peerIsForum = true
}
updatePeers(transaction: transaction, accountPeerId: account.peerId, peers: AccumulatedPeers(chats: chats, users: users))
let _ = transaction.addMessages(messages.compactMap { message -> StoreMessage? in
return StoreMessage(apiMessage: message, accountPeerId: account.peerId, peerIsForum: peerIsForum)
}, location: .Random)
return transaction.getMessage(id)?.attributes.first(where: { $0 is RichTextMessageAttribute }) as? RichTextMessageAttribute
}
}
}
}
}
}