From 2b5b6386fcf9d1a590e3a73c229efcd85861c21f Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 16 Sep 2020 15:42:39 +0300 Subject: [PATCH] Update layer 119. GitOrigin-RevId: 5a357984b79e16c155b209ab4cfc146a137519c9 --- td/generate/scheme/telegram_api.tl | 6 ++--- td/generate/scheme/telegram_api.tlo | Bin 215360 -> 215604 bytes td/telegram/MessagesManager.cpp | 38 +++++++++++++++++++++------- td/telegram/MessagesManager.h | 4 +-- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/td/generate/scheme/telegram_api.tl b/td/generate/scheme/telegram_api.tl index 25303aefb..9a15c00dd 100644 --- a/td/generate/scheme/telegram_api.tl +++ b/td/generate/scheme/telegram_api.tl @@ -1149,11 +1149,11 @@ help.countriesList#87d0759e countries:Vector hash:int = help.Count messageViews#455b853d flags:# views:flags.0?int forwards:flags.1?int replies:flags.2?MessageReplies = MessageViews; -messages.messageViews#2c3f2ae2 views:Vector users:Vector = messages.MessageViews; +messages.messageViews#b6c4f543 views:Vector chats:Vector users:Vector = messages.MessageViews; stats.messageStats#8999f295 views_graph:StatsGraph = stats.MessageStats; -messages.discussionMessage#d25fad90 message:Message read_max_id:int chats:Vector users:Vector = messages.DiscussionMessage; +messages.discussionMessage#6d64690e flags:# messages:Vector max_id:flags.0?int read_max_id:flags.1?int chats:Vector users:Vector = messages.DiscussionMessage; messageReplyHeader#a6d57763 flags:# reply_to_msg_id:int reply_to_peer_id:flags.0?Peer reply_to_top_id:flags.1?int = MessageReplyHeader; @@ -1467,7 +1467,7 @@ channels.joinChannel#24b524c5 channel:InputChannel = Updates; channels.leaveChannel#f836aa95 channel:InputChannel = Updates; channels.inviteToChannel#199f3a6c channel:InputChannel users:Vector = Updates; channels.deleteChannel#c0111fe3 channel:InputChannel = Updates; -channels.exportMessageLink#ceb77163 channel:InputChannel id:int grouped:Bool = ExportedMessageLink; +channels.exportMessageLink#e63fadeb flags:# grouped:flags.0?true thread:flags.1?true channel:InputChannel id:int = ExportedMessageLink; channels.toggleSignatures#1f69b606 channel:InputChannel enabled:Bool = Updates; channels.getAdminedPublicChannels#f8b036af flags:# by_location:flags.0?true check_limit:flags.1?true = messages.Chats; channels.editBanned#72796912 channel:InputChannel user_id:InputUser banned_rights:ChatBannedRights = Updates; diff --git a/td/generate/scheme/telegram_api.tlo b/td/generate/scheme/telegram_api.tlo index 5485b3fae21f2e7561a4a98cd5391dee250143bd..ae46cfb3ab499c8aeaa7857b6e59885a660b630d 100644 GIT binary patch delta 275 zcmX>wiFeBs-VIOmS@<$jayP%wFJWYH{(59vbAn-ef+6Gf1Vg4Hd|T5lu>;89ycb{>3;>8vcay{F5}LWk;w9Tt^Kp< z9V?hrray6E)Zt)HFUl`1NKKi1AXI^att6u;H8F)@`h&lWiqm@?nB}MEd|*(W*x diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 6205cc321..c182f2107 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -399,7 +399,8 @@ class GetDialogUnreadMarksQuery : public Td::ResultHandler { class GetDiscussionMessageQuery : public Td::ResultHandler { public: struct Result { - FullMessageId full_message_id; + vector full_message_ids; + MessageId max_message_id; MessageId max_read_message_id; }; @@ -432,9 +433,19 @@ class GetDiscussionMessageQuery : public Td::ResultHandler { td->contacts_manager_->on_get_users(std::move(ptr->users_), "GetDiscussionMessageQuery"); td->contacts_manager_->on_get_chats(std::move(ptr->chats_), "GetDiscussionMessageQuery"); Result result; - result.full_message_id = td->messages_manager_->on_get_message(std::move(ptr->message_), false, true, false, false, - false, "GetDiscussionMessageQuery"); - result.max_read_message_id = MessageId(ServerMessageId(ptr->read_max_id_)); + for (auto &message : ptr->messages_) { + auto full_message_id = td->messages_manager_->on_get_message(std::move(message), false, true, false, false, false, + "GetDiscussionMessageQuery"); + if (full_message_id.get_message_id().is_valid()) { + result.full_message_ids.push_back(full_message_id); + } + } + if ((ptr->flags_ & telegram_api::messages_discussionMessage::MAX_ID_MASK) != 0) { + result.max_message_id = MessageId(ServerMessageId(ptr->max_id_)); + } + if ((ptr->flags_ & telegram_api::messages_discussionMessage::READ_MAX_ID_MASK) != 0) { + result.max_read_message_id = MessageId(ServerMessageId(ptr->read_max_id_)); + } promise_.set_value(std::move(result)); } @@ -640,8 +651,13 @@ class ExportChannelMessageLinkQuery : public Td::ResultHandler { ignore_result_ = ignore_result; auto input_channel = td->contacts_manager_->get_input_channel(channel_id); CHECK(input_channel != nullptr); - send_query(G()->net_query_creator().create(telegram_api::channels_exportMessageLink( - std::move(input_channel), message_id.get_server_message_id().get(), for_group))); + int32 flags = 0; + if (for_group) { + flags |= telegram_api::channels_exportMessageLink::GROUPED_MASK; + } + send_query(G()->net_query_creator().create( + telegram_api::channels_exportMessageLink(flags, false /*ignored*/, false /*ignored*/, std::move(input_channel), + message_id.get_server_message_id().get()))); } void on_result(uint64 id, BufferSlice packet) override { @@ -1344,6 +1360,7 @@ class GetMessagesViewsQuery : public Td::ResultHandler { return on_error(id, Status::Error(500, "Wrong number of message views returned")); } td->contacts_manager_->on_get_users(std::move(result->users_), "GetMessagesViewsQuery"); + td->contacts_manager_->on_get_chats(std::move(result->chats_), "GetMessagesViewsQuery"); for (size_t i = 0; i < message_ids_.size(); i++) { FullMessageId full_message_id{dialog_id_, message_ids_[i]}; @@ -15543,7 +15560,8 @@ FullMessageId MessagesManager::get_discussion_message(DialogId dialog_id, Messag return promise.set_error(result.move_as_error()); } send_closure(actor_id, &MessagesManager::on_get_discussion_message, dialog_id, message_id, - result.ok().full_message_id, result.ok().max_read_message_id, std::move(promise)); + std::move(result.ok_ref().full_message_ids), result.ok().max_message_id, + result.ok().max_read_message_id, std::move(promise)); }); td_->create_handler(std::move(query_promise))->send(dialog_id, message_id); @@ -15551,7 +15569,8 @@ FullMessageId MessagesManager::get_discussion_message(DialogId dialog_id, Messag return FullMessageId(); } -void MessagesManager::on_get_discussion_message(DialogId dialog_id, MessageId message_id, FullMessageId full_message_id, +void MessagesManager::on_get_discussion_message(DialogId dialog_id, MessageId message_id, + vector full_message_ids, MessageId max_message_id, MessageId max_read_message_id, Promise &&promise) { if (G()->close_flag()) { return promise.set_error(Status::Error(500, "Request aborted")); @@ -15571,9 +15590,10 @@ void MessagesManager::on_get_discussion_message(DialogId dialog_id, MessageId me return promise.set_value(Unit()); } - if (!full_message_id.get_message_id().is_valid()) { + if (full_message_ids.empty()) { return promise.set_value(Unit()); } + auto full_message_id = full_message_ids.back(); if (full_message_id.get_dialog_id() != DialogId(m->reply_info.channel_id)) { return promise.set_error(Status::Error(500, "Expected message in a different chat")); } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index b2d2788b9..857b690d0 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -556,8 +556,8 @@ class MessagesManager : public Actor { FullMessageId get_discussion_message(DialogId dialog_id, MessageId message_id, bool force, Promise &&promise); - void on_get_discussion_message(DialogId dialog_id, MessageId message_id, FullMessageId full_message_id, - MessageId max_read_message_id, Promise &&promise); + void on_get_discussion_message(DialogId dialog_id, MessageId message_id, vector full_message_ids, + MessageId max_message_id, MessageId max_read_message_id, Promise &&promise); MessageId get_dialog_pinned_message(DialogId dialog_id, Promise &&promise);