Fix can_be_muted flag.

This commit is contained in:
levlam 2020-12-18 16:48:49 +03:00
parent 8dd4fe3166
commit 3413e38a61
2 changed files with 13 additions and 4 deletions

View File

@ -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));
}
}

View File

@ -426,6 +426,7 @@ struct GroupCallManager::GroupCallParticipants {
string next_offset;
int64 min_order = std::numeric_limits<int64>::max();
bool are_administrators_loaded = false;
vector<UserId> administrator_user_ids;
std::map<int32, vector<tl_object_ptr<telegram_api::groupCallParticipant>>> 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);