From 841ef6dc7f02a3a2ba19add202984e883eb8ac6a Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 12 Dec 2020 12:27:43 +0300 Subject: [PATCH] Simplify GroupCallManager::process_group_call_participants_from_updates. --- td/telegram/GroupCallManager.cpp | 37 +++++++++++++------------------- td/telegram/GroupCallManager.h | 2 +- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/td/telegram/GroupCallManager.cpp b/td/telegram/GroupCallManager.cpp index 7579c23cf..59efd3304 100644 --- a/td/telegram/GroupCallManager.cpp +++ b/td/telegram/GroupCallManager.cpp @@ -720,8 +720,17 @@ void GroupCallManager::on_update_group_call_participants( LOG(INFO) << "Ignore already applied updateGroupCallParticipants in " << input_group_call_id; return; } - if (group_call->version + static_cast(participants.size()) == version) { - process_group_call_participants_from_updates(input_group_call_id, std::move(participants)); + if (version == group_call->version + static_cast(participants.size())) { + group_call->version += static_cast(participants.size()); + auto diff = process_group_call_participants_from_updates(input_group_call_id, std::move(participants)); + if (diff != 0 && (group_call->participant_count != 0 || diff > 0)) { + group_call->participant_count += diff; + if (group_call->participant_count < 0) { + LOG(ERROR) << "Participant count became negative in " << input_group_call_id; + group_call->participant_count = 0; + } + send_update_group_call(group_call); + } return; } @@ -773,29 +782,13 @@ void GroupCallManager::process_group_call_participants( } } -void GroupCallManager::process_group_call_participants_from_updates( +int32 GroupCallManager::process_group_call_participants_from_updates( InputGroupCallId input_group_call_id, vector> &&participants) { - if (!need_group_call_participants(input_group_call_id)) { - return; - } - - auto group_call = get_group_call(input_group_call_id); - CHECK(group_call != nullptr && group_call->is_inited); - CHECK(group_call->version == -1); - group_call->version += static_cast(participants.size()); - - auto old_participant_count = group_call->participant_count; + int32 diff = 0; for (auto &participant : participants) { - group_call->participant_count += - process_group_call_participant(input_group_call_id, GroupCallParticipant(participant)); - } - if (group_call->participant_count < 0) { - LOG(ERROR) << "Participant count became negative in " << input_group_call_id; - group_call->participant_count = 0; - } - if (group_call->participant_count != old_participant_count) { - send_update_group_call(group_call); + diff += process_group_call_participant(input_group_call_id, GroupCallParticipant(participant)); } + return diff; } int GroupCallManager::process_group_call_participant(InputGroupCallId input_group_call_id, diff --git a/td/telegram/GroupCallManager.h b/td/telegram/GroupCallManager.h index 1b3f312cc..5692bf9d3 100644 --- a/td/telegram/GroupCallManager.h +++ b/td/telegram/GroupCallManager.h @@ -117,7 +117,7 @@ class GroupCallManager : public Actor { vector> &&participants, bool is_load); - void process_group_call_participants_from_updates( + int32 process_group_call_participants_from_updates( InputGroupCallId group_call_id, vector> &&participants); int process_group_call_participant(InputGroupCallId group_call_id, GroupCallParticipant &&participant);