diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala index 2c6673797b8c578b457ad98c95702d3cbab817e3..ccbe0920841fad270ee0a8c0da704b6ee5d8c90d 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala @@ -16,10 +16,12 @@ trait MuteUserCmdMsgHdlr { for { u <- VoiceUsers.findWithIntId(liveMeeting.voiceUsers, msg.body.userId) } yield { - log.info("Send mute user request. meetingId=" + props.meetingProp.intId + " userId=" + u.intId + " user=" + u) - val event = MsgBuilder.buildMuteUserInVoiceConfSysMsg(props.meetingProp.intId, props.voiceProp.voiceConf, - u.voiceUserId, !u.muted) - outGW.send(event) + if (u.muted != msg.body.mute) { + log.info("Send mute user request. meetingId=" + props.meetingProp.intId + " userId=" + u.intId + " user=" + u) + val event = MsgBuilder.buildMuteUserInVoiceConfSysMsg(props.meetingProp.intId, props.voiceProp.voiceConf, + u.voiceUserId, msg.body.mute) + outGW.send(event) + } } } } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala index ac5259e45c2a86627941de52cb0524a0f4f4f0fe..d4da845f8730776208cffdefa637d5e8b1e0de07 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala @@ -11,28 +11,29 @@ trait MuteAllExceptPresentersCmdMsgHdlr { val outGW: OutMsgRouter def handleMuteAllExceptPresentersCmdMsg(msg: MuteAllExceptPresentersCmdMsg) { - if (MeetingStatus2x.isMeetingMuted(liveMeeting.status)) { - MeetingStatus2x.unmuteMeeting(liveMeeting.status) - } else { - MeetingStatus2x.muteMeeting(liveMeeting.status) - } + if (msg.body.mute != MeetingStatus2x.isMeetingMuted(liveMeeting.status)) { + if (msg.body.mute) { + MeetingStatus2x.muteMeeting(liveMeeting.status) + } else { + MeetingStatus2x.unmuteMeeting(liveMeeting.status) + } - val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status) - val event = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy) + val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status) + val event = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy) - outGW.send(event) + outGW.send(event) - // I think the correct flow would be to find those who are presenters and exclude them - // from the list of voice users. The remaining, mute. - VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu => - if (!vu.listenOnly) { - Users2x.findWithIntId(liveMeeting.users2x, vu.intId) match { - case Some(u) => if (!u.presenter) muteUserInVoiceConf(vu, muted) - case None => muteUserInVoiceConf(vu, muted) + // I think the correct flow would be to find those who are presenters and exclude them + // from the list of voice users. The remaining, mute. + VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu => + if (!vu.listenOnly) { + Users2x.findWithIntId(liveMeeting.users2x, vu.intId) match { + case Some(u) => if (!u.presenter) muteUserInVoiceConf(vu, muted) + case None => muteUserInVoiceConf(vu, muted) + } } } } - } def usersWhoAreNotPresenter(): Vector[UserState] = { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala index 2329525967d7a86e0e876f50f371b5db6d96ce7b..1390ed84db7af006ed95d88e4ea25aaf5ed46566 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala @@ -37,20 +37,22 @@ trait MuteMeetingCmdMsgHdlr { } - if (MeetingStatus2x.isMeetingMuted(liveMeeting.status)) { - MeetingStatus2x.unmuteMeeting(liveMeeting.status) - } else { - MeetingStatus2x.muteMeeting(liveMeeting.status) - } + if (msg.body.mute != MeetingStatus2x.isMeetingMuted(liveMeeting.status)) { + if (msg.body.mute) { + MeetingStatus2x.muteMeeting(liveMeeting.status) + } else { + MeetingStatus2x.unmuteMeeting(liveMeeting.status) + } - val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status) - val meetingMutedEvent = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy) + val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status) + val meetingMutedEvent = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy) - outGW.send(meetingMutedEvent) + outGW.send(meetingMutedEvent) - VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu => - if (!vu.listenOnly) { - muteUserInVoiceConf(vu, muted) + VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu => + if (!vu.listenOnly) { + muteUserInVoiceConf(vu, muted) + } } } } diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala index d2de5ec711f8800e59dcc3ecd619b1f8ac6ae2ae..cdd11f2aa0105ccaf82a25fb09a432f06c0d42ec 100755 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala @@ -112,7 +112,7 @@ case class EjectUserFromVoiceCmdMsgBody(userId: String, ejectedBy: String) object MuteAllExceptPresentersCmdMsg { val NAME = "MuteAllExceptPresentersCmdMsg"} case class MuteAllExceptPresentersCmdMsg(header: BbbClientMsgHeader, body: MuteAllExceptPresentersCmdMsgBody) extends StandardMsg -case class MuteAllExceptPresentersCmdMsgBody(mutedBy: String) +case class MuteAllExceptPresentersCmdMsgBody(mutedBy: String, mute: Boolean) /** * Sent by client to mute all users except presenters in the voice conference. @@ -133,7 +133,7 @@ case class IsMeetingMutedRespMsgBody(muted: Boolean) object MuteUserCmdMsg { val NAME = "MuteUserCmdMsg"} case class MuteUserCmdMsg(header: BbbClientMsgHeader, body: MuteUserCmdMsgBody) extends StandardMsg -case class MuteUserCmdMsgBody(userId: String, mutedBy: String) +case class MuteUserCmdMsgBody(userId: String, mutedBy: String, mute: Boolean) /** * Sent to FS to get the users in the voice conference. @@ -165,7 +165,7 @@ case class GetUsersInVoiceConfSysMsgBody(voiceConf: String) object MuteMeetingCmdMsg { val NAME = "MuteMeetingCmdMsg" } case class MuteMeetingCmdMsg(header: BbbClientMsgHeader, body: MuteMeetingCmdMsgBody) extends StandardMsg -case class MuteMeetingCmdMsgBody(mutedBy: String) +case class MuteMeetingCmdMsgBody(mutedBy: String, mute: Boolean) /** * Send to all clients that meeting is muted. diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as index 55191ff04ce17a9de8a0f001d598f4d5b2c76050..ca4de961b3082292063a24e82c17961f76d77195 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as @@ -328,7 +328,7 @@ package org.bigbluebutton.modules.users.services var message:Object = { header: {name: "MuteMeetingCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()}, - body: {mutedBy: UsersUtil.getMyUserID()} + body: {mutedBy: UsersUtil.getMyUserID(), mute: mute} }; var _nc:ConnectionManager = BBB.initConnectionManager(); @@ -349,7 +349,7 @@ package org.bigbluebutton.modules.users.services var message:Object = { header: {name: "MuteAllExceptPresentersCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()}, - body: {mutedBy: UsersUtil.getMyUserID()} + body: {mutedBy: UsersUtil.getMyUserID(), mute: mute} }; var _nc:ConnectionManager = BBB.initConnectionManager(); @@ -370,7 +370,7 @@ package org.bigbluebutton.modules.users.services var message:Object = { header: {name: "MuteUserCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()}, - body: {userId: userid, mutedBy: UsersUtil.getMyUserID()} + body: {userId: userid, mutedBy: UsersUtil.getMyUserID(), mute: mute} }; var _nc:ConnectionManager = BBB.initConnectionManager();