mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-08 08:04:08 +02:00
Added ability to apply volume and mute user in group calls locally only.
This commit is contained in:
parent
827c950468
commit
250add3a96
5 changed files with 27 additions and 11 deletions
|
@ -871,12 +871,20 @@ void GroupCall::setCurrentAudioDevice(bool input, const QString &deviceId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupCall::toggleMute(not_null<UserData*> user, bool mute) {
|
void GroupCall::toggleMute(const Group::MuteRequest &data) {
|
||||||
editParticipant(user, mute, std::nullopt);
|
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) {
|
void GroupCall::changeVolume(const Group::VolumeRequest &data) {
|
||||||
editParticipant(user, false, volume);
|
if (data.locallyOnly) {
|
||||||
|
applyParticipantLocally(data.user, false, data.volume);
|
||||||
|
} else {
|
||||||
|
editParticipant(data.user, false, data.volume);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupCall::editParticipant(
|
void GroupCall::editParticipant(
|
||||||
|
|
|
@ -35,6 +35,11 @@ struct LastSpokeTimes;
|
||||||
|
|
||||||
namespace Calls {
|
namespace Calls {
|
||||||
|
|
||||||
|
namespace Group {
|
||||||
|
struct MuteRequest;
|
||||||
|
struct VolumeRequest;
|
||||||
|
} // namespace Group
|
||||||
|
|
||||||
enum class MuteState {
|
enum class MuteState {
|
||||||
Active,
|
Active,
|
||||||
PushToTalk,
|
PushToTalk,
|
||||||
|
@ -131,8 +136,8 @@ public:
|
||||||
//void setAudioVolume(bool input, float level);
|
//void setAudioVolume(bool input, float level);
|
||||||
void setAudioDuckingEnabled(bool enabled);
|
void setAudioDuckingEnabled(bool enabled);
|
||||||
|
|
||||||
void toggleMute(not_null<UserData*> user, bool mute);
|
void toggleMute(const Group::MuteRequest &data);
|
||||||
void changeVolume(not_null<UserData*> user, int volume);
|
void changeVolume(const Group::VolumeRequest &data);
|
||||||
std::variant<int, not_null<UserData*>> inviteUsers(
|
std::variant<int, not_null<UserData*>> inviteUsers(
|
||||||
const std::vector<not_null<UserData*>> &users);
|
const std::vector<not_null<UserData*>> &users);
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,13 @@ constexpr auto kMaxVolume = 20000;
|
||||||
struct MuteRequest {
|
struct MuteRequest {
|
||||||
not_null<UserData*> user;
|
not_null<UserData*> user;
|
||||||
bool mute = false;
|
bool mute = false;
|
||||||
|
bool locallyOnly = false;
|
||||||
};
|
};
|
||||||
struct VolumeRequest {
|
struct VolumeRequest {
|
||||||
not_null<UserData*> user;
|
not_null<UserData*> user;
|
||||||
int volume = kDefaultVolume;
|
int volume = kDefaultVolume;
|
||||||
bool finalized = true;
|
bool finalized = true;
|
||||||
|
bool locallyOnly = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Calls::Group
|
} // namespace Calls::Group
|
||||||
|
|
|
@ -1166,10 +1166,11 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
||||||
.mute = mute,
|
.mute = mute,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
const auto changeVolume = crl::guard(this, [=](int volume) {
|
const auto changeVolume = crl::guard(this, [=](int volume, bool local) {
|
||||||
_changeVolumeRequests.fire(Group::VolumeRequest{
|
_changeVolumeRequests.fire(Group::VolumeRequest{
|
||||||
.user = user,
|
.user = user,
|
||||||
.volume = std::clamp(volume, 1, Group::kMaxVolume),
|
.volume = std::clamp(volume, 1, Group::kMaxVolume),
|
||||||
|
.locallyOnly = local,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1245,10 +1246,10 @@ base::unique_qptr<Ui::PopupMenu> MembersController::createRowContextMenu(
|
||||||
&& muteState != Row::State::MutedByMe) {
|
&& muteState != Row::State::MutedByMe) {
|
||||||
const auto volume = real->volume();
|
const auto volume = real->volume();
|
||||||
result->addAction(QString("Increase volume (%1%)").arg(volume / 100.), [=] {
|
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.), [=] {
|
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(
|
_members->toggleMuteRequests(
|
||||||
) | rpl::start_with_next([=](Group::MuteRequest request) {
|
) | rpl::start_with_next([=](Group::MuteRequest request) {
|
||||||
if (_call) {
|
if (_call) {
|
||||||
_call->toggleMute(request.user, request.mute);
|
_call->toggleMute(request);
|
||||||
}
|
}
|
||||||
}, _callLifetime);
|
}, _callLifetime);
|
||||||
|
|
||||||
_members->changeVolumeRequests(
|
_members->changeVolumeRequests(
|
||||||
) | rpl::start_with_next([=](Group::VolumeRequest request) {
|
) | rpl::start_with_next([=](Group::VolumeRequest request) {
|
||||||
if (_call) {
|
if (_call) {
|
||||||
_call->changeVolume(request.user, request.volume);
|
_call->changeVolume(request);
|
||||||
}
|
}
|
||||||
}, _callLifetime);
|
}, _callLifetime);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue