Reload stale video chats on group / channel open.

This commit is contained in:
John Preston 2022-04-25 12:50:58 +04:00
parent bb75a6a31b
commit a23561c380
3 changed files with 16 additions and 2 deletions

View File

@ -26,6 +26,7 @@ constexpr auto kRequestPerPage = 50;
constexpr auto kSpeakingAfterActive = crl::time(6000);
constexpr auto kActiveAfterJoined = crl::time(1000);
constexpr auto kWaitForUpdatesTimeout = 3 * crl::time(1000);
constexpr auto kReloadStaleTimeout = 16 * crl::time(1000);
[[nodiscard]] QString ExtractNextOffset(const MTPphone_GroupCall &call) {
return call.match([&](const MTPDphone_groupCall &data) {
@ -168,6 +169,7 @@ bool GroupCall::processSavedFullCall() {
return false;
}
_reloadRequestId = 0;
_reloadLastFinished = crl::now();
processFullCallFields(*base::take(_savedFull));
return true;
}
@ -497,6 +499,15 @@ void GroupCall::computeParticipantsCount() {
: std::max(int(_participants.size()), _serverParticipantsCount);
}
void GroupCall::reloadIfStale() {
if (!fullCount() && !participantsLoaded()) {
reload();
} else if (!_reloadLastFinished
|| crl::now() > _reloadLastFinished + kReloadStaleTimeout) {
reload();
}
}
void GroupCall::reload() {
if (_reloadRequestId || _applyingQueuedUpdates) {
return;
@ -528,9 +539,11 @@ void GroupCall::reload() {
return;
}
_reloadRequestId = 0;
_reloadLastFinished = crl::now();
processFullCall(result);
}).fail([=] {
_reloadRequestId = 0;
_reloadLastFinished = crl::now();
}).send();
}

View File

@ -156,6 +156,7 @@ public:
void setInCall();
void reload();
void reloadIfStale();
void processFullCall(const MTPphone_GroupCall &call);
void setJoinMutedLocally(bool muted);
@ -206,6 +207,7 @@ private:
int _version = 0;
mtpRequestId _participantsRequestId = 0;
mtpRequestId _reloadRequestId = 0;
crl::time _reloadLastFinished = 0;
rpl::variable<QString> _title;
base::flat_multi_map<

View File

@ -364,9 +364,8 @@ rpl::producer<Ui::GroupCallBarContent> GroupCallBarContentByPeer(
-> rpl::producer<Ui::GroupCallBarContent> {
if (!call) {
return rpl::single(Ui::GroupCallBarContent{ .shown = false });
} else if (!call->fullCount() && !call->participantsLoaded()) {
call->reload();
}
call->reloadIfStale();
return GroupCallBarContentByCall(call, userpicSize);
}) | rpl::flatten_latest();
}