Fix discarded group call handle.
This commit is contained in:
parent
9cfbccf9e7
commit
ba41da7b28
4 changed files with 27 additions and 11 deletions
|
@ -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<LoadPartTask> 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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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: "
|
||||
|
|
|
@ -120,7 +120,7 @@ private:
|
|||
};
|
||||
[[nodiscard]] ApiWrap &api() const;
|
||||
|
||||
void discard();
|
||||
void discard(const MTPDgroupCallDiscarded &data);
|
||||
[[nodiscard]] bool inCall() const;
|
||||
void applyParticipantsSlice(
|
||||
const QVector<MTPGroupCallParticipant> &list,
|
||||
|
|
Loading…
Reference in a new issue