From a23561c3802ae3a1e62aa198ffa825191b05e515 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 25 Apr 2022 12:50:58 +0400 Subject: [PATCH] Reload stale video chats on group / channel open. --- Telegram/SourceFiles/data/data_group_call.cpp | 13 +++++++++++++ Telegram/SourceFiles/data/data_group_call.h | 2 ++ .../history/view/history_view_group_call_bar.cpp | 3 +-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/data/data_group_call.cpp b/Telegram/SourceFiles/data/data_group_call.cpp index 47dc4fb1a0..613920d990 100644 --- a/Telegram/SourceFiles/data/data_group_call.cpp +++ b/Telegram/SourceFiles/data/data_group_call.cpp @@ -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(); } diff --git a/Telegram/SourceFiles/data/data_group_call.h b/Telegram/SourceFiles/data/data_group_call.h index 542b3dc3ed..6dbaf8debe 100644 --- a/Telegram/SourceFiles/data/data_group_call.h +++ b/Telegram/SourceFiles/data/data_group_call.h @@ -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 _title; base::flat_multi_map< diff --git a/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp b/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp index 04cb76a959..03a1fbe6dd 100644 --- a/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp +++ b/Telegram/SourceFiles/history/view/history_view_group_call_bar.cpp @@ -364,9 +364,8 @@ rpl::producer GroupCallBarContentByPeer( -> rpl::producer { 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(); }