From 34d77c7febb927737508a76e2e837b21f06e1b2e Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 14 Oct 2021 00:34:28 +0300 Subject: [PATCH] Fix drop of pending_join_request_count. --- td/telegram/ContactsManager.cpp | 4 ++-- td/telegram/MessagesManager.cpp | 34 ++++++++++++++++++++------------- td/telegram/MessagesManager.h | 4 ++++ 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index beb963220..01cdad0cb 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -9976,7 +9976,7 @@ void ContactsManager::update_chat(Chat *c, ChatId chat_id, bool from_binlog, boo } if (c->is_status_changed) { if (!c->status.can_manage_invite_links()) { - td_->messages_manager_->on_update_dialog_pending_join_request_count(DialogId(chat_id), 0); + td_->messages_manager_->drop_dialog_pending_join_request_count(DialogId(chat_id)); } c->is_status_changed = false; } @@ -10042,7 +10042,7 @@ void ContactsManager::update_channel(Channel *c, ChannelId channel_id, bool from remove_inactive_channel(channel_id); } if (!c->status.can_manage_invite_links()) { - td_->messages_manager_->on_update_dialog_pending_join_request_count(DialogId(channel_id), 0); + td_->messages_manager_->drop_dialog_pending_join_request_count(DialogId(channel_id)); } c->is_status_changed = false; } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 67901fae9..98a120c68 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -29887,6 +29887,14 @@ void MessagesManager::set_dialog_theme_name(Dialog *d, string theme_name) { } } +void MessagesManager::drop_dialog_pending_join_request_count(DialogId dialog_id) { + CHECK(dialog_id.is_valid()); + auto d = get_dialog(dialog_id); // called from update_chat/channel, must not create the dialog + if (d != nullptr && d->is_update_new_chat_sent) { + set_dialog_pending_join_request_count(d, 0); + } +} + void MessagesManager::on_update_dialog_pending_join_request_count(DialogId dialog_id, int32 pending_join_request_count) { if (!dialog_id.is_valid()) { @@ -29903,38 +29911,37 @@ void MessagesManager::on_update_dialog_pending_join_request_count(DialogId dialo set_dialog_pending_join_request_count(d, pending_join_request_count); } -void MessagesManager::set_dialog_pending_join_request_count(Dialog *d, int32 pending_join_request_count) { - CHECK(d != nullptr); - switch (d->dialog_id.get_type()) { +void MessagesManager::fix_pending_join_request_count(DialogId dialog_id, int32 &pending_join_request_count) const { + switch (dialog_id.get_type()) { case DialogType::User: case DialogType::SecretChat: - pending_join_request_count = -1; - break; + pending_join_request_count = 0; + return; case DialogType::Chat: { - auto chat_id = d->dialog_id.get_chat_id(); + auto chat_id = dialog_id.get_chat_id(); auto status = td_->contacts_manager_->get_chat_status(chat_id); if (!status.can_manage_invite_links()) { pending_join_request_count = 0; } - break; + return; } case DialogType::Channel: { - auto channel_id = d->dialog_id.get_channel_id(); + auto channel_id = dialog_id.get_channel_id(); auto status = td_->contacts_manager_->get_channel_permissions(channel_id); if (!status.can_manage_invite_links()) { pending_join_request_count = 0; } - break; + return; } case DialogType::None: default: UNREACHABLE(); } - if (pending_join_request_count < 0) { - LOG(ERROR) << "Receive " << pending_join_request_count << " pending join requests in " << d->dialog_id; - return; - } +} +void MessagesManager::set_dialog_pending_join_request_count(Dialog *d, int32 pending_join_request_count) { + CHECK(d != nullptr); + fix_pending_join_request_count(d->dialog_id, pending_join_request_count); bool is_changed = d->pending_join_request_count != pending_join_request_count; if (!is_changed) { return; @@ -34485,6 +34492,7 @@ MessagesManager::Dialog *MessagesManager::add_new_dialog(unique_ptr &&d, on_dialog_updated(dialog_id, "pending update_dialog_group_call"); } } + fix_pending_join_request_count(dialog_id, d->pending_join_request_count); if (!is_loaded_from_database) { CHECK(order == DEFAULT_ORDER); diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index cb04ee7ae..4d887006f 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -779,6 +779,8 @@ class MessagesManager final : public Actor { void on_dialog_linked_channel_updated(DialogId dialog_id, ChannelId old_linked_channel_id, ChannelId new_linked_channel_id) const; + void drop_dialog_pending_join_request_count(DialogId dialog_id); + void on_resolved_username(const string &username, DialogId dialog_id); void drop_username(const string &username); @@ -2441,6 +2443,8 @@ class MessagesManager final : public Actor { void set_dialog_theme_name(Dialog *d, string theme_name); + void fix_pending_join_request_count(DialogId dialog_id, int32 &pending_join_request_count) const; + void set_dialog_pending_join_request_count(Dialog *d, int32 pending_join_request_count); void repair_dialog_scheduled_messages(Dialog *d);