diff --git a/Telegram/SourceFiles/calls/calls_group_call.cpp b/Telegram/SourceFiles/calls/calls_group_call.cpp index 548dc587d9..f9693a7515 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.cpp +++ b/Telegram/SourceFiles/calls/calls_group_call.cpp @@ -871,12 +871,20 @@ void GroupCall::setCurrentAudioDevice(bool input, const QString &deviceId) { } } -void GroupCall::toggleMute(not_null 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 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( diff --git a/Telegram/SourceFiles/calls/calls_group_call.h b/Telegram/SourceFiles/calls/calls_group_call.h index f4f07dae4e..3e5d8202ab 100644 --- a/Telegram/SourceFiles/calls/calls_group_call.h +++ b/Telegram/SourceFiles/calls/calls_group_call.h @@ -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 user, bool mute); - void changeVolume(not_null user, int volume); + void toggleMute(const Group::MuteRequest &data); + void changeVolume(const Group::VolumeRequest &data); std::variant> inviteUsers( const std::vector> &users); diff --git a/Telegram/SourceFiles/calls/calls_group_common.h b/Telegram/SourceFiles/calls/calls_group_common.h index 4346d4c2f9..1dbe7f08d6 100644 --- a/Telegram/SourceFiles/calls/calls_group_common.h +++ b/Telegram/SourceFiles/calls/calls_group_common.h @@ -17,11 +17,13 @@ constexpr auto kMaxVolume = 20000; struct MuteRequest { not_null user; bool mute = false; + bool locallyOnly = false; }; struct VolumeRequest { not_null user; int volume = kDefaultVolume; bool finalized = true; + bool locallyOnly = false; }; } // namespace Calls::Group diff --git a/Telegram/SourceFiles/calls/calls_group_members.cpp b/Telegram/SourceFiles/calls/calls_group_members.cpp index c72918487d..b8364aaebe 100644 --- a/Telegram/SourceFiles/calls/calls_group_members.cpp +++ b/Telegram/SourceFiles/calls/calls_group_members.cpp @@ -1166,10 +1166,11 @@ base::unique_qptr 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 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); }); } } diff --git a/Telegram/SourceFiles/calls/calls_group_panel.cpp b/Telegram/SourceFiles/calls/calls_group_panel.cpp index 2aaed107ef..9a752a35da 100644 --- a/Telegram/SourceFiles/calls/calls_group_panel.cpp +++ b/Telegram/SourceFiles/calls/calls_group_panel.cpp @@ -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);