From 27f63e9e2e98a4057bd333bd97134693838769e4 Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 18 Oct 2020 02:10:58 +0300 Subject: [PATCH] Replace getBlockedChats with getBlockedMessageSenders. GitOrigin-RevId: 044f70ab823b8302dddc8b7a128f19514306272a --- td/generate/scheme/td_api.tl | 8 ++++++-- td/generate/scheme/td_api.tlo | Bin 183844 -> 184044 bytes td/telegram/MessagesManager.cpp | 23 +++++++++++++++++++---- td/telegram/MessagesManager.h | 2 ++ td/telegram/Td.cpp | 18 +++++++++++------- td/telegram/Td.h | 2 +- td/telegram/cli.cpp | 5 +++-- 7 files changed, 42 insertions(+), 16 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 1c7f1d75f..0d32208ac 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -624,6 +624,10 @@ messageSenderUser user_id:int32 = MessageSender; messageSenderChat chat_id:int53 = MessageSender; +//@description Represents a list of message senders @total_count Approximate total count of messages senders found @senders List of message senders +messageSenders total_count:int32 senders:vector = MessageSenders; + + //@class MessageForwardOrigin @description Contains information about the origin of a forwarded message //@description The message was originally sent by a known user @sender_user_id Identifier of the user that originally sent the message @@ -4246,8 +4250,8 @@ toggleMessageSenderIsBlocked sender:MessageSender is_blocked:Bool = Ok; //@report_spam Pass true if the sender must be reported to the Telegram moderators blockMessageSenderFromReplies message_id:int53 delete_message:Bool delete_all_messages:Bool report_spam:Bool = Ok; -//@description Returns chats that were blocked by the current user @offset Number of chats to skip in the result; must be non-negative @limit The maximum number of chats to return; up to 100 -getBlockedChats offset:int32 limit:int32 = Chats; +//@description Returns users and chats that were blocked by the current user @offset Number of users and chats to skip in the result; must be non-negative @limit The maximum number of users and chats to return; up to 100 +getBlockedMessageSenders offset:int32 limit:int32 = MessageSenders; //@description Adds a user to the contact list or edits an existing contact by their user identifier @contact The contact to add or edit; phone number can be empty and needs to be specified only if known, vCard is ignored diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index 362a089d76f695a1f572af651a7ba61d626a3b82..9d16b1095db8cdfea16cfb404bdc9c28b0ce812b 100644 GIT binary patch delta 181 zcmZ27hx^T3Zr(?;^{p77KxQNFW@&+1mb=&Zd{c{y6Vp?JQ}a?LFHn`)d_cNIl+k^& ztKsWE5?}?n2nDG{#S9>^>30km4H(%c$95@8h_KC?3^TUKnN5eow(THDO}mO7<8~E2 sCLM8=1QEUxiS*PGr=0xc?9>z_8$kv#K#ZJF!W6&)(ztz(D^o@X0IsGzzW@LL delta 87 zcmaDemwU+^Zr(?;^{p77KzbwZX6emuq+3K8-8L5*zW&qxMvrm(8$Bikafz?%e6R4Q nr MessagesManager::get_message_sender_ob td_->contacts_manager_->get_user_id_object(user_id, "get_message_sender_object")); } +td_api::object_ptr MessagesManager::get_message_sender_object(DialogId dialog_id) const { + if (dialog_id.get_type() == DialogType::User) { + return get_message_sender_object(dialog_id.get_user_id(), DialogId()); + } + return get_message_sender_object(UserId(), dialog_id); +} + BufferSlice MessagesManager::get_dialog_database_value(const Dialog *d) { // can't use log_event_store, because it tries to parse stored Dialog LogEventStorerCalcLength storer_calc_length; @@ -15810,11 +15817,19 @@ void MessagesManager::on_get_blocked_dialogs(int32 offset, int32 limit, int64 ra for (auto &blocked_peer : blocked_peers) { CHECK(blocked_peer != nullptr); DialogId dialog_id(blocked_peer->peer_id_); - force_create_dialog(dialog_id, "on_get_blocked_dialogs"); - if (have_dialog(dialog_id)) { - result.push_back(dialog_id); + if (dialog_id.get_type() == DialogType::User) { + if (td_->contacts_manager_->have_user(dialog_id.get_user_id())) { + result.push_back(dialog_id); + } else { + LOG(ERROR) << "Have no info about " << dialog_id.get_user_id(); + } } else { - LOG(ERROR) << "Have no info about " << dialog_id; + force_create_dialog(dialog_id, "on_get_blocked_dialogs"); + if (have_dialog(dialog_id)) { + result.push_back(dialog_id); + } else { + LOG(ERROR) << "Have no info about " << dialog_id; + } } } if (!result.empty() && offset + result.size() > static_cast(total_count)) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 4ae9b4eb0..de0998cc4 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -192,6 +192,8 @@ class MessagesManager : public Actor { td_api::object_ptr get_message_sender_object(UserId user_id, DialogId dialog_id) const; + td_api::object_ptr get_message_sender_object(DialogId dialog_id) const; + static vector get_message_ids(const vector &input_message_ids); static vector get_server_message_ids(const vector &message_ids); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 468dd9152..5ff84b53c 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -2094,23 +2094,27 @@ class GetChatEventLogRequest : public RequestOnceActor { } }; -class GetBlockedChatsRequest : public RequestActor<> { +class GetBlockedMessageSendersRequest : public RequestActor<> { int32 offset_; int32 limit_; int64 random_id_; - std::pair> dialog_ids_; + std::pair> message_senders_; void do_run(Promise &&promise) override { - dialog_ids_ = td->messages_manager_->get_blocked_dialogs(offset_, limit_, random_id_, std::move(promise)); + message_senders_ = td->messages_manager_->get_blocked_dialogs(offset_, limit_, random_id_, std::move(promise)); } void do_send_result() override { - send_result(MessagesManager::get_chats_object(dialog_ids_)); + auto senders = + transform(message_senders_.second, [messages_manager = td->messages_manager_.get()](DialogId dialog_id) { + return messages_manager->get_message_sender_object(dialog_id); + }); + send_result(td_api::make_object(message_senders_.first, std::move(senders))); } public: - GetBlockedChatsRequest(ActorShared td, uint64 request_id, int32 offset, int32 limit) + GetBlockedMessageSendersRequest(ActorShared td, uint64 request_id, int32 offset, int32 limit) : RequestActor(std::move(td), request_id), offset_(offset), limit_(limit), random_id_(0) { } }; @@ -6421,9 +6425,9 @@ void Td::on_request(uint64 id, const td_api::blockMessageSenderFromReplies &requ std::move(promise)); } -void Td::on_request(uint64 id, const td_api::getBlockedChats &request) { +void Td::on_request(uint64 id, const td_api::getBlockedMessageSenders &request) { CHECK_IS_USER(); - CREATE_REQUEST(GetBlockedChatsRequest, request.offset_, request.limit_); + CREATE_REQUEST(GetBlockedMessageSendersRequest, request.offset_, request.limit_); } void Td::on_request(uint64 id, td_api::addContact &request) { diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 500e9ad61..07fee920d 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -789,7 +789,7 @@ class Td final : public NetQueryCallback { void on_request(uint64 id, const td_api::blockMessageSenderFromReplies &request); - void on_request(uint64 id, const td_api::getBlockedChats &request); + void on_request(uint64 id, const td_api::getBlockedMessageSenders &request); void on_request(uint64 id, td_api::addContact &request); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 8a2efc1f5..ecb8bc3d0 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -2312,7 +2312,7 @@ class CliClient final : public Actor { send_request(td_api::make_object(args)); } else if (op == "tme") { send_request(td_api::make_object(args)); - } else if (op == "gbc") { + } else if (op == "gbms") { string offset; string limit; @@ -2323,7 +2323,8 @@ class CliClient final : public Actor { if (limit.empty()) { limit = "10"; } - send_request(td_api::make_object(to_integer(offset), to_integer(limit))); + send_request( + td_api::make_object(to_integer(offset), to_integer(limit))); } else if (op == "gu") { send_request(td_api::make_object(as_user_id(args))); } else if (op == "gsu") {