Added ability to apply volume and mute user in group calls locally only.
This commit is contained in:
parent
827c950468
commit
250add3a96
|
@ -871,12 +871,20 @@ void GroupCall::setCurrentAudioDevice(bool input, const QString &deviceId) {
|
|||
}
|
||||
}
|
||||
|
||||
void GroupCall::toggleMute(not_null<UserData*> user, bool mute) {
|
||||
editParticipant(user, mute, std::nullopt);
|
||||
void GroupCall::toggleMute(const Group::MuteRequest &data) {
|
||||
if (data.locallyOnly) {
|
||||
applyParticipantLocally(data.user, data.mute, std::nullopt);
|
||||
} else {
|
||||
editParticipant(data.user, data.mute, std::nullopt);
|
||||
}
|
||||
}
|
||||
|
||||
void GroupCall::changeVolume(not_null<UserData*> user, int volume) {
|
||||
editParticipant(user, false, volume);
|
||||
void GroupCall::changeVolume(const Group::VolumeRequest &data) {
|
||||
if (data.locallyOnly) {
|
||||
applyParticipantLocally(data.user, false, data.volume);
|
||||
} else {
|
||||
editParticipant(data.user, false, data.volume);
|
||||
}
|
||||
}
|
||||
|
||||
void GroupCall::editParticipant(
|
||||
|
|
|
@ -35,6 +35,11 @@ struct LastSpokeTimes;
|
|||
|
||||
namespace Calls {
|
||||
|
||||
namespace Group {
|
||||
struct MuteRequest;
|
||||
struct VolumeRequest;
|
||||
} // namespace Group
|
||||
|
||||
enum class MuteState {
|
||||
Active,
|
||||
PushToTalk,
|
||||
|
@ -131,8 +136,8 @@ public:
|
|||
//void setAudioVolume(bool input, float level);
|
||||
void setAudioDuckingEnabled(bool enabled);
|
||||
|
||||
void toggleMute(not_null<UserData*> user, bool mute);
|
||||
void changeVolume(not_null<UserData*> user, int volume);
|
||||
void toggleMute(const Group::MuteRequest &data);
|
||||
void changeVolume(const Group::VolumeRequest &data);
|
||||
std::variant<int, not_null<UserData*>> inviteUsers(
|
||||
const std::vector<not_null<UserData*>> &users);
|
||||
|
||||
|
|
|
@ -17,11 +17,13 @@ constexpr auto kMaxVolume = 20000;
|
|||
struct MuteRequest {
|
||||
not_null<UserData*> user;
|
||||
bool mute = false;
|
||||
bool locallyOnly = false;
|
||||
};
|
||||
struct VolumeRequest {
|
||||
not_null<UserData*> user;
|
||||
int volume = kDefaultVolume;
|
||||
bool finalized = true;
|
||||
bool locallyOnly = false;
|
||||
};
|
||||
|
||||
} // namespace Calls::Group
|
||||
|
|
|
@ -1166,10 +1166,11 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
|||
.mute = mute,
|
||||
});
|
||||
});
|
||||
const auto changeVolume = crl::guard(this, [=](int volume) {
|
||||
const auto changeVolume = crl::guard(this, [=](int volume, bool local) {
|
||||
_changeVolumeRequests.fire(Group::VolumeRequest{
|
||||
.user = user,
|
||||
.volume = std::clamp(volume, 1, Group::kMaxVolume),
|
||||
.locallyOnly = local,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -1245,10 +1246,10 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
|||
&& muteState != Row::State::MutedByMe) {
|
||||
const auto volume = real->volume();
|
||||
result->addAction(QString("Increase volume (%1%)").arg(volume / 100.), [=] {
|
||||
changeVolume(volume + 2000);
|
||||
changeVolume(volume + 2000, false);
|
||||
});
|
||||
result->addAction(QString("Decrease volume (%1%)").arg(volume / 100.), [=] {
|
||||
changeVolume(volume - 2000);
|
||||
changeVolume(volume - 2000, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -508,14 +508,14 @@ void GroupPanel::initWithCall(GroupCall *call) {
|
|||
_members->toggleMuteRequests(
|
||||
) | rpl::start_with_next([=](Group::MuteRequest request) {
|
||||
if (_call) {
|
||||
_call->toggleMute(request.user, request.mute);
|
||||
_call->toggleMute(request);
|
||||
}
|
||||
}, _callLifetime);
|
||||
|
||||
_members->changeVolumeRequests(
|
||||
) | rpl::start_with_next([=](Group::VolumeRequest request) {
|
||||
if (_call) {
|
||||
_call->changeVolume(request.user, request.volume);
|
||||
_call->changeVolume(request);
|
||||
}
|
||||
}, _callLifetime);
|
||||
|
||||
|
|
Loading…
Reference in New Issue