diff --git a/Telegram/SourceFiles/calls/calls_group_call.cpp b/Telegram/SourceFiles/calls/calls_group_call.cpp index 7bbd317d6e..380602c713 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/calls_group_call.cpp @@ -722,7 +722,8 @@ void GroupCall::handlePossibleCreateOrJoinResponse( const MTPDupdateGroupCall &data) { data.vcall().match([&](const MTPDgroupCall &data) { handlePossibleCreateOrJoinResponse(data); - }, [](const MTPDgroupCallDiscarded &data) { + }, [&](const MTPDgroupCallDiscarded &data) { + handlePossibleDiscarded(data); }); } @@ -815,6 +816,14 @@ void GroupCall::handlePossibleCreateOrJoinResponse( }); } +void GroupCall::handlePossibleDiscarded(const MTPDgroupCallDiscarded &data) { + if (data.vid().v == _id) { + LOG(("Call Info: Hangup after groupCallDiscarded.")); + _mySsrc = 0; + hangup(); + } +} + void GroupCall::addParticipantsToInstance() { const auto real = _peer->groupCall(); if (!real @@ -869,10 +878,7 @@ void GroupCall::handleUpdate(const MTPUpdate &update) { void GroupCall::handleUpdate(const MTPDupdateGroupCall &data) { data.vcall().match([](const MTPDgroupCall &) { }, [&](const MTPDgroupCallDiscarded &data) { - if (data.vid().v == _id) { - _mySsrc = 0; - hangup(); - } + handlePossibleDiscarded(data); }); } @@ -1129,7 +1135,8 @@ void GroupCall::broadcastPartStart(std::shared_ptr task) { }); }); }).fail([=](const MTP::Error &error, const MTP::Response &response) { - if (error.type() == u"GROUPCALL_JOIN_MISSING"_q) { + if (error.type() == u"GROUPCALL_JOIN_MISSING"_q + || error.type() == u"GROUPCALL_FORBIDDEN"_q) { for (const auto &[task, part] : _broadcastParts) { _api.request(part.requestId).cancel(); } diff --git a/Telegram/SourceFiles/calls/calls_group_call.h b/Telegram/SourceFiles/calls/calls_group_call.h index 6e72833c01..09781aab9f 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.h +++ b/Telegram/SourceFiles/calls/calls_group_call.h @@ -228,6 +228,7 @@ private: }; void handlePossibleCreateOrJoinResponse(const MTPDgroupCall &data); + void handlePossibleDiscarded(const MTPDgroupCallDiscarded &data); void handleUpdate(const MTPDupdateGroupCall &data); void handleUpdate(const MTPDupdateGroupCallParticipants &data); void handleRequestError(const MTP::Error &error); diff --git a/Telegram/SourceFiles/data/data_group_call.cpp b/Telegram/SourceFiles/data/data_group_call.cpp index 2c9c355ffe..b22e134d91 100644 --- a/Telegram/SourceFiles/data/data_group_call.cpp +++ b/Telegram/SourceFiles/data/data_group_call.cpp @@ -218,7 +218,7 @@ void GroupCall::enqueueUpdate(const MTPUpdate &update) { _queuedUpdates.emplace(std::pair{ version, type }, update); } }, [&](const MTPDgroupCallDiscarded &data) { - discard(); + discard(data); }); }, [&](const MTPDupdateGroupCallParticipants &updateData) { const auto version = updateData.vversion().v; @@ -255,7 +255,7 @@ void GroupCall::enqueueUpdate(const MTPUpdate &update) { processQueuedUpdates(); } -void GroupCall::discard() { +void GroupCall::discard(const MTPDgroupCallDiscarded &data) { const auto id = _id; const auto peer = _peer; crl::on_main(&peer->session(), [=] { @@ -267,6 +267,14 @@ void GroupCall::discard() { } } }); + Core::App().calls().applyGroupCallUpdateChecked( + &peer->session(), + MTP_updateGroupCall( + MTP_int(peer->bareId()), + MTP_groupCallDiscarded( + data.vid(), + data.vaccess_hash(), + data.vduration()))); } void GroupCall::processFullCallUsersChats(const MTPphone_GroupCall &call) { @@ -293,7 +301,7 @@ void GroupCall::processFullCallFields(const MTPphone_GroupCall &call) { applyCallFields(data); }, [&](const MTPDgroupCallDiscarded &data) { - discard(); + discard(data); }); }); } @@ -343,7 +351,7 @@ void GroupCall::applyEnqueuedUpdate(const MTPUpdate &update) { applyCallFields(data); computeParticipantsCount(); }, [&](const MTPDgroupCallDiscarded &data) { - discard(); + discard(data); }); }, [&](const MTPDupdateGroupCallParticipants &data) { DEBUG_LOG(("Group Call Participants: " diff --git a/Telegram/SourceFiles/data/data_group_call.h b/Telegram/SourceFiles/data/data_group_call.h index 3b9e88261c..8826786104 100644 --- a/Telegram/SourceFiles/data/data_group_call.h +++ b/Telegram/SourceFiles/data/data_group_call.h @@ -120,7 +120,7 @@ private: }; [[nodiscard]] ApiWrap &api() const; - void discard(); + void discard(const MTPDgroupCallDiscarded &data); [[nodiscard]] bool inCall() const; void applyParticipantsSlice( const QVector &list,