From ef9c1def4ef49d5cb8638e1b04b359bd3e6fd53b Mon Sep 17 00:00:00 2001 From: isaac <> Date: Thu, 4 Jun 2026 16:37:07 +0200 Subject: [PATCH] Update API --- submodules/TelegramApi/Sources/Api42.swift | 16 +++++ .../Messages/TelegramEngineMessages.swift | 58 +++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/submodules/TelegramApi/Sources/Api42.swift b/submodules/TelegramApi/Sources/Api42.swift index 2bea97a246..a9b40045e3 100644 --- a/submodules/TelegramApi/Sources/Api42.swift +++ b/submodules/TelegramApi/Sources/Api42.swift @@ -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) { + 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) { let buffer = Buffer() diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/TelegramEngineMessages.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/TelegramEngineMessages.swift index caba903fda..ab4bdf762d 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/TelegramEngineMessages.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/TelegramEngineMessages.swift @@ -1866,6 +1866,64 @@ public extension TelegramEngine { } } } + + public func requestFullRichText(id: EngineMessage.Id) -> Signal { + let account = self.account + return self.account.postbox.transaction { transaction -> Api.InputPeer? in + return transaction.getPeer(id.peerId).flatMap(apiInputPeer) + } + |> mapToSignal { inputPeer -> Signal 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 in + return .single(nil) + } + |> mapToSignal { result -> Signal 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 + } + } + } + } } }