Allow changing my own volume in voice chat.

This commit is contained in:
John Preston 2021-01-29 19:19:37 +04:00
parent 2559c5d6f4
commit 5d4e5ed527
1 changed files with 33 additions and 26 deletions

View File

@ -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 = [=] {