From 5987ca69ff4ce1c9a2ba3728e776568395701d27 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 15 Nov 2021 12:07:52 +0300 Subject: [PATCH] Move get_message_sender_dialog_id to MessageSender.cpp. --- td/telegram/ContactsManager.cpp | 49 +++++---------------------------- td/telegram/ContactsManager.h | 13 ++++----- td/telegram/MessageSender.cpp | 25 +++++++++++++++++ td/telegram/MessageSender.h | 3 ++ td/telegram/Td.cpp | 23 +++++++++------- td/telegram/Td.h | 6 ++-- 6 files changed, 57 insertions(+), 62 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index fd7de0f81..d801e0164 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -14846,32 +14846,6 @@ std::pair> ContactsManager::search_among_dialogs(const v return {narrow_cast(result.first), transform(result.second, [](int64 key) { return DialogId(key); })}; } -Result ContactsManager::get_participant_dialog_id( - const td_api::object_ptr &participant_id) { - if (participant_id == nullptr) { - return Status::Error(400, "Member identifier is not specified"); - } - switch (participant_id->get_id()) { - case td_api::messageSenderUser::ID: { - auto user_id = UserId(static_cast(participant_id.get())->user_id_); - if (!user_id.is_valid()) { - return Status::Error(400, "Invalid user identifier specified"); - } - return DialogId(user_id); - } - case td_api::messageSenderChat::ID: { - auto dialog_id = DialogId(static_cast(participant_id.get())->chat_id_); - if (!dialog_id.is_valid()) { - return Status::Error(400, "Invalid chat identifier specified"); - } - return dialog_id; - } - default: - UNREACHABLE(); - return DialogId(); - } -} - void ContactsManager::add_dialog_participant(DialogId dialog_id, UserId user_id, int32 forward_limit, Promise &&promise) { if (!td_->messages_manager_->have_dialog_force(dialog_id, "add_dialog_participant")) { @@ -14915,12 +14889,9 @@ void ContactsManager::add_dialog_participants(DialogId dialog_id, const vector &participant_id, +void ContactsManager::set_dialog_participant_status(DialogId dialog_id, DialogId participant_dialog_id, const tl_object_ptr &chat_member_status, Promise &&promise) { - TRY_RESULT_PROMISE(promise, participant_dialog_id, get_participant_dialog_id(participant_id)); - auto status = get_dialog_participant_status(chat_member_status); if (!td_->messages_manager_->have_dialog_force(dialog_id, "set_dialog_participant_status")) { return promise.set_error(Status::Error(400, "Chat not found")); @@ -14950,11 +14921,8 @@ void ContactsManager::set_dialog_participant_status(DialogId dialog_id, } } -void ContactsManager::ban_dialog_participant(DialogId dialog_id, - const tl_object_ptr &participant_id, +void ContactsManager::ban_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, int32 banned_until_date, bool revoke_messages, Promise &&promise) { - TRY_RESULT_PROMISE(promise, participant_dialog_id, get_participant_dialog_id(participant_id)); - if (!td_->messages_manager_->have_dialog_force(dialog_id, "ban_dialog_participant")) { return promise.set_error(Status::Error(400, "Chat not found")); } @@ -14979,18 +14947,15 @@ void ContactsManager::ban_dialog_participant(DialogId dialog_id, } } -void ContactsManager::get_dialog_participant(DialogId dialog_id, - const tl_object_ptr &participant_id, +void ContactsManager::get_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, Promise> &&promise) { - TRY_RESULT_PROMISE(promise, participant_dialog_id, get_participant_dialog_id(participant_id)); - auto new_promise = PromiseCreator::lambda( [actor_id = actor_id(this), promise = std::move(promise)](Result &&result) mutable { TRY_RESULT_PROMISE(promise, dialog_participant, std::move(result)); send_closure(actor_id, &ContactsManager::finish_get_dialog_participant, std::move(dialog_participant), std::move(promise)); }); - get_dialog_participant(dialog_id, participant_dialog_id, std::move(new_promise)); + do_get_dialog_participant(dialog_id, participant_dialog_id, std::move(new_promise)); } void ContactsManager::finish_get_dialog_participant(DialogParticipant &&dialog_participant, @@ -15007,10 +14972,10 @@ void ContactsManager::finish_get_dialog_participant(DialogParticipant &&dialog_p promise.set_value(get_chat_member_object(dialog_participant)); } -void ContactsManager::get_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, - Promise &&promise) { +void ContactsManager::do_get_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, + Promise &&promise) { LOG(INFO) << "Receive GetChatMember request to get " << participant_dialog_id << " in " << dialog_id; - if (!td_->messages_manager_->have_dialog_force(dialog_id, "get_dialog_participant")) { + if (!td_->messages_manager_->have_dialog_force(dialog_id, "do_get_dialog_participant")) { return promise.set_error(Status::Error(400, "Chat not found")); } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 7bc092927..0d86b2aad 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -526,14 +526,14 @@ class ContactsManager final : public Actor { void add_dialog_participants(DialogId dialog_id, const vector &user_ids, Promise &&promise); - void set_dialog_participant_status(DialogId dialog_id, const tl_object_ptr &participant_id, + void set_dialog_participant_status(DialogId dialog_id, DialogId participant_dialog_id, const tl_object_ptr &chat_member_status, Promise &&promise); - void ban_dialog_participant(DialogId dialog_id, const tl_object_ptr &participant_id, - int32 banned_until_date, bool revoke_messages, Promise &&promise); + void ban_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, int32 banned_until_date, + bool revoke_messages, Promise &&promise); - void get_dialog_participant(DialogId dialog_id, const tl_object_ptr &participant_id, + void get_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, Promise> &&promise); void search_dialog_participants(DialogId dialog_id, const string &query, int32 limit, DialogParticipantsFilter filter, @@ -1419,8 +1419,6 @@ class ContactsManager final : public Actor { bool update_permanent_invite_link(DialogInviteLink &invite_link, DialogInviteLink new_invite_link); - static Result get_participant_dialog_id(const td_api::object_ptr &participant_id); - void add_chat_participant(ChatId chat_id, UserId user_id, int32 forward_limit, Promise &&promise); void add_channel_participant(ChannelId channel_id, UserId user_id, const DialogParticipantStatus &old_status, @@ -1441,7 +1439,8 @@ class ContactsManager final : public Actor { DialogParticipants search_private_chat_participants(UserId my_user_id, UserId peer_user_id, const string &query, int32 limit, DialogParticipantsFilter filter) const; - void get_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, Promise &&promise); + void do_get_dialog_participant(DialogId dialog_id, DialogId participant_dialog_id, + Promise &&promise); void finish_get_dialog_participant(DialogParticipant &&dialog_participant, Promise> &&promise); diff --git a/td/telegram/MessageSender.cpp b/td/telegram/MessageSender.cpp index e25dff561..1b0ddfb17 100644 --- a/td/telegram/MessageSender.cpp +++ b/td/telegram/MessageSender.cpp @@ -54,4 +54,29 @@ td_api::object_ptr get_message_sender_object(Td *td, Dial return get_message_sender_object(td, UserId(), dialog_id, source); } +Result get_message_sender_dialog_id(const td_api::object_ptr &message_sender_id) { + if (message_sender_id == nullptr) { + return Status::Error(400, "Member identifier is not specified"); + } + switch (message_sender_id->get_id()) { + case td_api::messageSenderUser::ID: { + auto user_id = UserId(static_cast(message_sender_id.get())->user_id_); + if (!user_id.is_valid()) { + return Status::Error(400, "Invalid user identifier specified"); + } + return DialogId(user_id); + } + case td_api::messageSenderChat::ID: { + auto dialog_id = DialogId(static_cast(message_sender_id.get())->chat_id_); + if (!dialog_id.is_valid()) { + return Status::Error(400, "Invalid chat identifier specified"); + } + return dialog_id; + } + default: + UNREACHABLE(); + return DialogId(); + } +} + } // namespace td diff --git a/td/telegram/MessageSender.h b/td/telegram/MessageSender.h index 2427d34da..abf7b8074 100644 --- a/td/telegram/MessageSender.h +++ b/td/telegram/MessageSender.h @@ -11,6 +11,7 @@ #include "td/telegram/UserId.h" #include "td/utils/common.h" +#include "td/utils/Status.h" namespace td { @@ -27,4 +28,6 @@ td_api::object_ptr get_message_sender_object(Td *td, User td_api::object_ptr get_message_sender_object(Td *td, DialogId dialog_id, const char *source); +Result get_message_sender_dialog_id(const td_api::object_ptr &message_sender_id); + } // namespace td diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 667efb006..86fc2196a 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -60,6 +60,7 @@ #include "td/telegram/MessageId.h" #include "td/telegram/MessageLinkInfo.h" #include "td/telegram/MessageSearchFilter.h" +#include "td/telegram/MessageSender.h" #include "td/telegram/MessagesManager.h" #include "td/telegram/MessageThreadInfo.h" #include "td/telegram/misc.h" @@ -6227,9 +6228,8 @@ void Td::on_request(uint64 id, const td_api::leaveChat &request) { td_api::make_object(status.get_rank(), status.is_anonymous(), false); } } - contacts_manager_->set_dialog_participant_status( - dialog_id, td_api::make_object(contacts_manager_->get_my_id().get()), new_status, - std::move(promise)); + contacts_manager_->set_dialog_participant_status(dialog_id, DialogId(contacts_manager_->get_my_id()), new_status, + std::move(promise)); } void Td::on_request(uint64 id, const td_api::addChatMember &request) { @@ -6246,16 +6246,18 @@ void Td::on_request(uint64 id, const td_api::addChatMembers &request) { std::move(promise)); } -void Td::on_request(uint64 id, td_api::setChatMemberStatus &request) { +void Td::on_request(uint64 id, const td_api::setChatMemberStatus &request) { CREATE_OK_REQUEST_PROMISE(); - contacts_manager_->set_dialog_participant_status(DialogId(request.chat_id_), request.member_id_, request.status_, + TRY_RESULT_PROMISE(promise, participant_dialog_id, get_message_sender_dialog_id(request.member_id_)); + contacts_manager_->set_dialog_participant_status(DialogId(request.chat_id_), participant_dialog_id, request.status_, std::move(promise)); } void Td::on_request(uint64 id, const td_api::banChatMember &request) { CREATE_OK_REQUEST_PROMISE(); - contacts_manager_->ban_dialog_participant(DialogId(request.chat_id_), request.member_id_, request.banned_until_date_, - request.revoke_messages_, std::move(promise)); + TRY_RESULT_PROMISE(promise, participant_dialog_id, get_message_sender_dialog_id(request.member_id_)); + contacts_manager_->ban_dialog_participant(DialogId(request.chat_id_), participant_dialog_id, + request.banned_until_date_, request.revoke_messages_, std::move(promise)); } void Td::on_request(uint64 id, const td_api::canTransferOwnership &request) { @@ -6280,9 +6282,10 @@ void Td::on_request(uint64 id, td_api::transferChatOwnership &request) { std::move(promise)); } -void Td::on_request(uint64 id, td_api::getChatMember &request) { +void Td::on_request(uint64 id, const td_api::getChatMember &request) { CREATE_REQUEST_PROMISE(); - contacts_manager_->get_dialog_participant(DialogId(request.chat_id_), request.member_id_, std::move(promise)); + TRY_RESULT_PROMISE(promise, participant_dialog_id, get_message_sender_dialog_id(request.member_id_)); + contacts_manager_->get_dialog_participant(DialogId(request.chat_id_), participant_dialog_id, std::move(promise)); } void Td::on_request(uint64 id, td_api::searchChatMembers &request) { @@ -6300,7 +6303,7 @@ void Td::on_request(uint64 id, td_api::searchChatMembers &request) { DialogParticipantsFilter(request.filter_), std::move(query_promise)); } -void Td::on_request(uint64 id, td_api::getChatAdministrators &request) { +void Td::on_request(uint64 id, const td_api::getChatAdministrators &request) { CREATE_REQUEST(GetChatAdministratorsRequest, request.chat_id_); } diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 27e7e2863..bb27a8a89 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -852,7 +852,7 @@ class Td final : public Actor { void on_request(uint64 id, const td_api::addChatMembers &request); - void on_request(uint64 id, td_api::setChatMemberStatus &request); + void on_request(uint64 id, const td_api::setChatMemberStatus &request); void on_request(uint64 id, const td_api::banChatMember &request); @@ -860,11 +860,11 @@ class Td final : public Actor { void on_request(uint64 id, td_api::transferChatOwnership &request); - void on_request(uint64 id, td_api::getChatMember &request); + void on_request(uint64 id, const td_api::getChatMember &request); void on_request(uint64 id, td_api::searchChatMembers &request); - void on_request(uint64 id, td_api::getChatAdministrators &request); + void on_request(uint64 id, const td_api::getChatAdministrators &request); void on_request(uint64 id, const td_api::replacePrimaryChatInviteLink &request);