From a32bb3e7efad193ebd03e1f71a867d4ebda19f90 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 7 Dec 2022 19:38:42 +0300 Subject: [PATCH] Move get_messages_info to MessagesInfo.cpp. --- CMakeLists.txt | 1 + td/telegram/MessagesInfo.cpp | 73 ++++++++++++++++++++++++++++ td/telegram/MessagesInfo.h | 7 +++ td/telegram/MessagesManager.cpp | 84 +++++---------------------------- td/telegram/MessagesManager.h | 3 -- 5 files changed, 92 insertions(+), 76 deletions(-) create mode 100644 td/telegram/MessagesInfo.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 56d00f34b..9ea3ad02b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,6 +387,7 @@ set(TDLIB_SOURCE td/telegram/MessageReplyInfo.cpp td/telegram/MessageSearchFilter.cpp td/telegram/MessageSender.cpp + td/telegram/MessagesInfo.cpp td/telegram/MessagesManager.cpp td/telegram/MessageThreadDb.cpp td/telegram/MessageTtl.cpp diff --git a/td/telegram/MessagesInfo.cpp b/td/telegram/MessagesInfo.cpp new file mode 100644 index 000000000..5b07bebcf --- /dev/null +++ b/td/telegram/MessagesInfo.cpp @@ -0,0 +1,73 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#include "td/telegram/MessagesInfo.h" + +#include "td/telegram/ContactsManager.h" +#include "td/telegram/ForumTopicManager.h" +#include "td/telegram/Td.h" + +#include "td/utils/logging.h" +#include "td/utils/misc.h" + +namespace td { + +MessagesInfo get_messages_info(Td *td, DialogId dialog_id, + telegram_api::object_ptr &&messages_ptr, + const char *source) { + CHECK(messages_ptr != nullptr); + LOG(DEBUG) << "Receive result for " << source << ": " << to_string(messages_ptr); + + vector> users; + vector> chats; + vector> topics; + MessagesInfo result; + switch (messages_ptr->get_id()) { + case telegram_api::messages_messages::ID: { + auto messages = move_tl_object_as(messages_ptr); + + users = std::move(messages->users_); + chats = std::move(messages->chats_); + result.total_count = narrow_cast(messages->messages_.size()); + result.messages = std::move(messages->messages_); + break; + } + case telegram_api::messages_messagesSlice::ID: { + auto messages = move_tl_object_as(messages_ptr); + + users = std::move(messages->users_); + chats = std::move(messages->chats_); + result.total_count = messages->count_; + result.messages = std::move(messages->messages_); + break; + } + case telegram_api::messages_channelMessages::ID: { + auto messages = move_tl_object_as(messages_ptr); + + users = std::move(messages->users_); + chats = std::move(messages->chats_); + topics = std::move(messages->topics_); + result.total_count = messages->count_; + result.messages = std::move(messages->messages_); + result.is_channel_messages = true; + break; + } + case telegram_api::messages_messagesNotModified::ID: + LOG(ERROR) << "Server returned messagesNotModified in response to " << source; + break; + default: + UNREACHABLE(); + break; + } + + td->contacts_manager_->on_get_users(std::move(users), source); + td->contacts_manager_->on_get_chats(std::move(chats), source); + td->forum_topic_manager_->on_get_forum_topic_infos(dialog_id, std::move(topics), source); + + return result; +} + +} // namespace td diff --git a/td/telegram/MessagesInfo.h b/td/telegram/MessagesInfo.h index 756227dd2..a3200f66b 100644 --- a/td/telegram/MessagesInfo.h +++ b/td/telegram/MessagesInfo.h @@ -6,16 +6,23 @@ // #pragma once +#include "td/telegram/DialogId.h" #include "td/telegram/telegram_api.h" #include "td/utils/common.h" namespace td { +class Td; + struct MessagesInfo { vector> messages; int32 total_count = 0; bool is_channel_messages = false; }; +MessagesInfo get_messages_info(Td *td, DialogId dialog_id, + telegram_api::object_ptr &&messages_ptr, + const char *source); + } // namespace td diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index a5ef0e388..a1b8da21d 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -469,7 +469,7 @@ class GetMessagesQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = td_->messages_manager_->get_messages_info(DialogId(), result_ptr.move_as_ok(), "GetMessagesQuery"); + auto info = get_messages_info(td_, DialogId(), result_ptr.move_as_ok(), "GetMessagesQuery"); LOG_IF(ERROR, info.is_channel_messages) << "Receive channel messages in GetMessagesQuery"; td_->messages_manager_->on_get_messages(std::move(info.messages), info.is_channel_messages, false, std::move(promise_), "GetMessagesQuery"); @@ -510,8 +510,7 @@ class GetChannelMessagesQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = td_->messages_manager_->get_messages_info(DialogId(channel_id_), result_ptr.move_as_ok(), - "GetChannelMessagesQuery"); + auto info = get_messages_info(td_, DialogId(channel_id_), result_ptr.move_as_ok(), "GetChannelMessagesQuery"); LOG_IF(ERROR, !info.is_channel_messages) << "Receive ordinary messages in GetChannelMessagesQuery"; // messages with invalid big identifiers can be received as messageEmpty // bots can receive messageEmpty because of their privacy mode @@ -573,8 +572,7 @@ class GetScheduledMessagesQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = - td_->messages_manager_->get_messages_info(dialog_id_, result_ptr.move_as_ok(), "GetScheduledMessagesQuery"); + auto info = get_messages_info(td_, dialog_id_, result_ptr.move_as_ok(), "GetScheduledMessagesQuery"); LOG_IF(ERROR, info.is_channel_messages != (dialog_id_.get_type() == DialogType::Channel)) << "Receive wrong messages constructor in GetScheduledMessagesQuery"; td_->messages_manager_->on_get_messages(std::move(info.messages), info.is_channel_messages, true, @@ -2116,8 +2114,7 @@ class GetDialogMessageByDateQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = - td_->messages_manager_->get_messages_info(dialog_id_, result_ptr.move_as_ok(), "GetDialogMessageByDateQuery"); + auto info = get_messages_info(td_, dialog_id_, result_ptr.move_as_ok(), "GetDialogMessageByDateQuery"); td_->messages_manager_->get_channel_difference_if_needed( dialog_id_, std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), dialog_id = dialog_id_, date = date_, @@ -2194,7 +2191,7 @@ class GetHistoryQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = td_->messages_manager_->get_messages_info(dialog_id_, result_ptr.move_as_ok(), "GetHistoryQuery"); + auto info = get_messages_info(td_, dialog_id_, result_ptr.move_as_ok(), "GetHistoryQuery"); td_->messages_manager_->get_channel_difference_if_needed( dialog_id_, std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), dialog_id = dialog_id_, @@ -2581,7 +2578,7 @@ class SearchMessagesQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = td_->messages_manager_->get_messages_info(dialog_id_, result_ptr.move_as_ok(), "SearchMessagesQuery"); + auto info = get_messages_info(td_, dialog_id_, result_ptr.move_as_ok(), "SearchMessagesQuery"); td_->messages_manager_->get_channel_difference_if_needed( dialog_id_, std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), dialog_id = dialog_id_, @@ -2747,8 +2744,7 @@ class SearchMessagesGlobalQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = - td_->messages_manager_->get_messages_info(DialogId(), result_ptr.move_as_ok(), "SearchMessagesGlobalQuery"); + auto info = get_messages_info(td_, DialogId(), result_ptr.move_as_ok(), "SearchMessagesGlobalQuery"); td_->messages_manager_->get_channel_differences_if_needed( std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), query = std::move(query_), @@ -2802,8 +2798,7 @@ class GetAllScheduledMessagesQuery final : public Td::ResultHandler { if (result_ptr.ok()->get_id() == telegram_api::messages_messagesNotModified::ID) { td_->messages_manager_->on_get_scheduled_server_messages(dialog_id_, generation_, Auto(), true); } else { - auto info = td_->messages_manager_->get_messages_info(dialog_id_, result_ptr.move_as_ok(), - "GetAllScheduledMessagesQuery"); + auto info = get_messages_info(td_, dialog_id_, result_ptr.move_as_ok(), "GetAllScheduledMessagesQuery"); td_->messages_manager_->on_get_scheduled_server_messages(dialog_id_, generation_, std::move(info.messages), false); } @@ -2836,7 +2831,7 @@ class SearchSentMediaQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = td_->messages_manager_->get_messages_info(DialogId(), result_ptr.move_as_ok(), "SearchSentMediaQuery"); + auto info = get_messages_info(td_, DialogId(), result_ptr.move_as_ok(), "SearchSentMediaQuery"); td_->messages_manager_->get_channel_differences_if_needed( std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), promise = std::move(promise_)](Result &&result) mutable { @@ -2884,8 +2879,7 @@ class GetRecentLocationsQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = - td_->messages_manager_->get_messages_info(dialog_id_, result_ptr.move_as_ok(), "GetRecentLocationsQuery"); + auto info = get_messages_info(td_, dialog_id_, result_ptr.move_as_ok(), "GetRecentLocationsQuery"); td_->messages_manager_->get_channel_difference_if_needed( dialog_id_, std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), dialog_id = dialog_id_, limit = limit_, @@ -2938,8 +2932,7 @@ class GetMessagePublicForwardsQuery final : public Td::ResultHandler { return on_error(result_ptr.move_as_error()); } - auto info = - td_->messages_manager_->get_messages_info(DialogId(), result_ptr.move_as_ok(), "GetMessagePublicForwardsQuery"); + auto info = get_messages_info(td_, DialogId(), result_ptr.move_as_ok(), "GetMessagePublicForwardsQuery"); td_->messages_manager_->get_channel_differences_if_needed( std::move(info), PromiseCreator::lambda([actor_id = td_->messages_manager_actor_.get(), promise = std::move(promise_)](Result &&result) mutable { @@ -9798,61 +9791,6 @@ void MessagesManager::on_get_empty_messages(DialogId dialog_id, const vector &&messages_ptr, - const char *source) { - CHECK(messages_ptr != nullptr); - LOG(DEBUG) << "Receive result for " << source << ": " << to_string(messages_ptr); - - vector> users; - vector> chats; - vector> topics; - MessagesInfo result; - switch (messages_ptr->get_id()) { - case telegram_api::messages_messages::ID: { - auto messages = move_tl_object_as(messages_ptr); - - users = std::move(messages->users_); - chats = std::move(messages->chats_); - result.total_count = narrow_cast(messages->messages_.size()); - result.messages = std::move(messages->messages_); - break; - } - case telegram_api::messages_messagesSlice::ID: { - auto messages = move_tl_object_as(messages_ptr); - - users = std::move(messages->users_); - chats = std::move(messages->chats_); - result.total_count = messages->count_; - result.messages = std::move(messages->messages_); - break; - } - case telegram_api::messages_channelMessages::ID: { - auto messages = move_tl_object_as(messages_ptr); - - users = std::move(messages->users_); - chats = std::move(messages->chats_); - topics = std::move(messages->topics_); - result.total_count = messages->count_; - result.messages = std::move(messages->messages_); - result.is_channel_messages = true; - break; - } - case telegram_api::messages_messagesNotModified::ID: - LOG(ERROR) << "Server returned messagesNotModified in response to " << source; - break; - default: - UNREACHABLE(); - break; - } - - td_->contacts_manager_->on_get_users(std::move(users), source); - td_->contacts_manager_->on_get_chats(std::move(chats), source); - td_->forum_topic_manager_->on_get_forum_topic_infos(dialog_id, std::move(topics), source); - - return result; -} - void MessagesManager::get_channel_difference_if_needed(DialogId dialog_id, MessagesInfo &&messages_info, Promise &&promise) { if (!dialog_id.is_valid()) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 808d5269d..88825a966 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -196,9 +196,6 @@ class MessagesManager final : public Actor { void on_get_empty_messages(DialogId dialog_id, const vector &empty_message_ids); - MessagesInfo get_messages_info(DialogId dialog_id, tl_object_ptr &&messages_ptr, - const char *source); - void get_channel_difference_if_needed(DialogId dialog_id, MessagesInfo &&messages_info, Promise &&promise);