mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Allow volume changing in RTMP stream context menu.
This commit is contained in:
parent
0529aea194
commit
616f4e4027
5 changed files with 39 additions and 18 deletions
|
@ -594,6 +594,7 @@ GroupCall::GroupCall(
|
|||
, _connectingSoundTimer([=] { playConnectingSoundOnce(); })
|
||||
, _listenersHidden(info.rtmp)
|
||||
, _rtmp(info.rtmp)
|
||||
, _rtmpVolume(Group::kDefaultVolume)
|
||||
, _mediaDevices(CreateMediaDevices()) {
|
||||
_muted.value(
|
||||
) | rpl::combine_previous(
|
||||
|
@ -1029,6 +1030,10 @@ rpl::producer<bool> GroupCall::emptyRtmpValue() const {
|
|||
return _emptyRtmp.value();
|
||||
}
|
||||
|
||||
int GroupCall::rtmpVolume() const {
|
||||
return _rtmpVolume;
|
||||
}
|
||||
|
||||
Calls::Group::RtmpInfo GroupCall::rtmpInfo() const {
|
||||
return { _rtmpUrl, _rtmpKey };
|
||||
}
|
||||
|
@ -1094,7 +1099,7 @@ void GroupCall::join(const MTPInputGroupCall &inputCall) {
|
|||
update.was->ssrc,
|
||||
GetAdditionalAudioSsrc(update.was->videoParams),
|
||||
});
|
||||
} else {
|
||||
} else if (!_rtmp) {
|
||||
updateInstanceVolume(update.was, *update.now);
|
||||
}
|
||||
}, _lifetime);
|
||||
|
@ -2885,9 +2890,14 @@ void GroupCall::updateInstanceVolumes() {
|
|||
return;
|
||||
}
|
||||
|
||||
const auto &participants = real->participants();
|
||||
for (const auto &participant : participants) {
|
||||
updateInstanceVolume(std::nullopt, participant);
|
||||
if (_rtmp) {
|
||||
const auto value = _rtmpVolume / float64(Group::kDefaultVolume);
|
||||
_instance->setVolume(1, value);
|
||||
} else {
|
||||
const auto &participants = real->participants();
|
||||
for (const auto &participant : participants) {
|
||||
updateInstanceVolume(std::nullopt, participant);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3283,7 +3293,10 @@ void GroupCall::setCurrentAudioDevice(bool input, const QString &deviceId) {
|
|||
}
|
||||
|
||||
void GroupCall::toggleMute(const Group::MuteRequest &data) {
|
||||
if (data.locallyOnly) {
|
||||
if (_rtmp) {
|
||||
_rtmpVolume = data.mute ? 0 : Group::kDefaultVolume;
|
||||
updateInstanceVolumes();
|
||||
} else if (data.locallyOnly) {
|
||||
applyParticipantLocally(data.peer, data.mute, std::nullopt);
|
||||
} else {
|
||||
editParticipant(data.peer, data.mute, std::nullopt);
|
||||
|
@ -3291,7 +3304,10 @@ void GroupCall::toggleMute(const Group::MuteRequest &data) {
|
|||
}
|
||||
|
||||
void GroupCall::changeVolume(const Group::VolumeRequest &data) {
|
||||
if (data.locallyOnly) {
|
||||
if (_rtmp) {
|
||||
_rtmpVolume = data.volume;
|
||||
updateInstanceVolumes();
|
||||
} else if (data.locallyOnly) {
|
||||
applyParticipantLocally(data.peer, false, data.volume);
|
||||
} else {
|
||||
editParticipant(data.peer, false, data.volume);
|
||||
|
|
|
@ -236,6 +236,7 @@ public:
|
|||
[[nodiscard]] bool listenersHidden() const;
|
||||
[[nodiscard]] bool emptyRtmp() const;
|
||||
[[nodiscard]] rpl::producer<bool> emptyRtmpValue() const;
|
||||
[[nodiscard]] int rtmpVolume() const;
|
||||
|
||||
[[nodiscard]] Group::RtmpInfo rtmpInfo() const;
|
||||
|
||||
|
@ -673,6 +674,7 @@ private:
|
|||
bool _hadJoinedState = false;
|
||||
bool _listenersHidden = false;
|
||||
bool _rtmp = false;
|
||||
int _rtmpVolume = 0;
|
||||
|
||||
std::unique_ptr<Webrtc::MediaDevices> _mediaDevices;
|
||||
QString _audioInputId;
|
||||
|
|
|
@ -1190,9 +1190,8 @@ base::unique_qptr<Ui::PopupMenu> Members::Controller::createRowContextMenu(
|
|||
const auto muteState = real->state();
|
||||
const auto muted = (muteState == Row::State::Muted)
|
||||
|| (muteState == Row::State::RaisedHand);
|
||||
const auto addCover = true;
|
||||
const auto addVolumeItem = !_call->rtmp()
|
||||
&& (!muted || isMe(participantPeer));
|
||||
const auto addCover = !_call->rtmp();
|
||||
const auto addVolumeItem = (!muted || isMe(participantPeer));
|
||||
const auto admin = IsGroupCallAdmin(_peer, participantPeer);
|
||||
const auto session = &_peer->session();
|
||||
const auto getCurrentWindow = [=]() -> Window::SessionController* {
|
||||
|
@ -1327,7 +1326,13 @@ base::unique_qptr<Ui::PopupMenu> Members::Controller::createRowContextMenu(
|
|||
}
|
||||
}
|
||||
|
||||
if (participant
|
||||
if (_call->rtmp()) {
|
||||
addMuteActionsToContextMenu(
|
||||
result,
|
||||
row->peer(),
|
||||
false,
|
||||
static_cast<Row*>(row.get()));
|
||||
} else if (participant
|
||||
&& (!isMe(participantPeer) || _peer->canManageGroupCall())
|
||||
&& (participant->ssrc != 0
|
||||
|| GetAdditionalAudioSsrc(participant->videoParams) != 0)) {
|
||||
|
@ -1431,8 +1436,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|
|||
|
||||
auto mutesFromVolume = rpl::never<bool>() | rpl::type_erased();
|
||||
|
||||
const auto addVolumeItem = !_call->rtmp()
|
||||
&& (!muted || isMe(participantPeer));
|
||||
const auto addVolumeItem = (!muted || isMe(participantPeer));
|
||||
if (addVolumeItem) {
|
||||
auto otherParticipantStateValue
|
||||
= _call->otherParticipantStateValue(
|
||||
|
@ -1444,7 +1448,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|
|||
menu->menu(),
|
||||
st::groupCallPopupVolumeMenu,
|
||||
otherParticipantStateValue,
|
||||
row->volume(),
|
||||
_call->rtmp() ? _call->rtmpVolume() : row->volume(),
|
||||
Group::kMaxVolume,
|
||||
muted);
|
||||
|
||||
|
@ -1487,7 +1491,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|
|||
|
||||
menu->addAction(std::move(volumeItem));
|
||||
|
||||
if (!isMe(participantPeer)) {
|
||||
if (!_call->rtmp() && !isMe(participantPeer)) {
|
||||
menu->addSeparator();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -266,7 +266,9 @@ void SettingsBox(
|
|||
const auto &settings = Core::App().settings();
|
||||
|
||||
const auto joinMuted = goodReal ? real->joinMuted() : false;
|
||||
const auto canChangeJoinMuted = (goodReal && real->canChangeJoinMuted());
|
||||
const auto canChangeJoinMuted = !rtmp
|
||||
&& goodReal
|
||||
&& real->canChangeJoinMuted();
|
||||
const auto addCheck = (peer->canManageGroupCall() && canChangeJoinMuted);
|
||||
|
||||
const auto addDivider = [&] {
|
||||
|
|
|
@ -164,9 +164,6 @@ private:
|
|||
void addNewMembers();
|
||||
void addDeleteContact();
|
||||
|
||||
void addChatActions(not_null<ChatData*> chat);
|
||||
void addChannelActions(not_null<ChannelData*> channel);
|
||||
|
||||
not_null<SessionController*> _controller;
|
||||
Dialogs::EntryState _request;
|
||||
PeerData *_peer = nullptr;
|
||||
|
|
Loading…
Add table
Reference in a new issue