From 3413e38a6196f774f41572ab2b942e7015d5f0c2 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 18 Dec 2020 16:48:49 +0300 Subject: [PATCH] Fix can_be_muted flag. --- td/telegram/ContactsManager.cpp | 6 ++++-- td/telegram/GroupCallManager.cpp | 11 +++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 220e50996..e86451de0 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -11722,7 +11722,8 @@ void ContactsManager::on_update_chat_status(Chat *c, ChatId chat_id, DialogParti } } if (need_reload_group_call) { - td_->messages_manager_->on_update_dialog_group_call_rights(DialogId(chat_id)); + send_closure_later(G()->messages_manager(), &MessagesManager::on_update_dialog_group_call_rights, + DialogId(chat_id)); } c->is_changed = true; @@ -12064,7 +12065,8 @@ void ContactsManager::on_channel_status_changed(Channel *c, ChannelId channel_id reload_dialog_administrators(DialogId(channel_id), 0, Auto()); } if (need_reload_group_call) { - td_->messages_manager_->on_update_dialog_group_call_rights(DialogId(channel_id)); + send_closure_later(G()->messages_manager(), &MessagesManager::on_update_dialog_group_call_rights, + DialogId(channel_id)); } } diff --git a/td/telegram/GroupCallManager.cpp b/td/telegram/GroupCallManager.cpp index a8f2083d1..46cd96623 100644 --- a/td/telegram/GroupCallManager.cpp +++ b/td/telegram/GroupCallManager.cpp @@ -426,6 +426,7 @@ struct GroupCallManager::GroupCallParticipants { string next_offset; int64 min_order = std::numeric_limits::max(); + bool are_administrators_loaded = false; vector administrator_user_ids; std::map>> pending_version_updates_; @@ -709,8 +710,10 @@ void GroupCallManager::on_update_group_call_rights(InputGroupCallId input_group_ auto participants_it = group_call_participants_.find(input_group_call_id); if (participants_it != group_call_participants_.end()) { CHECK(participants_it->second != nullptr); - update_group_call_participants_can_be_muted( - input_group_call_id, can_manage_group_calls(group_call->dialog_id).is_ok(), participants_it->second.get()); + if (participants_it->second->are_administrators_loaded) { + update_group_call_participants_can_be_muted( + input_group_call_id, can_manage_group_calls(group_call->dialog_id).is_ok(), participants_it->second.get()); + } } } @@ -1220,6 +1223,7 @@ void GroupCallManager::update_group_call_participants_can_be_muted(InputGroupCal bool can_manage, GroupCallParticipants *participants) { CHECK(participants != nullptr); + LOG(INFO) << "Update group call participants can_be_muted in " << input_group_call_id; for (auto &participant : participants->participants) { if (update_group_call_participant_can_be_muted(can_manage, participants, participant) && participant.order != 0) { send_update_group_call_participant(input_group_call_id, participant); @@ -1308,6 +1312,7 @@ int GroupCallManager::process_group_call_participant(InputGroupCallId input_grou participant.order = real_order; } participant.is_just_joined = false; + update_group_call_participant_can_be_muted(can_manage, participants, participant); participants->participants.push_back(std::move(participant)); if (participants->participants.back().order != 0) { send_update_group_call_participant(input_group_call_id, participants->participants.back()); @@ -1408,6 +1413,7 @@ void GroupCallManager::join_group_call(GroupCallId group_call_id, void GroupCallManager::try_load_group_call_administrators(InputGroupCallId input_group_call_id, DialogId dialog_id) { if (!dialog_id.is_valid() || !need_group_call_participants(input_group_call_id) || can_manage_group_calls(dialog_id).is_error()) { + LOG(INFO) << "Don't need to load administrators in " << input_group_call_id << " from " << dialog_id; return; } @@ -1472,6 +1478,7 @@ void GroupCallManager::finish_load_group_call_administrators(InputGroupCallId in } LOG(INFO) << "Set administrators of " << input_group_call_id << " to " << administrator_user_ids; + group_call_participants->are_administrators_loaded = true; group_call_participants->administrator_user_ids = std::move(administrator_user_ids); update_group_call_participants_can_be_muted(input_group_call_id, true, group_call_participants);