From 9554a42cd333b055d78fb9b44be4781d1f87969b Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 10 Feb 2021 18:09:42 +0300 Subject: [PATCH] Add cancel_join_group_call_request function. --- td/telegram/GroupCallManager.cpp | 28 +++++++++++++++++----------- td/telegram/GroupCallManager.h | 2 ++ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/td/telegram/GroupCallManager.cpp b/td/telegram/GroupCallManager.cpp index 70a32339e..016541bd0 100644 --- a/td/telegram/GroupCallManager.cpp +++ b/td/telegram/GroupCallManager.cpp @@ -1429,6 +1429,21 @@ int GroupCallManager::process_group_call_participant(InputGroupCallId input_grou return diff; } +bool GroupCallManager::cancel_join_group_call_request(InputGroupCallId input_group_call_id) { + auto it = pending_join_requests_.find(input_group_call_id); + if (it == pending_join_requests_.end()) { + return false; + } + + CHECK(it->second != nullptr); + if (!it->second->query_ref.empty()) { + cancel_query(it->second->query_ref); + } + it->second->promise.set_error(Status::Error(200, "Cancelled")); + pending_join_requests_.erase(it); + return true; +} + void GroupCallManager::join_group_call(GroupCallId group_call_id, td_api::object_ptr &&payload, int32 audio_source, bool is_muted, @@ -1450,16 +1465,7 @@ void GroupCallManager::join_group_call(GroupCallId group_call_id, } group_call->is_being_left = false; - if (pending_join_requests_.count(input_group_call_id)) { - auto it = pending_join_requests_.find(input_group_call_id); - CHECK(it != pending_join_requests_.end()); - CHECK(it->second != nullptr); - if (!it->second->query_ref.empty()) { - cancel_query(it->second->query_ref); - } - it->second->promise.set_error(Status::Error(200, "Cancelled by another joinGroupCall request")); - pending_join_requests_.erase(it); - } + cancel_join_group_call_request(input_group_call_id); if (payload == nullptr) { return promise.set_error(Status::Error(400, "Payload must be non-empty")); @@ -1941,7 +1947,7 @@ void GroupCallManager::leave_group_call(GroupCallId group_call_id, Promise group_call->need_rejoin = false; send_update_group_call(group_call, "leave_group_call"); try_clear_group_call_participants(input_group_call_id); - promise.set_value(Unit()); + return promise.set_value(Unit()); } return promise.set_error(Status::Error(400, "GROUPCALL_JOIN_MISSING")); } diff --git a/td/telegram/GroupCallManager.h b/td/telegram/GroupCallManager.h index bc81a205f..eb90cb4b4 100644 --- a/td/telegram/GroupCallManager.h +++ b/td/telegram/GroupCallManager.h @@ -163,6 +163,8 @@ class GroupCallManager : public Actor { void finish_load_group_call_administrators(InputGroupCallId input_group_call_id, Result &&result); + bool cancel_join_group_call_request(InputGroupCallId input_group_call_id); + bool on_join_group_call_response(InputGroupCallId input_group_call_id, string json_response); void finish_join_group_call(InputGroupCallId input_group_call_id, uint64 generation, Status error);