fix(audio): only enforce hold on mute state mismatch if !muted
There's a routine that's supposed to enforce the channel hold state if mute and hold states are mismatched. This should only happen in case the user is unmuted and the channel is held to avoid leaving an user without inbound or outbound audio by accident. The routine currently checks for the oppositve scenario as well (muted=true,hold=false), which should not be enforced because of special scenarios (e.g.: audio-only breakout room transfers, which have their transparent LO mechanism disabled). Only enforce hold on muted state mismatch IF muted == false.
This commit is contained in:
parent
623c90b19f
commit
025942de5b
@ -12,7 +12,11 @@ trait ListenOnlyModeToggledInSfuEvtMsgHdlr {
|
|||||||
|
|
||||||
def handleListenOnlyModeToggledInSfuEvtMsg(msg: ListenOnlyModeToggledInSfuEvtMsg): Unit = {
|
def handleListenOnlyModeToggledInSfuEvtMsg(msg: ListenOnlyModeToggledInSfuEvtMsg): Unit = {
|
||||||
for {
|
for {
|
||||||
vu <- VoiceUsers.findWithIntId(liveMeeting.voiceUsers, msg.body.userId)
|
vu <- VoiceUsers.findWithIntIdAndCallerNum(
|
||||||
|
liveMeeting.voiceUsers,
|
||||||
|
msg.body.userId,
|
||||||
|
msg.body.callerNum
|
||||||
|
)
|
||||||
} yield {
|
} yield {
|
||||||
VoiceApp.holdChannelInVoiceConf(
|
VoiceApp.holdChannelInVoiceConf(
|
||||||
liveMeeting,
|
liveMeeting,
|
||||||
|
@ -546,9 +546,10 @@ object VoiceApp extends SystemConfiguration {
|
|||||||
hold
|
hold
|
||||||
) match {
|
) match {
|
||||||
case Some(vu) =>
|
case Some(vu) =>
|
||||||
// Mute vs hold state mismatch, enforce hold state again.
|
// Mute vs hold state mismatch. Enforce it if the user is unmuted,
|
||||||
// Mute state is the predominant one here.
|
// but hold is active, to avoid the user being unable to talk when
|
||||||
if (vu.muted != hold) {
|
// the channel is active again.
|
||||||
|
if (!vu.muted && vu.hold) {
|
||||||
toggleListenOnlyMode(
|
toggleListenOnlyMode(
|
||||||
liveMeeting,
|
liveMeeting,
|
||||||
outGW,
|
outGW,
|
||||||
|
@ -15,6 +15,10 @@ object VoiceUsers {
|
|||||||
users.toVector.find(u => u.uuid == uuid && u.intId == intId)
|
users.toVector.find(u => u.uuid == uuid && u.intId == intId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def findWithIntIdAndCallerNum(users: VoiceUsers, intId: String, callerNum: String): Option[VoiceUserState] = {
|
||||||
|
users.toVector.find(u => u.callerNum == callerNum && u.intId == intId)
|
||||||
|
}
|
||||||
|
|
||||||
def findAll(users: VoiceUsers): Vector[VoiceUserState] = users.toVector
|
def findAll(users: VoiceUsers): Vector[VoiceUserState] = users.toVector
|
||||||
|
|
||||||
def findAllNonListenOnlyVoiceUsers(users: VoiceUsers): Vector[VoiceUserState] = users.toVector.filter(u => u.listenOnly == false)
|
def findAllNonListenOnlyVoiceUsers(users: VoiceUsers): Vector[VoiceUserState] = users.toVector.filter(u => u.listenOnly == false)
|
||||||
|
Loading…
Reference in New Issue
Block a user