From 2ddeead75f951a32912929e4ff46c2fcaa82e54f Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 12 Apr 2021 02:49:28 +0300 Subject: [PATCH] Save expected active group call ID. --- td/telegram/MessagesManager.cpp | 9 ++++++++- td/telegram/MessagesManager.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 3d7d2afcb..dfc2f15dc 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -8222,7 +8222,11 @@ void MessagesManager::repair_dialog_active_group_call_id(DialogId dialog_id) { void MessagesManager::do_repair_dialog_active_group_call_id(DialogId dialog_id) { Dialog *d = get_dialog(dialog_id); CHECK(d != nullptr); - if (!d->has_active_group_call || d->active_group_call_id.is_valid()) { + bool need_repair_active_group_call_id = d->has_active_group_call && !d->active_group_call_id.is_valid(); + bool need_repair_expected_group_call_id = + d->has_expected_active_group_call_id && d->active_group_call_id != d->expected_active_group_call_id; + d->has_expected_active_group_call_id = false; + if (!need_repair_active_group_call_id && !need_repair_expected_group_call_id) { return; } if (!have_input_peer(dialog_id, AccessRights::Read)) { @@ -36064,11 +36068,14 @@ void MessagesManager::speculatively_update_active_group_call_id(Dialog *d, const InputGroupCallId input_group_call_id; bool is_ended; std::tie(input_group_call_id, is_ended) = get_message_content_group_call_info(m->content.get()); + d->has_expected_active_group_call_id = true; if (is_ended) { + d->expected_active_group_call_id = InputGroupCallId(); if (d->active_group_call_id == input_group_call_id) { on_update_dialog_group_call_id(d->dialog_id, InputGroupCallId()); } } else { + d->expected_active_group_call_id = input_group_call_id; if (d->active_group_call_id != input_group_call_id) { repair_dialog_active_group_call_id(d->dialog_id); } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 418f1841a..5a0b9a552 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -1168,6 +1168,7 @@ class MessagesManager : public Actor { std::unordered_set updated_read_history_message_ids; LogEventIdWithGeneration set_folder_id_log_event_id; InputGroupCallId active_group_call_id; + InputGroupCallId expected_active_group_call_id; DialogId default_join_group_call_as_dialog_id; FolderId folder_id; @@ -1244,6 +1245,7 @@ class MessagesManager : public Actor { bool has_active_group_call = false; bool is_group_call_empty = false; bool is_message_ttl_setting_inited = false; + bool has_expected_active_group_call_id = false; bool increment_view_counter = false;