From 974feddb4a6e09001828e2956f42207d9bbef9ee Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 28 Oct 2020 14:25:27 +0300 Subject: [PATCH] Reload full chat info after pinned message is dropped. GitOrigin-RevId: 6cbf3d217b5da21f050715ed290cb122d6a4ef2c --- td/telegram/ContactsManager.cpp | 2 +- td/telegram/MessagesManager.cpp | 29 ++++++++++++++++++++++++++--- td/telegram/MessagesManager.h | 2 ++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 494c05e8f..9efddc65f 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -12353,7 +12353,7 @@ void ContactsManager::reload_dialog_info(DialogId dialog_id, Promise &&pro case DialogType::Channel: return reload_channel(dialog_id.get_channel_id(), std::move(promise)); default: - promise.set_error(Status::Error("Invalid dialog ID to reload")); + return promise.set_error(Status::Error("Invalid dialog ID to reload")); } } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index dae0c36d2..a5ec92d19 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -9657,7 +9657,7 @@ bool MessagesManager::update_message_is_pinned(Dialog *d, Message *m, bool is_pi } } else { if (m->message_id == d->last_pinned_message_id) { - if (d->message_count_by_index[message_search_filter_index(MessageSearchFilter::Pinned)] == 1) { + if (d->message_count_by_index[message_search_filter_index(MessageSearchFilter::Pinned)] == 0) { set_dialog_last_pinned_message_id(d, MessageId()); } else { drop_dialog_last_pinned_message_id(d); @@ -16348,6 +16348,28 @@ void MessagesManager::get_dialog_info_full(DialogId dialog_id, Promise &&p } } +void MessagesManager::reload_dialog_info_full(DialogId dialog_id) { + switch (dialog_id.get_type()) { + case DialogType::User: + send_closure_later(G()->contacts_manager(), &ContactsManager::reload_user_full, dialog_id.get_user_id()); + return; + case DialogType::Chat: + send_closure_later(G()->contacts_manager(), &ContactsManager::reload_chat_full, dialog_id.get_chat_id(), + Promise()); + return; + case DialogType::Channel: + send_closure_later(G()->contacts_manager(), &ContactsManager::reload_channel_full, dialog_id.get_channel_id(), + Promise(), "reload_dialog_info_full"); + return; + case DialogType::SecretChat: + return; + case DialogType::None: + default: + UNREACHABLE(); + return; + } +} + MessageId MessagesManager::get_dialog_pinned_message(DialogId dialog_id, Promise &&promise) { Dialog *d = get_dialog_force(dialog_id); if (d == nullptr) { @@ -28497,6 +28519,8 @@ void MessagesManager::drop_dialog_last_pinned_message_id(Dialog *d) { on_dialog_updated(d->dialog_id, "drop_dialog_last_pinned_message_id"); LOG(INFO) << "Drop " << d->dialog_id << " pinned message"; + + reload_dialog_info_full(d->dialog_id); } void MessagesManager::repair_dialog_scheduled_messages(Dialog *d) { @@ -32343,8 +32367,7 @@ bool MessagesManager::update_message(Dialog *d, Message *old_message, unique_ptr // old_message->is_from_scheduled = new_message->is_from_scheduled; } - if (!is_scheduled && - update_message_is_pinned(d, old_message, new_message->is_pinned, "update_message")) { + if (!is_scheduled && update_message_is_pinned(d, old_message, new_message->is_pinned, "update_message")) { need_send_update = true; } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 7101b368c..b330ff117 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2427,6 +2427,8 @@ class MessagesManager : public Actor { void send_search_public_dialogs_query(const string &query, Promise &&promise); + void reload_dialog_info_full(DialogId dialog_id); + vector get_pinned_dialog_ids(DialogListId dialog_list_id) const; void reload_pinned_dialogs(DialogListId dialog_list_id, Promise &&promise);