Move resolve_dependencies to Dependencies.cpp.
GitOrigin-RevId: a14d38050af2a7d24f87642e63147642603a7ea5
This commit is contained in:
parent
129f96da69
commit
c36d45153c
@ -380,6 +380,7 @@ set(TDLIB_SOURCE
|
|||||||
td/telegram/Contact.cpp
|
td/telegram/Contact.cpp
|
||||||
td/telegram/ContactsManager.cpp
|
td/telegram/ContactsManager.cpp
|
||||||
td/telegram/DelayDispatcher.cpp
|
td/telegram/DelayDispatcher.cpp
|
||||||
|
td/telegram/Dependencies.cpp
|
||||||
td/telegram/DeviceTokenManager.cpp
|
td/telegram/DeviceTokenManager.cpp
|
||||||
td/telegram/DhCache.cpp
|
td/telegram/DhCache.cpp
|
||||||
td/telegram/DialogAdministrator.cpp
|
td/telegram/DialogAdministrator.cpp
|
||||||
|
@ -7535,7 +7535,7 @@ void ContactsManager::on_load_user_full_from_database(UserId user_id, string val
|
|||||||
|
|
||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
dependencies.user_ids.insert(user_id);
|
dependencies.user_ids.insert(user_id);
|
||||||
td_->messages_manager_->resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
if (user_full->need_phone_number_privacy_exception && is_user_contact(user_id)) {
|
if (user_full->need_phone_number_privacy_exception && is_user_contact(user_id)) {
|
||||||
user_full->need_phone_number_privacy_exception = false;
|
user_full->need_phone_number_privacy_exception = false;
|
||||||
@ -7705,7 +7705,7 @@ void ContactsManager::on_load_chat_full_from_database(ChatId chat_id, string val
|
|||||||
dependencies.user_ids.insert(participant.user_id);
|
dependencies.user_ids.insert(participant.user_id);
|
||||||
dependencies.user_ids.insert(participant.inviter_user_id);
|
dependencies.user_ids.insert(participant.inviter_user_id);
|
||||||
}
|
}
|
||||||
td_->messages_manager_->resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
for (auto &participant : chat_full->participants) {
|
for (auto &participant : chat_full->participants) {
|
||||||
get_bot_info_force(participant.user_id);
|
get_bot_info_force(participant.user_id);
|
||||||
@ -7778,10 +7778,10 @@ void ContactsManager::on_load_channel_full_from_database(ChannelId channel_id, s
|
|||||||
|
|
||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
dependencies.channel_ids.insert(channel_id);
|
dependencies.channel_ids.insert(channel_id);
|
||||||
td_->messages_manager_->add_dialog_dependencies(dependencies, DialogId(channel_full->linked_channel_id));
|
MessagesManager::add_dialog_dependencies(dependencies, DialogId(channel_full->linked_channel_id));
|
||||||
dependencies.chat_ids.insert(channel_full->migrated_from_chat_id);
|
dependencies.chat_ids.insert(channel_full->migrated_from_chat_id);
|
||||||
dependencies.user_ids.insert(channel_full->bot_user_ids.begin(), channel_full->bot_user_ids.end());
|
dependencies.user_ids.insert(channel_full->bot_user_ids.begin(), channel_full->bot_user_ids.end());
|
||||||
td_->messages_manager_->resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
for (auto &user_id : channel_full->bot_user_ids) {
|
for (auto &user_id : channel_full->bot_user_ids) {
|
||||||
get_bot_info_force(user_id);
|
get_bot_info_force(user_id);
|
||||||
|
52
td/telegram/Dependencies.cpp
Normal file
52
td/telegram/Dependencies.cpp
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
|
||||||
|
//
|
||||||
|
// 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/Dependencies.h"
|
||||||
|
|
||||||
|
#include "td/telegram/ContactsManager.h"
|
||||||
|
#include "td/telegram/MessagesManager.h"
|
||||||
|
#include "td/telegram/Td.h"
|
||||||
|
#include "td/telegram/WebPagesManager.h"
|
||||||
|
|
||||||
|
#include "td/utils/logging.h"
|
||||||
|
|
||||||
|
namespace td {
|
||||||
|
|
||||||
|
void resolve_dependencies_force(Td *td, const Dependencies &dependencies) {
|
||||||
|
for (auto user_id : dependencies.user_ids) {
|
||||||
|
if (user_id.is_valid() && !td->contacts_manager_->have_user_force(user_id)) {
|
||||||
|
LOG(ERROR) << "Can't find " << user_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto chat_id : dependencies.chat_ids) {
|
||||||
|
if (chat_id.is_valid() && !td->contacts_manager_->have_chat_force(chat_id)) {
|
||||||
|
LOG(ERROR) << "Can't find " << chat_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto channel_id : dependencies.channel_ids) {
|
||||||
|
if (channel_id.is_valid() && !td->contacts_manager_->have_channel_force(channel_id)) {
|
||||||
|
LOG(ERROR) << "Can't find " << channel_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto secret_chat_id : dependencies.secret_chat_ids) {
|
||||||
|
if (secret_chat_id.is_valid() && !td->contacts_manager_->have_secret_chat_force(secret_chat_id)) {
|
||||||
|
LOG(ERROR) << "Can't find " << secret_chat_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto dialog_id : dependencies.dialog_ids) {
|
||||||
|
if (dialog_id.is_valid() && !td->messages_manager_->have_dialog_force(dialog_id)) {
|
||||||
|
LOG(ERROR) << "Can't find " << dialog_id;
|
||||||
|
td->messages_manager_->force_create_dialog(dialog_id, "resolve_dependencies_force");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto web_page_id : dependencies.web_page_ids) {
|
||||||
|
if (web_page_id.is_valid()) {
|
||||||
|
td->web_pages_manager_->have_web_page_force(web_page_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace td
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
|
class Td;
|
||||||
|
|
||||||
struct Dependencies {
|
struct Dependencies {
|
||||||
std::unordered_set<UserId, UserIdHash> user_ids;
|
std::unordered_set<UserId, UserIdHash> user_ids;
|
||||||
std::unordered_set<ChatId, ChatIdHash> chat_ids;
|
std::unordered_set<ChatId, ChatIdHash> chat_ids;
|
||||||
@ -26,4 +28,6 @@ struct Dependencies {
|
|||||||
std::unordered_set<WebPageId, WebPageIdHash> web_page_ids;
|
std::unordered_set<WebPageId, WebPageIdHash> web_page_ids;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void resolve_dependencies_force(Td *td, const Dependencies &dependencies);
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
#include "td/telegram/UpdatesManager.h"
|
#include "td/telegram/UpdatesManager.h"
|
||||||
#include "td/telegram/Version.h"
|
#include "td/telegram/Version.h"
|
||||||
#include "td/telegram/WebPageId.h"
|
#include "td/telegram/WebPageId.h"
|
||||||
#include "td/telegram/WebPagesManager.h"
|
|
||||||
|
|
||||||
#include "td/actor/PromiseFuture.h"
|
#include "td/actor/PromiseFuture.h"
|
||||||
#include "td/actor/SleepActor.h"
|
#include "td/actor/SleepActor.h"
|
||||||
@ -12874,7 +12873,7 @@ void MessagesManager::load_dialogs(vector<DialogId> dialog_ids, Promise<Unit> &&
|
|||||||
add_dialog_dependencies(dependencies, dialog_id);
|
add_dialog_dependencies(dependencies, dialog_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
for (auto dialog_id : dialog_ids) {
|
for (auto dialog_id : dialog_ids) {
|
||||||
if (dialog_id.is_valid()) {
|
if (dialog_id.is_valid()) {
|
||||||
@ -17164,7 +17163,7 @@ void MessagesManager::on_get_history_from_database(DialogId dialog_id, MessageId
|
|||||||
is_first = false;
|
is_first = false;
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
if (!added_new_message && !only_local && dialog_id.get_type() != DialogType::SecretChat) {
|
if (!added_new_message && !only_local && dialog_id.get_type() != DialogType::SecretChat) {
|
||||||
if (from_the_end) {
|
if (from_the_end) {
|
||||||
@ -17441,7 +17440,7 @@ void MessagesManager::on_get_scheduled_messages_from_database(DialogId dialog_id
|
|||||||
added_message_ids.push_back(m->message_id);
|
added_message_ids.push_back(m->message_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
for (auto message_id : added_message_ids) {
|
for (auto message_id : added_message_ids) {
|
||||||
send_update_new_message(d, get_message(d, message_id));
|
send_update_new_message(d, get_message(d, message_id));
|
||||||
@ -18123,40 +18122,6 @@ void MessagesManager::add_dialog_dependencies(Dependencies &dependencies, Dialog
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesManager::resolve_dependencies_force(const Dependencies &dependencies) {
|
|
||||||
for (auto user_id : dependencies.user_ids) {
|
|
||||||
if (user_id.is_valid() && !td_->contacts_manager_->have_user_force(user_id)) {
|
|
||||||
LOG(ERROR) << "Can't find " << user_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto chat_id : dependencies.chat_ids) {
|
|
||||||
if (chat_id.is_valid() && !td_->contacts_manager_->have_chat_force(chat_id)) {
|
|
||||||
LOG(ERROR) << "Can't find " << chat_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto channel_id : dependencies.channel_ids) {
|
|
||||||
if (channel_id.is_valid() && !td_->contacts_manager_->have_channel_force(channel_id)) {
|
|
||||||
LOG(ERROR) << "Can't find " << channel_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto secret_chat_id : dependencies.secret_chat_ids) {
|
|
||||||
if (secret_chat_id.is_valid() && !td_->contacts_manager_->have_secret_chat_force(secret_chat_id)) {
|
|
||||||
LOG(ERROR) << "Can't find " << secret_chat_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto dialog_id : dependencies.dialog_ids) {
|
|
||||||
if (dialog_id.is_valid() && !have_dialog_force(dialog_id)) {
|
|
||||||
LOG(ERROR) << "Can't find " << dialog_id;
|
|
||||||
force_create_dialog(dialog_id, "resolve_dependencies_force");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (auto web_page_id : dependencies.web_page_ids) {
|
|
||||||
if (web_page_id.is_valid()) {
|
|
||||||
td_->web_pages_manager_->have_web_page_force(web_page_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MessagesManager::SendMessageLogEvent {
|
class MessagesManager::SendMessageLogEvent {
|
||||||
public:
|
public:
|
||||||
DialogId dialog_id;
|
DialogId dialog_id;
|
||||||
@ -25713,7 +25678,7 @@ MessagesManager::Message *MessagesManager::on_get_message_from_database(DialogId
|
|||||||
|
|
||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
add_message_dependencies(dependencies, d->dialog_id, m.get());
|
add_message_dependencies(dependencies, d->dialog_id, m.get());
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
m->have_previous = false;
|
m->have_previous = false;
|
||||||
m->have_next = false;
|
m->have_next = false;
|
||||||
@ -28339,7 +28304,7 @@ unique_ptr<MessagesManager::Dialog> MessagesManager::parse_dialog(DialogId dialo
|
|||||||
if (d->draft_message != nullptr) {
|
if (d->draft_message != nullptr) {
|
||||||
add_formatted_text_dependencies(dependencies, &d->draft_message->input_message_text.text);
|
add_formatted_text_dependencies(dependencies, &d->draft_message->input_message_text.text);
|
||||||
}
|
}
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
@ -29227,7 +29192,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
add_dialog_dependencies(dependencies, dialog_id);
|
add_dialog_dependencies(dependencies, dialog_id);
|
||||||
add_message_dependencies(dependencies, dialog_id, m.get());
|
add_message_dependencies(dependencies, dialog_id, m.get());
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
m->content = dup_message_content(td_, dialog_id, m->content.get(), MessageContentDupType::Send);
|
m->content = dup_message_content(td_, dialog_id, m->content.get(), MessageContentDupType::Send);
|
||||||
|
|
||||||
@ -29255,7 +29220,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
add_dialog_dependencies(dependencies, dialog_id);
|
add_dialog_dependencies(dependencies, dialog_id);
|
||||||
add_message_dependencies(dependencies, dialog_id, m.get());
|
add_message_dependencies(dependencies, dialog_id, m.get());
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
auto bot_user_id = log_event.bot_user_id;
|
auto bot_user_id = log_event.bot_user_id;
|
||||||
if (!td_->contacts_manager_->have_user_force(bot_user_id)) {
|
if (!td_->contacts_manager_->have_user_force(bot_user_id)) {
|
||||||
@ -29292,7 +29257,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
add_dialog_dependencies(dependencies, dialog_id);
|
add_dialog_dependencies(dependencies, dialog_id);
|
||||||
add_message_dependencies(dependencies, dialog_id, m.get());
|
add_message_dependencies(dependencies, dialog_id, m.get());
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
m->content = dup_message_content(td_, dialog_id, m->content.get(), MessageContentDupType::SendViaBot);
|
m->content = dup_message_content(td_, dialog_id, m->content.get(), MessageContentDupType::SendViaBot);
|
||||||
|
|
||||||
@ -29320,7 +29285,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
add_dialog_dependencies(dependencies, dialog_id);
|
add_dialog_dependencies(dependencies, dialog_id);
|
||||||
add_message_dependencies(dependencies, dialog_id, m.get());
|
add_message_dependencies(dependencies, dialog_id, m.get());
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
auto result_message = continue_send_message(dialog_id, std::move(m), event.id_);
|
auto result_message = continue_send_message(dialog_id, std::move(m), event.id_);
|
||||||
if (result_message != nullptr) {
|
if (result_message != nullptr) {
|
||||||
@ -29347,7 +29312,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
for (auto &m : messages) {
|
for (auto &m : messages) {
|
||||||
add_message_dependencies(dependencies, to_dialog_id, m.get());
|
add_message_dependencies(dependencies, to_dialog_id, m.get());
|
||||||
}
|
}
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
Dialog *to_dialog = get_dialog_force(to_dialog_id);
|
Dialog *to_dialog = get_dialog_force(to_dialog_id);
|
||||||
if (to_dialog == nullptr) {
|
if (to_dialog == nullptr) {
|
||||||
@ -29775,7 +29740,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
auto dialog_id = log_event.dialog_id_;
|
auto dialog_id = log_event.dialog_id_;
|
||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
add_dialog_dependencies(dependencies, dialog_id);
|
add_dialog_dependencies(dependencies, dialog_id);
|
||||||
resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
get_dialog_force(dialog_id); // load it if exists
|
get_dialog_force(dialog_id); // load it if exists
|
||||||
|
|
||||||
|
@ -824,8 +824,6 @@ class MessagesManager : public Actor {
|
|||||||
|
|
||||||
static void add_dialog_dependencies(Dependencies &dependencies, DialogId dialog_id);
|
static void add_dialog_dependencies(Dependencies &dependencies, DialogId dialog_id);
|
||||||
|
|
||||||
void resolve_dependencies_force(const Dependencies &dependencies);
|
|
||||||
|
|
||||||
ActorOwn<MultiSequenceDispatcher> sequence_dispatcher_;
|
ActorOwn<MultiSequenceDispatcher> sequence_dispatcher_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -1415,8 +1415,8 @@ void PollManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
auto dialog_id = log_event.full_message_id_.get_dialog_id();
|
auto dialog_id = log_event.full_message_id_.get_dialog_id();
|
||||||
|
|
||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
td_->messages_manager_->add_dialog_dependencies(dependencies, dialog_id);
|
MessagesManager::add_dialog_dependencies(dependencies, dialog_id);
|
||||||
td_->messages_manager_->resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
do_set_poll_answer(log_event.poll_id_, log_event.full_message_id_, std::move(log_event.options_), event.id_,
|
do_set_poll_answer(log_event.poll_id_, log_event.full_message_id_, std::move(log_event.options_), event.id_,
|
||||||
Auto());
|
Auto());
|
||||||
@ -1434,8 +1434,8 @@ void PollManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
auto dialog_id = log_event.full_message_id_.get_dialog_id();
|
auto dialog_id = log_event.full_message_id_.get_dialog_id();
|
||||||
|
|
||||||
Dependencies dependencies;
|
Dependencies dependencies;
|
||||||
td_->messages_manager_->add_dialog_dependencies(dependencies, dialog_id);
|
MessagesManager::add_dialog_dependencies(dependencies, dialog_id);
|
||||||
td_->messages_manager_->resolve_dependencies_force(dependencies);
|
resolve_dependencies_force(td_, dependencies);
|
||||||
|
|
||||||
do_stop_poll(log_event.poll_id_, log_event.full_message_id_, nullptr, event.id_, Auto());
|
do_stop_poll(log_event.poll_id_, log_event.full_message_id_, nullptr, event.id_, Auto());
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user