Various group call fixes.

This commit is contained in:
levlam 2020-12-16 22:49:24 +03:00
parent 6ebe28cdac
commit 4a3375e617
3 changed files with 11 additions and 10 deletions

View File

@ -959,10 +959,10 @@ bool GroupCallManager::process_pending_group_call_participant_updates(InputGroup
if (version <= group_call->version) {
for (auto &group_call_participant : participants) {
GroupCallParticipant participant(group_call_participant);
on_participant_speaking_in_group_call(input_group_call_id, participant);
if (participant.user_id == td_->contacts_manager_->get_my_id()) {
process_group_call_participant(input_group_call_id, std::move(participant));
}
on_participant_speaking_in_group_call(input_group_call_id, participant);
}
LOG(INFO) << "Ignore already applied updateGroupCallParticipants with version " << version << " in "
<< input_group_call_id << " from " << group_call->dialog_id;
@ -1167,8 +1167,8 @@ int GroupCallManager::process_group_call_participant(InputGroupCallId input_grou
if (participant.user_id == td_->contacts_manager_->get_my_id()) {
auto *group_call = get_group_call(input_group_call_id);
CHECK(group_call != nullptr && group_call->is_inited);
if (group_call->is_joined && group_call->is_active && participant.is_muted &&
group_call->can_self_unmute != participant.can_self_unmute) {
if (group_call->is_joined && group_call->is_active && participant.source == group_call->source &&
participant.is_muted && group_call->can_self_unmute != participant.can_self_unmute) {
group_call->can_self_unmute = participant.can_self_unmute;
send_update_group_call(group_call, "process_group_call_participant");
}
@ -1206,12 +1206,14 @@ int GroupCallManager::process_group_call_participant(InputGroupCallId input_grou
participant.is_just_joined = false;
if (old_participant != participant) {
bool need_update = old_participant.order != 0 || participant.order != 0;
LOG(INFO) << "Update " << old_participant << " to " << participant;
bool need_update =
old_participant.order != 0 || participant.order != 0 || old_participant.source != participant.source;
old_participant = std::move(participant);
if (need_update) {
send_update_group_call_participant(input_group_call_id, old_participant);
}
on_participant_speaking_in_group_call(input_group_call_id, participant);
on_participant_speaking_in_group_call(input_group_call_id, old_participant);
}
return 0;
}

View File

@ -43,10 +43,9 @@ td_api::object_ptr<td_api::groupCallParticipant> GroupCallParticipant::get_group
bool operator==(const GroupCallParticipant &lhs, const GroupCallParticipant &rhs) {
return lhs.user_id == rhs.user_id && lhs.source == rhs.source && lhs.is_muted == rhs.is_muted &&
lhs.can_self_unmute == rhs.can_self_unmute &&
max(lhs.active_date, lhs.local_active_date) == max(rhs.active_date, rhs.local_active_date) &&
lhs.joined_date == rhs.joined_date && lhs.is_speaking == rhs.is_speaking ||
lhs.order != rhs.order;
lhs.can_self_unmute == rhs.can_self_unmute && lhs.joined_date == rhs.joined_date &&
max(lhs.active_date, lhs.local_active_date) == max(rhs.active_date, rhs.local_active_date) &&
lhs.is_speaking == rhs.is_speaking && lhs.order == rhs.order;
}
bool operator!=(const GroupCallParticipant &lhs, const GroupCallParticipant &rhs) {

View File

@ -2850,7 +2850,7 @@ class CliClient final : public Actor {
send_request(td_api::make_object<td_api::joinGroupCall>(as_group_call_id(args), nullptr, 123, true));
} else if (op == "tgcmnp" || op == "tgcmnpe") {
send_request(
td_api::make_object<td_api::toggleGroupCallMuteNewParticipants>(as_group_call_id(args), op == "tgcmnme"));
td_api::make_object<td_api::toggleGroupCallMuteNewParticipants>(as_group_call_id(args), op == "tgcmnpe"));
} else if (op == "sgcpis") {
string group_call_id;
string source;