From 402729dc9961e80708c0dd4f70319f5134bc3c6b Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 12 Jul 2021 15:37:34 +0300 Subject: [PATCH] Check unmuted video limit in group call. --- .../calls/group/calls_group_call.cpp | 24 +++++-------------- Telegram/SourceFiles/data/data_group_call.cpp | 2 +- Telegram/SourceFiles/data/data_group_call.h | 9 +++---- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/Telegram/SourceFiles/calls/group/calls_group_call.cpp b/Telegram/SourceFiles/calls/group/calls_group_call.cpp index 98e0aa413..80cc29975 100644 --- a/Telegram/SourceFiles/calls/group/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/group/calls_group_call.cpp @@ -677,20 +677,6 @@ void GroupCall::subscribeToReal(not_null real) { setScheduledDate(date); }, _lifetime); - // If we joined before you could start video and then you can, - // you have to rejoin so that the server knows your video params. - //real->canStartVideoValue( // ignore can_start_video after call start. - //) | rpl::combine_previous( - //) | rpl::start_with_next([=](bool could, bool can) { - // if (could || !can) { - // return; - // } if (_joinState.action == JoinAction::None) { - // rejoin(); - // } else { - // _joinState.nextActionPending = true; - // } - //}, _lifetime); - // Postpone creating video tracks, so that we know if Panel // supports OpenGL and we don't need ARGB32 frames at all. Ui::PostponeCall(this, [=] { @@ -1965,9 +1951,10 @@ bool GroupCall::emitShareCameraError() { emitShareCameraError(error); return true; }; - /*if (const auto real = lookupReal(); real && !real->canStartVideo()) { + if (const auto real = lookupReal() + ; real && _activeVideoTracks.size() >= real->unmutedVideoLimit()) { return emitError(Error::DisabledNoCamera); - } else */if (!videoIsWorking()) { + } else if (!videoIsWorking()) { return emitError(Error::DisabledNoCamera); } else if (mutedByAdmin()) { return emitError(Error::MutedNoCamera); @@ -1991,9 +1978,10 @@ bool GroupCall::emitShareScreenError() { emitShareScreenError(error); return true; }; - /*if (const auto real = lookupReal(); real && !real->canStartVideo()) { + if (const auto real = lookupReal() + ; real && _activeVideoTracks.size() >= real->unmutedVideoLimit()) { return emitError(Error::DisabledNoScreen); - } else */if (!videoIsWorking()) { + } else if (!videoIsWorking()) { return emitError(Error::DisabledNoScreen); } else if (mutedByAdmin()) { return emitError(Error::MutedNoScreen); diff --git a/Telegram/SourceFiles/data/data_group_call.cpp b/Telegram/SourceFiles/data/data_group_call.cpp index caee89c25..de6478890 100644 --- a/Telegram/SourceFiles/data/data_group_call.cpp +++ b/Telegram/SourceFiles/data/data_group_call.cpp @@ -392,7 +392,7 @@ void GroupCall::applyCallFields(const MTPDgroupCall &data) { _recordStartDate = data.vrecord_start_date().value_or_empty(); _scheduleDate = data.vschedule_date().value_or_empty(); _scheduleStartSubscribed = data.is_schedule_start_subscribed(); - _canStartVideo = data.is_can_start_video(); + _unmutedVideoLimit = data.vunmuted_video_limit().v; _allParticipantsLoaded = (_serverParticipantsCount == _participants.size()); } diff --git a/Telegram/SourceFiles/data/data_group_call.h b/Telegram/SourceFiles/data/data_group_call.h index cb642abfd..07b6b51f8 100644 --- a/Telegram/SourceFiles/data/data_group_call.h +++ b/Telegram/SourceFiles/data/data_group_call.h @@ -95,11 +95,8 @@ public: [[nodiscard]] rpl::producer scheduleStartSubscribedValue() const { return _scheduleStartSubscribed.value(); } - [[nodiscard]] bool canStartVideo() const { - return _canStartVideo.current(); - } - [[nodiscard]] rpl::producer canStartVideoValue() const { - return _canStartVideo.value(); + [[nodiscard]] int unmutedVideoLimit() const { + return _unmutedVideoLimit.current(); } void setPeer(not_null peer); @@ -216,10 +213,10 @@ private: QString _nextOffset; int _serverParticipantsCount = 0; rpl::variable _fullCount = 0; + rpl::variable _unmutedVideoLimit = 0; rpl::variable _recordStartDate = 0; rpl::variable _scheduleDate = 0; rpl::variable _scheduleStartSubscribed = false; - rpl::variable _canStartVideo = false; base::flat_map _unknownSpokenSsrcs; base::flat_map _unknownSpokenPeerIds;