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) {
|
not_null<PeerListRow*> row) {
|
||||||
Expects(row->peer()->isUser());
|
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;
|
return nullptr;
|
||||||
}
|
}
|
||||||
const auto real = static_cast<Row*>(row.get());
|
|
||||||
const auto user = row->peer()->asUser();
|
const auto user = row->peer()->asUser();
|
||||||
auto result = base::make_unique_q<Ui::PopupMenu>(
|
auto result = base::make_unique_q<Ui::PopupMenu>(
|
||||||
parent,
|
parent,
|
||||||
|
@ -1358,27 +1359,29 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
||||||
addMuteActionsToContextMenu(result, user, real);
|
addMuteActionsToContextMenu(result, user, real);
|
||||||
}
|
}
|
||||||
|
|
||||||
result->addAction(
|
if (!user->isSelf()) {
|
||||||
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(
|
result->addAction(
|
||||||
tr::lng_context_remove_from_group(tr::now),
|
tr::lng_context_view_profile(tr::now),
|
||||||
removeFromGroup);
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1422,7 +1425,7 @@ void MembersController::addMuteActionsToContextMenu(
|
||||||
|
|
||||||
auto mutesFromVolume = rpl::never<bool>() | rpl::type_erased();
|
auto mutesFromVolume = rpl::never<bool>() | rpl::type_erased();
|
||||||
|
|
||||||
if (!isMuted) {
|
if (!isMuted || user->isSelf()) {
|
||||||
const auto call = _call.get();
|
const auto call = _call.get();
|
||||||
auto otherParticipantStateValue = call
|
auto otherParticipantStateValue = call
|
||||||
? call->otherParticipantStateValue(
|
? call->otherParticipantStateValue(
|
||||||
|
@ -1448,7 +1451,9 @@ void MembersController::addMuteActionsToContextMenu(
|
||||||
|
|
||||||
volumeItem->toggleMuteLocallyRequests(
|
volumeItem->toggleMuteLocallyRequests(
|
||||||
) | rpl::start_with_next([=](bool muted) {
|
) | rpl::start_with_next([=](bool muted) {
|
||||||
toggleMute(muted, true);
|
if (!user->isSelf()) {
|
||||||
|
toggleMute(muted, true);
|
||||||
|
}
|
||||||
}, volumeItem->lifetime());
|
}, volumeItem->lifetime());
|
||||||
|
|
||||||
volumeItem->changeVolumeRequests(
|
volumeItem->changeVolumeRequests(
|
||||||
|
@ -1458,14 +1463,16 @@ void MembersController::addMuteActionsToContextMenu(
|
||||||
|
|
||||||
volumeItem->changeVolumeLocallyRequests(
|
volumeItem->changeVolumeLocallyRequests(
|
||||||
) | rpl::start_with_next([=](int volume) {
|
) | rpl::start_with_next([=](int volume) {
|
||||||
changeVolume(volume, true);
|
if (!user->isSelf()) {
|
||||||
|
changeVolume(volume, true);
|
||||||
|
}
|
||||||
}, volumeItem->lifetime());
|
}, volumeItem->lifetime());
|
||||||
|
|
||||||
menu->addAction(std::move(volumeItem));
|
menu->addAction(std::move(volumeItem));
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto muteAction = [&]() -> QAction* {
|
const auto muteAction = [&]() -> QAction* {
|
||||||
if (muteState == Row::State::Invited) {
|
if (muteState == Row::State::Invited || user->isSelf()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
auto callback = [=] {
|
auto callback = [=] {
|
||||||
|
|
Loading…
Reference in New Issue