Give some admin rights to confcall creator.

This commit is contained in:
John Preston 2025-03-30 16:14:48 +05:00
parent c846eeed9d
commit e33a866a63
7 changed files with 27 additions and 12 deletions

View file

@ -424,7 +424,7 @@ void TopBar::initControls() {
if (const auto call = _call.get()) { if (const auto call = _call.get()) {
call->hangup(); call->hangup();
} else if (const auto group = _groupCall.get()) { } else if (const auto group = _groupCall.get()) {
if (!group->peer()->canManageGroupCall()) { if (!group->canManage()) {
group->hangup(); group->hangup();
} else { } else {
_show->showBox( _show->showBox(

View file

@ -1239,8 +1239,13 @@ void GroupCall::join(const MTPInputGroupCall &inputCall) {
} }
}, _lifetime); }, _lifetime);
if (_conferenceCall) {
_canManage = _conferenceCall->canManage();
return;
}
_peer->session().updates().addActiveChat( _peer->session().updates().addActiveChat(
_peerStream.events_starting_with_copy(_peer)); _peerStream.events_starting_with_copy(_peer));
_canManage = Data::CanManageGroupCallValue(_peer);
SubscribeToMigration(_peer, _lifetime, [=](not_null<ChannelData*> group) { SubscribeToMigration(_peer, _lifetime, [=](not_null<ChannelData*> group) {
_peer = group; _peer = group;
_canManage = Data::CanManageGroupCallValue(_peer); _canManage = Data::CanManageGroupCallValue(_peer);

View file

@ -615,7 +615,7 @@ bool Members::Controller::needToReorder(not_null<Row*> row) const {
if (row->speaking()) { if (row->speaking()) {
return !allRowsAboveAreSpeaking(row); return !allRowsAboveAreSpeaking(row);
} else if (!_peer->canManageGroupCall()) { } else if (!_call->canManage()) {
// Raising hands reorder participants only for voice chat admins. // Raising hands reorder participants only for voice chat admins.
return false; return false;
} }
@ -684,7 +684,7 @@ void Members::Controller::checkRowPosition(not_null<Row*> row) {
return proj(a) > proj(b); return proj(a) > proj(b);
}; };
}; };
delegate()->peerListSortRows(_peer->canManageGroupCall() delegate()->peerListSortRows(_call->canManage()
? makeComparator(projForAdmin) ? makeComparator(projForAdmin)
: makeComparator(projForOther)); : makeComparator(projForOther));
} }
@ -919,7 +919,7 @@ bool Members::Controller::rowIsMe(not_null<PeerData*> participantPeer) {
} }
bool Members::Controller::rowCanMuteMembers() { bool Members::Controller::rowCanMuteMembers() {
return _peer->canManageGroupCall(); return _call->canManage();
} }
void Members::Controller::rowUpdateRow(not_null<Row*> row) { void Members::Controller::rowUpdateRow(not_null<Row*> row) {
@ -1317,7 +1317,7 @@ base::unique_qptr<Ui::PopupMenu> Members::Controller::createRowContextMenu(
false, false,
static_cast<Row*>(row.get())); static_cast<Row*>(row.get()));
} else if (participant } else if (participant
&& (!isMe(participantPeer) || _peer->canManageGroupCall()) && (!isMe(participantPeer) || _call->canManage())
&& (participant->ssrc != 0 && (participant->ssrc != 0
|| GetAdditionalAudioSsrc(participant->videoParams) != 0)) { || GetAdditionalAudioSsrc(participant->videoParams) != 0)) {
addMuteActionsToContextMenu( addMuteActionsToContextMenu(
@ -1387,11 +1387,11 @@ void Members::Controller::addMuteActionsToContextMenu(
bool participantIsCallAdmin, bool participantIsCallAdmin,
not_null<Row*> row) { not_null<Row*> row) {
const auto muteUnmuteString = [=](bool muted, bool mutedByMe) { const auto muteUnmuteString = [=](bool muted, bool mutedByMe) {
return (muted && _peer->canManageGroupCall()) return (muted && _call->canManage())
? tr::lng_group_call_context_unmute(tr::now) ? tr::lng_group_call_context_unmute(tr::now)
: mutedByMe : mutedByMe
? tr::lng_group_call_context_unmute_for_me(tr::now) ? tr::lng_group_call_context_unmute_for_me(tr::now)
: _peer->canManageGroupCall() : _call->canManage()
? tr::lng_group_call_context_mute(tr::now) ? tr::lng_group_call_context_mute(tr::now)
: tr::lng_group_call_context_mute_for_me(tr::now); : tr::lng_group_call_context_mute_for_me(tr::now);
}; };
@ -1488,7 +1488,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|| isMe(participantPeer) || isMe(participantPeer)
|| (muteState == Row::State::Inactive || (muteState == Row::State::Inactive
&& participantIsCallAdmin && participantIsCallAdmin
&& _peer->canManageGroupCall())) { && _call->canManage())) {
return nullptr; return nullptr;
} }
auto callback = [=] { auto callback = [=] {

View file

@ -441,7 +441,7 @@ void LeaveBox(
: tr::lng_group_call_leave_sure())), : tr::lng_group_call_leave_sure())),
(inCall ? st::groupCallBoxLabel : st::boxLabel)), (inCall ? st::groupCallBoxLabel : st::boxLabel)),
scheduled ? st::boxPadding : st::boxRowPadding); scheduled ? st::boxPadding : st::boxRowPadding);
const auto discard = call->peer()->canManageGroupCall() const auto discard = call->canManage()
? box->addRow(object_ptr<Ui::Checkbox>( ? box->addRow(object_ptr<Ui::Checkbox>(
box.get(), box.get(),
(scheduled (scheduled
@ -507,9 +507,12 @@ void FillMenu(
return; return;
} }
const auto conference = call->conference();
const auto addEditJoinAs = call->showChooseJoinAs(); const auto addEditJoinAs = call->showChooseJoinAs();
const auto addEditTitle = call->canManage(); const auto addEditTitle = !conference && call->canManage();
const auto addEditRecording = call->canManage() && !real->scheduleDate(); const auto addEditRecording = !conference
&& call->canManage()
&& !real->scheduleDate();
const auto addScreenCast = !wide const auto addScreenCast = !wide
&& call->videoIsWorking() && call->videoIsWorking()
&& !real->scheduleDate(); && !real->scheduleDate();

View file

@ -766,7 +766,7 @@ void SettingsBox(
}, volumeItem->lifetime()); }, volumeItem->lifetime());
} }
if (peer->canManageGroupCall()) { if (call->canManage()) {
layout->add(object_ptr<Ui::SettingsButton>( layout->add(object_ptr<Ui::SettingsButton>(
layout, layout,
(peer->isBroadcast() (peer->isBroadcast()

View file

@ -128,6 +128,10 @@ bool GroupCall::rtmp() const {
return _rtmp; return _rtmp;
} }
bool GroupCall::canManage() const {
return _conference ? _creator : _peer->canManageGroupCall();
}
bool GroupCall::listenersHidden() const { bool GroupCall::listenersHidden() const {
return _listenersHidden; return _listenersHidden;
} }
@ -539,6 +543,7 @@ void GroupCall::applyCallFields(const MTPDgroupCall &data) {
_version = 1; _version = 1;
} }
_rtmp = data.is_rtmp_stream(); _rtmp = data.is_rtmp_stream();
_creator = data.is_creator();
_listenersHidden = data.is_listeners_hidden(); _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();

View file

@ -78,6 +78,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 canManage() const;
[[nodiscard]] bool listenersHidden() 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;
@ -271,6 +272,7 @@ private:
mtpRequestId _checkStaleRequestId = 0; mtpRequestId _checkStaleRequestId = 0;
rpl::lifetime _checkStaleLifetime; rpl::lifetime _checkStaleLifetime;
bool _creator : 1 = false;
bool _joinMuted : 1 = false; bool _joinMuted : 1 = false;
bool _canChangeJoinMuted : 1 = true; bool _canChangeJoinMuted : 1 = true;
bool _allParticipantsLoaded : 1 = false; bool _allParticipantsLoaded : 1 = false;