Hide members in RTMP streams.

This commit is contained in:
John Preston 2022-02-28 13:52:49 +03:00
parent 39c10b9e1c
commit 25e29d3dd5
5 changed files with 35 additions and 8 deletions

View file

@ -582,6 +582,7 @@ GroupCall::GroupCall(
, _checkJoinedTimer([=] { checkJoined(); }) , _checkJoinedTimer([=] { checkJoined(); })
, _pushToTalkCancelTimer([=] { pushToTalkCancel(); }) , _pushToTalkCancelTimer([=] { pushToTalkCancel(); })
, _connectingSoundTimer([=] { playConnectingSoundOnce(); }) , _connectingSoundTimer([=] { playConnectingSoundOnce(); })
, _listenersHidden(info.rtmp)
, _rtmp(info.rtmp) , _rtmp(info.rtmp)
, _mediaDevices(CreateMediaDevices()) { , _mediaDevices(CreateMediaDevices()) {
_muted.value( _muted.value(
@ -693,7 +694,9 @@ bool GroupCall::screenSharingWithAudio() const {
bool GroupCall::mutedByAdmin() const { bool GroupCall::mutedByAdmin() const {
const auto mute = muted(); const auto mute = muted();
return mute == MuteState::ForceMuted || mute == MuteState::RaisedHand; return _rtmp
|| (mute == MuteState::ForceMuted)
|| (mute == MuteState::RaisedHand);
} }
bool GroupCall::canManage() const { bool GroupCall::canManage() const {
@ -756,6 +759,8 @@ void GroupCall::setScheduledDate(TimeId date) {
} }
void GroupCall::subscribeToReal(not_null<Data::GroupCall*> real) { void GroupCall::subscribeToReal(not_null<Data::GroupCall*> real) {
_listenersHidden = real->listenersHidden();
real->scheduleDateValue( real->scheduleDateValue(
) | rpl::start_with_next([=](TimeId date) { ) | rpl::start_with_next([=](TimeId date) {
setScheduledDate(date); setScheduledDate(date);
@ -1001,6 +1006,10 @@ bool GroupCall::rtmp() const {
return _rtmp; return _rtmp;
} }
bool GroupCall::listenersHidden() const {
return _listenersHidden;
}
Data::GroupCall *GroupCall::lookupReal() const { Data::GroupCall *GroupCall::lookupReal() const {
const auto real = _peer->groupCall(); const auto real = _peer->groupCall();
return (real && real->id() == _id) ? real : nullptr; return (real && real->id() == _id) ? real : nullptr;

View file

@ -232,6 +232,7 @@ public:
} }
[[nodiscard]] bool scheduleStartSubscribed() const; [[nodiscard]] bool scheduleStartSubscribed() const;
[[nodiscard]] bool rtmp() const; [[nodiscard]] bool rtmp() const;
[[nodiscard]] bool listenersHidden() const;
[[nodiscard]] Data::GroupCall *lookupReal() const; [[nodiscard]] Data::GroupCall *lookupReal() const;
[[nodiscard]] rpl::producer<not_null<Data::GroupCall*>> real() const; [[nodiscard]] rpl::producer<not_null<Data::GroupCall*>> real() const;
@ -659,6 +660,7 @@ private:
base::Timer _pushToTalkCancelTimer; base::Timer _pushToTalkCancelTimer;
base::Timer _connectingSoundTimer; base::Timer _connectingSoundTimer;
bool _hadJoinedState = false; bool _hadJoinedState = false;
bool _listenersHidden = false;
bool _rtmp = false; bool _rtmp = false;
std::unique_ptr<Webrtc::MediaDevices> _mediaDevices; std::unique_ptr<Webrtc::MediaDevices> _mediaDevices;

View file

@ -1433,8 +1433,9 @@ bool Panel::updateMode() {
if (!_viewport) { if (!_viewport) {
return false; return false;
} }
const auto wide = _call->hasVideoWithFrames() const auto wide = _call->rtmp()
&& (widget()->width() >= st::groupCallWideModeWidthMin); || (_call->hasVideoWithFrames()
&& (widget()->width() >= st::groupCallWideModeWidthMin));
const auto mode = wide ? PanelMode::Wide : PanelMode::Default; const auto mode = wide ? PanelMode::Wide : PanelMode::Default;
if (_mode.current() == mode) { if (_mode.current() == mode) {
return false; return false;
@ -1457,6 +1458,8 @@ bool Panel::updateMode() {
_subtitle.destroy(); _subtitle.destroy();
} else if (!wide && !_subtitle) { } else if (!wide && !_subtitle) {
refreshTitle(); refreshTitle();
} else if (!_members) {
setupMembers();
} }
_wideControlsShown = _showWideControls = true; _wideControlsShown = _showWideControls = true;
_wideControlsAnimation.stop(); _wideControlsAnimation.stop();
@ -1934,7 +1937,7 @@ void Panel::updateButtonsGeometry() {
const auto hidden = (shown == 0.); const auto hidden = (shown == 0.);
if (_viewport) { if (_viewport) {
_viewport->setControlsShown(shown); _viewport->setControlsShown(_call->rtmp() ? 0. : shown);
} }
const auto buttonsTop = widget()->height() - anim::interpolate( const auto buttonsTop = widget()->height() - anim::interpolate(
@ -1950,8 +1953,9 @@ void Panel::updateButtonsGeometry() {
+ (_settings ->width() + skip) + (_settings ->width() + skip)
+ _hangup->width(); + _hangup->width();
const auto membersSkip = st::groupCallNarrowSkip; const auto membersSkip = st::groupCallNarrowSkip;
const auto membersWidth = st::groupCallNarrowMembersWidth const auto membersWidth = _call->rtmp()
+ 2 * membersSkip; ? membersSkip
: (st::groupCallNarrowMembersWidth + 2 * membersSkip);
auto left = membersSkip + (widget()->width() auto left = membersSkip + (widget()->width()
- membersWidth - membersWidth
- membersSkip - membersSkip
@ -2046,6 +2050,7 @@ void Panel::updateMembersGeometry() {
if (!_members) { if (!_members) {
return; return;
} }
_members->setVisible(!_call->rtmp());
const auto desiredHeight = _members->desiredHeight(); const auto desiredHeight = _members->desiredHeight();
if (mode() == PanelMode::Wide) { if (mode() == PanelMode::Wide) {
const auto skip = st::groupCallNarrowSkip; const auto skip = st::groupCallNarrowSkip;
@ -2056,10 +2061,13 @@ void Panel::updateMembersGeometry() {
top, top,
membersWidth, membersWidth,
std::min(desiredHeight, widget()->height() - top - skip)); std::min(desiredHeight, widget()->height() - top - skip));
const auto viewportSkip = _call->rtmp()
? 0
: (skip + membersWidth);
_viewport->setGeometry({ _viewport->setGeometry({
skip, skip,
top, top,
widget()->width() - membersWidth - 3 * skip, widget()->width() - viewportSkip - 2 * skip,
widget()->height() - top - skip, widget()->height() - top - skip,
}); });
} else { } else {

View file

@ -68,7 +68,8 @@ GroupCall::GroupCall(
, _reloadByQueuedUpdatesTimer([=] { reload(); }) , _reloadByQueuedUpdatesTimer([=] { reload(); })
, _speakingByActiveFinishTimer([=] { checkFinishSpeakingByActive(); }) , _speakingByActiveFinishTimer([=] { checkFinishSpeakingByActive(); })
, _scheduleDate(scheduleDate) , _scheduleDate(scheduleDate)
, _rtmp(rtmp) { , _rtmp(rtmp)
, _listenersHidden(rtmp) {
} }
GroupCall::~GroupCall() { GroupCall::~GroupCall() {
@ -89,6 +90,10 @@ bool GroupCall::rtmp() const {
return _rtmp; return _rtmp;
} }
bool GroupCall::listenersHidden() const {
return _listenersHidden;
}
not_null<PeerData*> GroupCall::peer() const { not_null<PeerData*> GroupCall::peer() const {
return _peer; return _peer;
} }
@ -395,6 +400,7 @@ void GroupCall::applyCallFields(const MTPDgroupCall &data) {
_version = 1; _version = 1;
} }
_rtmp = data.is_rtmp_stream(); _rtmp = data.is_rtmp_stream();
_listenersHidden = data.is_listeners_hidden();
_joinMuted = data.is_join_muted(); _joinMuted = data.is_join_muted();
_canChangeJoinMuted = data.is_can_change_join_muted(); _canChangeJoinMuted = data.is_can_change_join_muted();
_joinedToTop = !data.is_join_date_asc(); _joinedToTop = !data.is_join_date_asc();

View file

@ -64,6 +64,7 @@ public:
[[nodiscard]] CallId id() const; [[nodiscard]] CallId id() const;
[[nodiscard]] bool loaded() const; [[nodiscard]] bool loaded() const;
[[nodiscard]] bool rtmp() const; [[nodiscard]] bool rtmp() const;
[[nodiscard]] bool listenersHidden() const;
[[nodiscard]] not_null<PeerData*> peer() const; [[nodiscard]] not_null<PeerData*> peer() const;
[[nodiscard]] MTPInputGroupCall input() const; [[nodiscard]] MTPInputGroupCall input() const;
[[nodiscard]] QString title() const { [[nodiscard]] QString title() const {
@ -244,6 +245,7 @@ private:
bool _joinedToTop = false; bool _joinedToTop = false;
bool _applyingQueuedUpdates = false; bool _applyingQueuedUpdates = false;
bool _rtmp = false; bool _rtmp = false;
bool _listenersHidden = false;
}; };