Reload stale video chats on group / channel open.
This commit is contained in:
parent
bb75a6a31b
commit
a23561c380
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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<
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue