mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +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(); })
|
, _connectingSoundTimer([=] { playConnectingSoundOnce(); })
|
||||||
, _listenersHidden(info.rtmp)
|
, _listenersHidden(info.rtmp)
|
||||||
, _rtmp(info.rtmp)
|
, _rtmp(info.rtmp)
|
||||||
|
, _rtmpVolume(Group::kDefaultVolume)
|
||||||
, _mediaDevices(CreateMediaDevices()) {
|
, _mediaDevices(CreateMediaDevices()) {
|
||||||
_muted.value(
|
_muted.value(
|
||||||
) | rpl::combine_previous(
|
) | rpl::combine_previous(
|
||||||
|
@ -1029,6 +1030,10 @@ rpl::producer<bool> GroupCall::emptyRtmpValue() const {
|
||||||
return _emptyRtmp.value();
|
return _emptyRtmp.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GroupCall::rtmpVolume() const {
|
||||||
|
return _rtmpVolume;
|
||||||
|
}
|
||||||
|
|
||||||
Calls::Group::RtmpInfo GroupCall::rtmpInfo() const {
|
Calls::Group::RtmpInfo GroupCall::rtmpInfo() const {
|
||||||
return { _rtmpUrl, _rtmpKey };
|
return { _rtmpUrl, _rtmpKey };
|
||||||
}
|
}
|
||||||
|
@ -1094,7 +1099,7 @@ void GroupCall::join(const MTPInputGroupCall &inputCall) {
|
||||||
update.was->ssrc,
|
update.was->ssrc,
|
||||||
GetAdditionalAudioSsrc(update.was->videoParams),
|
GetAdditionalAudioSsrc(update.was->videoParams),
|
||||||
});
|
});
|
||||||
} else {
|
} else if (!_rtmp) {
|
||||||
updateInstanceVolume(update.was, *update.now);
|
updateInstanceVolume(update.was, *update.now);
|
||||||
}
|
}
|
||||||
}, _lifetime);
|
}, _lifetime);
|
||||||
|
@ -2885,9 +2890,14 @@ void GroupCall::updateInstanceVolumes() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto &participants = real->participants();
|
if (_rtmp) {
|
||||||
for (const auto &participant : participants) {
|
const auto value = _rtmpVolume / float64(Group::kDefaultVolume);
|
||||||
updateInstanceVolume(std::nullopt, participant);
|
_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) {
|
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);
|
applyParticipantLocally(data.peer, data.mute, std::nullopt);
|
||||||
} else {
|
} else {
|
||||||
editParticipant(data.peer, data.mute, std::nullopt);
|
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) {
|
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);
|
applyParticipantLocally(data.peer, false, data.volume);
|
||||||
} else {
|
} else {
|
||||||
editParticipant(data.peer, false, data.volume);
|
editParticipant(data.peer, false, data.volume);
|
||||||
|
|
|
@ -236,6 +236,7 @@ public:
|
||||||
[[nodiscard]] bool listenersHidden() const;
|
[[nodiscard]] bool listenersHidden() const;
|
||||||
[[nodiscard]] bool emptyRtmp() const;
|
[[nodiscard]] bool emptyRtmp() const;
|
||||||
[[nodiscard]] rpl::producer<bool> emptyRtmpValue() const;
|
[[nodiscard]] rpl::producer<bool> emptyRtmpValue() const;
|
||||||
|
[[nodiscard]] int rtmpVolume() const;
|
||||||
|
|
||||||
[[nodiscard]] Group::RtmpInfo rtmpInfo() const;
|
[[nodiscard]] Group::RtmpInfo rtmpInfo() const;
|
||||||
|
|
||||||
|
@ -673,6 +674,7 @@ private:
|
||||||
bool _hadJoinedState = false;
|
bool _hadJoinedState = false;
|
||||||
bool _listenersHidden = false;
|
bool _listenersHidden = false;
|
||||||
bool _rtmp = false;
|
bool _rtmp = false;
|
||||||
|
int _rtmpVolume = 0;
|
||||||
|
|
||||||
std::unique_ptr<Webrtc::MediaDevices> _mediaDevices;
|
std::unique_ptr<Webrtc::MediaDevices> _mediaDevices;
|
||||||
QString _audioInputId;
|
QString _audioInputId;
|
||||||
|
|
|
@ -1190,9 +1190,8 @@ base::unique_qptr<Ui::PopupMenu> Members::Controller::createRowContextMenu(
|
||||||
const auto muteState = real->state();
|
const auto muteState = real->state();
|
||||||
const auto muted = (muteState == Row::State::Muted)
|
const auto muted = (muteState == Row::State::Muted)
|
||||||
|| (muteState == Row::State::RaisedHand);
|
|| (muteState == Row::State::RaisedHand);
|
||||||
const auto addCover = true;
|
const auto addCover = !_call->rtmp();
|
||||||
const auto addVolumeItem = !_call->rtmp()
|
const auto addVolumeItem = (!muted || isMe(participantPeer));
|
||||||
&& (!muted || isMe(participantPeer));
|
|
||||||
const auto admin = IsGroupCallAdmin(_peer, participantPeer);
|
const auto admin = IsGroupCallAdmin(_peer, participantPeer);
|
||||||
const auto session = &_peer->session();
|
const auto session = &_peer->session();
|
||||||
const auto getCurrentWindow = [=]() -> Window::SessionController* {
|
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())
|
&& (!isMe(participantPeer) || _peer->canManageGroupCall())
|
||||||
&& (participant->ssrc != 0
|
&& (participant->ssrc != 0
|
||||||
|| GetAdditionalAudioSsrc(participant->videoParams) != 0)) {
|
|| GetAdditionalAudioSsrc(participant->videoParams) != 0)) {
|
||||||
|
@ -1431,8 +1436,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|
||||||
|
|
||||||
auto mutesFromVolume = rpl::never<bool>() | rpl::type_erased();
|
auto mutesFromVolume = rpl::never<bool>() | rpl::type_erased();
|
||||||
|
|
||||||
const auto addVolumeItem = !_call->rtmp()
|
const auto addVolumeItem = (!muted || isMe(participantPeer));
|
||||||
&& (!muted || isMe(participantPeer));
|
|
||||||
if (addVolumeItem) {
|
if (addVolumeItem) {
|
||||||
auto otherParticipantStateValue
|
auto otherParticipantStateValue
|
||||||
= _call->otherParticipantStateValue(
|
= _call->otherParticipantStateValue(
|
||||||
|
@ -1444,7 +1448,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|
||||||
menu->menu(),
|
menu->menu(),
|
||||||
st::groupCallPopupVolumeMenu,
|
st::groupCallPopupVolumeMenu,
|
||||||
otherParticipantStateValue,
|
otherParticipantStateValue,
|
||||||
row->volume(),
|
_call->rtmp() ? _call->rtmpVolume() : row->volume(),
|
||||||
Group::kMaxVolume,
|
Group::kMaxVolume,
|
||||||
muted);
|
muted);
|
||||||
|
|
||||||
|
@ -1487,7 +1491,7 @@ void Members::Controller::addMuteActionsToContextMenu(
|
||||||
|
|
||||||
menu->addAction(std::move(volumeItem));
|
menu->addAction(std::move(volumeItem));
|
||||||
|
|
||||||
if (!isMe(participantPeer)) {
|
if (!_call->rtmp() && !isMe(participantPeer)) {
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -266,7 +266,9 @@ void SettingsBox(
|
||||||
const auto &settings = Core::App().settings();
|
const auto &settings = Core::App().settings();
|
||||||
|
|
||||||
const auto joinMuted = goodReal ? real->joinMuted() : false;
|
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 addCheck = (peer->canManageGroupCall() && canChangeJoinMuted);
|
||||||
|
|
||||||
const auto addDivider = [&] {
|
const auto addDivider = [&] {
|
||||||
|
|
|
@ -164,9 +164,6 @@ private:
|
||||||
void addNewMembers();
|
void addNewMembers();
|
||||||
void addDeleteContact();
|
void addDeleteContact();
|
||||||
|
|
||||||
void addChatActions(not_null<ChatData*> chat);
|
|
||||||
void addChannelActions(not_null<ChannelData*> channel);
|
|
||||||
|
|
||||||
not_null<SessionController*> _controller;
|
not_null<SessionController*> _controller;
|
||||||
Dialogs::EntryState _request;
|
Dialogs::EntryState _request;
|
||||||
PeerData *_peer = nullptr;
|
PeerData *_peer = nullptr;
|
||||||
|
|
Loading…
Add table
Reference in a new issue