From 9e8512411c1c0662c4a5df63eb30b27e8ad3357d Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 11 Oct 2019 18:31:16 +0300 Subject: [PATCH] Combine block_user and unblock_user. GitOrigin-RevId: 50c31ba274a7a5b70efe68ee8d307541e65eb48c --- td/telegram/ContactsManager.cpp | 73 ++++++++------------------------- td/telegram/ContactsManager.h | 6 +-- td/telegram/Td.cpp | 4 +- td/telegram/UpdatesManager.cpp | 2 +- 4 files changed, 23 insertions(+), 62 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index cdafee890..952ea1e4e 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -56,6 +56,7 @@ #include #include #include +#include #include namespace td { @@ -334,56 +335,34 @@ class ResetWebAuthorizationsQuery : public Td::ResultHandler { } }; -class BlockUserQuery : public Td::ResultHandler { +class SetUserIsBlockedQuery : public Td::ResultHandler { UserId user_id_; public: - void send(UserId user_id, tl_object_ptr &&user) { + void send(UserId user_id, tl_object_ptr &&user, bool is_blocked) { user_id_ = user_id; - send_query(G()->net_query_creator().create(create_storer(telegram_api::contacts_block(std::move(user))))); + if (is_blocked) { + send_query(G()->net_query_creator().create(create_storer(telegram_api::contacts_block(std::move(user))))); + } else { + send_query(G()->net_query_creator().create(create_storer(telegram_api::contacts_unblock(std::move(user))))); + } } void on_result(uint64 id, BufferSlice packet) override { + static_assert( + std::is_same::value, ""); auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); } bool result = result_ptr.ok(); - LOG_IF(WARNING, !result) << "Block " << user_id_ << " has failed"; + LOG_IF(WARNING, !result) << "Block/Unblock " << user_id_ << " has failed"; } void on_error(uint64 id, Status status) override { if (!G()->close_flag()) { - LOG(WARNING) << "Receive error for blockUser: " << status; - td->messages_manager_->repair_dialog_action_bar(DialogId(user_id_)); - } - status.ignore(); - } -}; - -class UnblockUserQuery : public Td::ResultHandler { - UserId user_id_; - - public: - void send(UserId user_id, tl_object_ptr &&user) { - user_id_ = user_id; - send_query(G()->net_query_creator().create(create_storer(telegram_api::contacts_unblock(std::move(user))))); - } - - void on_result(uint64 id, BufferSlice packet) override { - auto result_ptr = fetch_result(packet); - if (result_ptr.is_error()) { - return on_error(id, result_ptr.move_as_error()); - } - - bool result = result_ptr.ok(); - LOG_IF(WARNING, !result) << "Unblock " << user_id_ << " has failed"; - } - - void on_error(uint64 id, Status status) override { - if (!G()->close_flag()) { - LOG(WARNING) << "Receive error for unblockUser: " << status; + LOG(WARNING) << "Receive error for SetUserIsBlockedQuery: " << status; td->messages_manager_->repair_dialog_action_bar(DialogId(user_id_)); } status.ignore(); @@ -3814,9 +3793,9 @@ void ContactsManager::disconnect_all_websites(Promise &&promise) const { td_->create_handler(std::move(promise))->send(); } -Status ContactsManager::block_user(UserId user_id) { +Status ContactsManager::set_user_is_blocked(UserId user_id, bool is_blocked) { if (user_id == get_my_id()) { - return Status::Error(5, "Can't block self"); + return Status::Error(5, is_blocked ? Slice("Can't block self") : Slice("Can't unblock self")); } auto user = get_input_user(user_id); @@ -3824,25 +3803,9 @@ Status ContactsManager::block_user(UserId user_id) { return Status::Error(5, "User not found"); } - td_->create_handler()->send(user_id, std::move(user)); + td_->create_handler()->send(user_id, std::move(user), is_blocked); - on_update_user_blocked(user_id, true); - return Status::OK(); -} - -Status ContactsManager::unblock_user(UserId user_id) { - if (user_id == get_my_id()) { - return Status::Error(5, "Can't unblock self"); - } - - auto user = get_input_user(user_id); - if (user == nullptr) { - return Status::Error(5, "User not found"); - } - - td_->create_handler()->send(user_id, std::move(user)); - - on_update_user_blocked(user_id, false); + on_update_user_is_blocked(user_id, is_blocked); return Status::OK(); } @@ -8088,8 +8051,8 @@ void ContactsManager::on_update_user_local_was_online(User *u, UserId user_id, i } } -void ContactsManager::on_update_user_blocked(UserId user_id, bool is_blocked) { - LOG(INFO) << "Receive update user blocked with " << user_id << " and is_blocked = " << is_blocked; +void ContactsManager::on_update_user_is_blocked(UserId user_id, bool is_blocked) { + LOG(INFO) << "Receive update user is blocked with " << user_id << " and is_blocked = " << is_blocked; if (!user_id.is_valid()) { LOG(ERROR) << "Receive invalid " << user_id; return; diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 00b67436b..33a9c8a78 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -156,7 +156,7 @@ class ContactsManager : public Actor { void on_update_user_photo(UserId user_id, tl_object_ptr &&photo_ptr); void on_update_user_online(UserId user_id, tl_object_ptr &&status); void on_update_user_local_was_online(UserId user_id, int32 local_was_online); - void on_update_user_blocked(UserId user_id, bool is_blocked); + void on_update_user_is_blocked(UserId user_id, bool is_blocked); void on_update_user_common_chat_count(UserId user_id, int32 common_chat_count); void on_update_user_need_phone_number_privacy_exception(UserId user_id, bool need_phone_number_privacy_exception); @@ -246,9 +246,7 @@ class ContactsManager : public Actor { void disconnect_website(int64 authorizations_id, Promise &&promise) const; void disconnect_all_websites(Promise &&promise) const; - Status block_user(UserId user_id); - - Status unblock_user(UserId user_id); + Status set_user_is_blocked(UserId user_id, bool is_blocked); int64 get_blocked_users(int32 offset, int32 limit, Promise &&promise); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 1d877740d..559a39bec 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -6299,12 +6299,12 @@ void Td::on_request(uint64 id, const td_api::deleteFile &request) { void Td::on_request(uint64 id, const td_api::blockUser &request) { CHECK_IS_USER(); - answer_ok_query(id, contacts_manager_->block_user(UserId(request.user_id_))); + answer_ok_query(id, contacts_manager_->set_user_is_blocked(UserId(request.user_id_), true)); } void Td::on_request(uint64 id, const td_api::unblockUser &request) { CHECK_IS_USER(); - answer_ok_query(id, contacts_manager_->unblock_user(UserId(request.user_id_))); + answer_ok_query(id, contacts_manager_->set_user_is_blocked(UserId(request.user_id_), false)); } void Td::on_request(uint64 id, const td_api::getBlockedUsers &request) { diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index db31a5a67..ced1992f0 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -1698,7 +1698,7 @@ void UpdatesManager::on_update(tl_object_ptr upda } void UpdatesManager::on_update(tl_object_ptr update, bool /*force_apply*/) { - td_->contacts_manager_->on_update_user_blocked(UserId(update->user_id_), update->blocked_); + td_->contacts_manager_->on_update_user_is_blocked(UserId(update->user_id_), update->blocked_); } void UpdatesManager::on_update(tl_object_ptr update, bool /*force_apply*/) {