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

View File

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

View File

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