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()) {
call->hangup();
} else if (const auto group = _groupCall.get()) {
if (!group->peer()->canManageGroupCall()) {
if (!group->canManage()) {
group->hangup();
} else {
_show->showBox(

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -78,6 +78,7 @@ public:
[[nodiscard]] CallId id() const;
[[nodiscard]] bool loaded() const;
[[nodiscard]] bool rtmp() const;
[[nodiscard]] bool canManage() const;
[[nodiscard]] bool listenersHidden() const;
[[nodiscard]] not_null<PeerData*> peer() const;
[[nodiscard]] MTPInputGroupCall input() const;
@ -271,6 +272,7 @@ private:
mtpRequestId _checkStaleRequestId = 0;
rpl::lifetime _checkStaleLifetime;
bool _creator : 1 = false;
bool _joinMuted : 1 = false;
bool _canChangeJoinMuted : 1 = true;
bool _allParticipantsLoaded : 1 = false;