Add source to ContactsManager::load_channel_full.

This commit is contained in:
levlam 2021-08-02 05:50:52 +03:00
parent 1299bc67d4
commit 3156492c2f
5 changed files with 33 additions and 36 deletions

View File

@ -9600,7 +9600,7 @@ void ContactsManager::on_load_channel_full_from_database(ChannelId channel_id, s
update_channel_full(channel_full, channel_id, true); update_channel_full(channel_full, channel_id, true);
if (channel_full->expires_at == 0.0) { if (channel_full->expires_at == 0.0) {
load_channel_full(channel_id, true, Auto()); load_channel_full(channel_id, true, Auto(), "on_load_channel_full_from_database");
} }
} }
@ -14344,10 +14344,10 @@ ContactsManager::ChannelFull *ContactsManager::add_channel_full(ChannelId channe
return channel_full_ptr.get(); return channel_full_ptr.get();
} }
bool ContactsManager::load_channel_full(ChannelId channel_id, bool force, Promise<Unit> &&promise) { bool ContactsManager::load_channel_full(ChannelId channel_id, bool force, Promise<Unit> &&promise, const char *source) {
auto channel_full = get_channel_full_force(channel_id, "load_channel_full"); auto channel_full = get_channel_full_force(channel_id, source);
if (channel_full == nullptr) { if (channel_full == nullptr) {
send_get_channel_full_query(channel_full, channel_id, std::move(promise), "load_channel_full"); send_get_channel_full_query(channel_full, channel_id, std::move(promise), source);
return false; return false;
} }
if (channel_full->is_expired()) { if (channel_full->is_expired()) {

View File

@ -486,7 +486,7 @@ class ContactsManager final : public Actor {
bool have_channel_force(ChannelId channel_id); bool have_channel_force(ChannelId channel_id);
bool get_channel(ChannelId channel_id, int left_tries, Promise<Unit> &&promise); bool get_channel(ChannelId channel_id, int left_tries, Promise<Unit> &&promise);
void reload_channel(ChannelId chnanel_id, Promise<Unit> &&promise); void reload_channel(ChannelId chnanel_id, Promise<Unit> &&promise);
bool load_channel_full(ChannelId channel_id, bool force, Promise<Unit> &&promise); bool load_channel_full(ChannelId channel_id, bool force, Promise<Unit> &&promise, const char *source);
FileSourceId get_channel_full_file_source_id(ChannelId channel_id); FileSourceId get_channel_full_file_source_id(ChannelId channel_id);
void reload_channel_full(ChannelId channel_id, Promise<Unit> &&promise, const char *source); void reload_channel_full(ChannelId channel_id, Promise<Unit> &&promise, const char *source);

View File

@ -1725,7 +1725,7 @@ class ToggleDialogIsBlockedQuery final : public Td::ResultHandler {
} }
if (!G()->close_flag()) { if (!G()->close_flag()) {
td->messages_manager_->on_update_dialog_is_blocked(dialog_id_, !is_blocked_); td->messages_manager_->on_update_dialog_is_blocked(dialog_id_, !is_blocked_);
td->messages_manager_->get_dialog_info_full(dialog_id_, Auto()); td->messages_manager_->get_dialog_info_full(dialog_id_, Auto(), "ToggleDialogIsBlockedQuery");
td->messages_manager_->reget_dialog_action_bar(dialog_id_, "ToggleDialogIsBlockedQuery"); td->messages_manager_->reget_dialog_action_bar(dialog_id_, "ToggleDialogIsBlockedQuery");
} }
promise_.set_error(std::move(status)); promise_.set_error(std::move(status));
@ -4558,7 +4558,7 @@ class EditPeerFoldersQuery final : public Td::ResultHandler {
} }
// trying to repair folder ID for this dialog // trying to repair folder ID for this dialog
td->messages_manager_->get_dialog_info_full(dialog_id_, Auto()); td->messages_manager_->get_dialog_info_full(dialog_id_, Auto(), "EditPeerFoldersQuery");
promise_.set_error(std::move(status)); promise_.set_error(std::move(status));
} }
@ -6784,8 +6784,8 @@ bool MessagesManager::is_active_message_reply_info(DialogId dialog_id, const Mes
auto linked_channel_id = td_->contacts_manager_->get_channel_linked_channel_id(channel_id); auto linked_channel_id = td_->contacts_manager_->get_channel_linked_channel_id(channel_id);
if (!linked_channel_id.is_valid()) { if (!linked_channel_id.is_valid()) {
// keep the comment button while linked channel is unknown // keep the comment button while linked channel is unknown
send_closure_later(G()->contacts_manager(), &ContactsManager::load_channel_full, channel_id, false, send_closure_later(G()->contacts_manager(), &ContactsManager::load_channel_full, channel_id, false, Promise<Unit>(),
Promise<Unit>()); "is_active_message_reply_info");
return true; return true;
} }
@ -11311,7 +11311,7 @@ void MessagesManager::repair_channel_server_unread_count(Dialog *d) {
} }
LOG(INFO) << "Reload ChannelFull for " << d->dialog_id << " to repair unread message counts"; LOG(INFO) << "Reload ChannelFull for " << d->dialog_id << " to repair unread message counts";
get_dialog_info_full(d->dialog_id, Auto()); get_dialog_info_full(d->dialog_id, Auto(), "repair_channel_server_unread_count");
} }
void MessagesManager::read_history_inbox(DialogId dialog_id, MessageId max_message_id, int32 unread_count, void MessagesManager::read_history_inbox(DialogId dialog_id, MessageId max_message_id, int32 unread_count,
@ -14437,14 +14437,12 @@ void MessagesManager::on_get_dialogs(FolderId folder_id, vector<tl_object_ptr<te
if (!d->is_is_blocked_inited && !td_->auth_manager_->is_bot()) { if (!d->is_is_blocked_inited && !td_->auth_manager_->is_bot()) {
// asynchronously get is_blocked from the server // asynchronously get is_blocked from the server
// TODO add is_blocked to telegram_api::dialog // TODO add is_blocked to telegram_api::dialog
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "on_get_dialogs init is_blocked");
} } else if (!d->is_has_bots_inited && !td_->auth_manager_->is_bot()) {
if (!d->is_has_bots_inited && !td_->auth_manager_->is_bot()) {
// asynchronously get has_bots from the server // asynchronously get has_bots from the server
// TODO add has_bots to telegram_api::dialog // TODO add has_bots to telegram_api::dialog
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "on_get_dialogs init has_bots");
} } else if (!d->is_last_pinned_message_id_inited && !td_->auth_manager_->is_bot()) {
if (!d->is_last_pinned_message_id_inited && !td_->auth_manager_->is_bot()) {
// asynchronously get dialog pinned message from the server // asynchronously get dialog pinned message from the server
get_dialog_pinned_message(dialog_id, Auto()); get_dialog_pinned_message(dialog_id, Auto());
} }
@ -17061,7 +17059,7 @@ td_api::object_ptr<td_api::messageThreadInfo> MessagesManager::get_message_threa
std::move(draft_message)); std::move(draft_message));
} }
void MessagesManager::get_dialog_info_full(DialogId dialog_id, Promise<Unit> &&promise) { void MessagesManager::get_dialog_info_full(DialogId dialog_id, Promise<Unit> &&promise, const char *source) {
switch (dialog_id.get_type()) { switch (dialog_id.get_type()) {
case DialogType::User: case DialogType::User:
send_closure_later(G()->contacts_manager(), &ContactsManager::load_user_full, dialog_id.get_user_id(), false, send_closure_later(G()->contacts_manager(), &ContactsManager::load_user_full, dialog_id.get_user_id(), false,
@ -17069,11 +17067,11 @@ void MessagesManager::get_dialog_info_full(DialogId dialog_id, Promise<Unit> &&p
return; return;
case DialogType::Chat: case DialogType::Chat:
send_closure_later(G()->contacts_manager(), &ContactsManager::load_chat_full, dialog_id.get_chat_id(), false, send_closure_later(G()->contacts_manager(), &ContactsManager::load_chat_full, dialog_id.get_chat_id(), false,
std::move(promise), "get_dialog_info_full"); std::move(promise), source);
return; return;
case DialogType::Channel: case DialogType::Channel:
send_closure_later(G()->contacts_manager(), &ContactsManager::load_channel_full, dialog_id.get_channel_id(), send_closure_later(G()->contacts_manager(), &ContactsManager::load_channel_full, dialog_id.get_channel_id(),
false, std::move(promise)); false, std::move(promise), source);
return; return;
case DialogType::SecretChat: case DialogType::SecretChat:
return promise.set_value(Unit()); return promise.set_value(Unit());
@ -17117,11 +17115,12 @@ MessageId MessagesManager::get_dialog_pinned_message(DialogId dialog_id, Promise
<< (d->is_last_pinned_message_id_inited ? "inited" : "unknown") << " pinned " << d->last_pinned_message_id; << (d->is_last_pinned_message_id_inited ? "inited" : "unknown") << " pinned " << d->last_pinned_message_id;
if (!d->is_last_pinned_message_id_inited) { if (!d->is_last_pinned_message_id_inited) {
get_dialog_info_full(dialog_id, std::move(promise)); // must call get_dialog_info_full as expected in fix_new_dialog
get_dialog_info_full(dialog_id, std::move(promise), "get_dialog_pinned_message 1");
return MessageId(); return MessageId();
} }
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "get_dialog_pinned_message 2");
if (d->last_pinned_message_id.is_valid()) { if (d->last_pinned_message_id.is_valid()) {
tl_object_ptr<telegram_api::InputMessage> input_message; tl_object_ptr<telegram_api::InputMessage> input_message;
@ -33912,24 +33911,21 @@ void MessagesManager::fix_new_dialog(Dialog *d, unique_ptr<Message> &&last_datab
if (being_added_dialog_id_ != dialog_id && !d->is_is_blocked_inited && !td_->auth_manager_->is_bot()) { if (being_added_dialog_id_ != dialog_id && !d->is_is_blocked_inited && !td_->auth_manager_->is_bot()) {
// asynchronously get is_blocked from the server // asynchronously get is_blocked from the server
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "fix_new_dialog init is_blocked");
} } else if (being_added_dialog_id_ != dialog_id && !d->is_has_bots_inited && !td_->auth_manager_->is_bot()) {
if (being_added_dialog_id_ != dialog_id && !d->is_has_bots_inited && !td_->auth_manager_->is_bot()) {
// asynchronously get has_bots from the server // asynchronously get has_bots from the server
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "fix_new_dialog init has_bots");
} } else if (being_added_dialog_id_ != dialog_id && !d->is_last_pinned_message_id_inited &&
if (being_added_dialog_id_ != dialog_id && !d->is_last_pinned_message_id_inited && !td_->auth_manager_->is_bot()) { !td_->auth_manager_->is_bot()) {
// asynchronously get dialog pinned message from the server // asynchronously get dialog pinned message from the server
get_dialog_pinned_message(dialog_id, Auto()); get_dialog_pinned_message(dialog_id, Auto());
} } else if (being_added_dialog_id_ != dialog_id && !d->is_folder_id_inited && !td_->auth_manager_->is_bot() &&
if (being_added_dialog_id_ != dialog_id && !d->is_folder_id_inited && !td_->auth_manager_->is_bot() &&
order != DEFAULT_ORDER) { order != DEFAULT_ORDER) {
// asynchronously get dialog folder identifier from the server // asynchronously get dialog folder identifier from the server
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "fix_new_dialog init folder_id");
} } else if (!d->is_message_ttl_setting_inited && !td_->auth_manager_->is_bot() && order != DEFAULT_ORDER) {
if (!d->is_message_ttl_setting_inited && !td_->auth_manager_->is_bot() && order != DEFAULT_ORDER) {
// asynchronously get dialog message TTL setting from the server // asynchronously get dialog message TTL setting from the server
get_dialog_info_full(dialog_id, Auto()); get_dialog_info_full(dialog_id, Auto(), "fix_new_dialog init message_ttl_setting");
} }
if (!d->know_action_bar && !td_->auth_manager_->is_bot() && dialog_type != DialogType::SecretChat && if (!d->know_action_bar && !td_->auth_manager_->is_bot() && dialog_type != DialogType::SecretChat &&
dialog_id != get_my_dialog_id() && have_input_peer(dialog_id, AccessRights::Read)) { dialog_id != get_my_dialog_id() && have_input_peer(dialog_id, AccessRights::Read)) {

View File

@ -489,7 +489,7 @@ class MessagesManager final : public Actor {
void unpin_all_dialog_messages(DialogId dialog_id, Promise<Unit> &&promise); void unpin_all_dialog_messages(DialogId dialog_id, Promise<Unit> &&promise);
void get_dialog_info_full(DialogId dialog_id, Promise<Unit> &&promise); void get_dialog_info_full(DialogId dialog_id, Promise<Unit> &&promise, const char *source);
int64 get_dialog_event_log(DialogId dialog_id, const string &query, int64 from_event_id, int32 limit, int64 get_dialog_event_log(DialogId dialog_id, const string &query, int64 from_event_id, int32 limit,
const tl_object_ptr<td_api::chatEventLogFilters> &filters, const vector<UserId> &user_ids, const tl_object_ptr<td_api::chatEventLogFilters> &filters, const vector<UserId> &user_ids,

View File

@ -772,7 +772,8 @@ class GetSupergroupFullInfoRequest final : public RequestActor<> {
ChannelId channel_id_; ChannelId channel_id_;
void do_run(Promise<Unit> &&promise) final { void do_run(Promise<Unit> &&promise) final {
td->contacts_manager_->load_channel_full(channel_id_, get_tries() < 2, std::move(promise)); td->contacts_manager_->load_channel_full(channel_id_, get_tries() < 2, std::move(promise),
"GetSupergroupFullInfoRequest");
} }
void do_send_result() final { void do_send_result() final {