Allow changing my own volume in voice chat.
This commit is contained in:
parent
2559c5d6f4
commit
5d4e5ed527
|
@ -1275,10 +1275,11 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
|||
not_null<PeerListRow*> row) {
|
||||
Expects(row->peer()->isUser());
|
||||
|
||||
if (row->peer()->isSelf()) {
|
||||
const auto real = static_cast<Row*>(row.get());
|
||||
if (row->peer()->isSelf()
|
||||
&& (!_peer->canManageGroupCall() || !real->ssrc())) {
|
||||
return nullptr;
|
||||
}
|
||||
const auto real = static_cast<Row*>(row.get());
|
||||
const auto user = row->peer()->asUser();
|
||||
auto result = base::make_unique_q<Ui::PopupMenu>(
|
||||
parent,
|
||||
|
@ -1358,27 +1359,29 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
|||
addMuteActionsToContextMenu(result, user, real);
|
||||
}
|
||||
|
||||
result->addAction(
|
||||
tr::lng_context_view_profile(tr::now),
|
||||
showProfile);
|
||||
result->addAction(
|
||||
tr::lng_context_send_message(tr::now),
|
||||
showHistory);
|
||||
const auto canKick = [&] {
|
||||
if (static_cast<Row*>(row.get())->state() == Row::State::Invited) {
|
||||
return false;
|
||||
} else if (const auto chat = _peer->asChat()) {
|
||||
return chat->amCreator()
|
||||
|| (chat->canBanMembers() && !chat->admins.contains(user));
|
||||
} else if (const auto group = _peer->asMegagroup()) {
|
||||
return group->canRestrictUser(user);
|
||||
}
|
||||
return false;
|
||||
}();
|
||||
if (canKick) {
|
||||
if (!user->isSelf()) {
|
||||
result->addAction(
|
||||
tr::lng_context_remove_from_group(tr::now),
|
||||
removeFromGroup);
|
||||
tr::lng_context_view_profile(tr::now),
|
||||
showProfile);
|
||||
result->addAction(
|
||||
tr::lng_context_send_message(tr::now),
|
||||
showHistory);
|
||||
const auto canKick = [&] {
|
||||
if (static_cast<Row*>(row.get())->state() == Row::State::Invited) {
|
||||
return false;
|
||||
} else if (const auto chat = _peer->asChat()) {
|
||||
return chat->amCreator()
|
||||
|| (chat->canBanMembers() && !chat->admins.contains(user));
|
||||
} else if (const auto group = _peer->asMegagroup()) {
|
||||
return group->canRestrictUser(user);
|
||||
}
|
||||
return false;
|
||||
}();
|
||||
if (canKick) {
|
||||
result->addAction(
|
||||
tr::lng_context_remove_from_group(tr::now),
|
||||
removeFromGroup);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1422,7 +1425,7 @@ void MembersController::addMuteActionsToContextMenu(
|
|||
|
||||
auto mutesFromVolume = rpl::never<bool>() | rpl::type_erased();
|
||||
|
||||
if (!isMuted) {
|
||||
if (!isMuted || user->isSelf()) {
|
||||
const auto call = _call.get();
|
||||
auto otherParticipantStateValue = call
|
||||
? call->otherParticipantStateValue(
|
||||
|
@ -1448,7 +1451,9 @@ void MembersController::addMuteActionsToContextMenu(
|
|||
|
||||
volumeItem->toggleMuteLocallyRequests(
|
||||
) | rpl::start_with_next([=](bool muted) {
|
||||
toggleMute(muted, true);
|
||||
if (!user->isSelf()) {
|
||||
toggleMute(muted, true);
|
||||
}
|
||||
}, volumeItem->lifetime());
|
||||
|
||||
volumeItem->changeVolumeRequests(
|
||||
|
@ -1458,14 +1463,16 @@ void MembersController::addMuteActionsToContextMenu(
|
|||
|
||||
volumeItem->changeVolumeLocallyRequests(
|
||||
) | rpl::start_with_next([=](int volume) {
|
||||
changeVolume(volume, true);
|
||||
if (!user->isSelf()) {
|
||||
changeVolume(volume, true);
|
||||
}
|
||||
}, volumeItem->lifetime());
|
||||
|
||||
menu->addAction(std::move(volumeItem));
|
||||
};
|
||||
|
||||
const auto muteAction = [&]() -> QAction* {
|
||||
if (muteState == Row::State::Invited) {
|
||||
if (muteState == Row::State::Invited || user->isSelf()) {
|
||||
return nullptr;
|
||||
}
|
||||
auto callback = [=] {
|
||||
|
|
Loading…
Reference in New Issue