Merge branch 'master' of https://github.com/bigbluebutton/bigbluebutton into meteor-ui
Conflicts: labs/meteor-client/app/client/globals.coffee
This commit is contained in:
commit
a2e96394ee
@ -22,6 +22,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bigbluebutton.conference.meeting.messaging.red5.ConnectionInvokerService;
|
import org.bigbluebutton.conference.meeting.messaging.red5.ConnectionInvokerService;
|
||||||
import org.bigbluebutton.conference.service.recorder.RecorderApplication;
|
import org.bigbluebutton.conference.service.recorder.RecorderApplication;
|
||||||
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
||||||
@ -112,25 +113,20 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
|
|||||||
String externalUserID = ((String) params[5]).toString();
|
String externalUserID = ((String) params[5]).toString();
|
||||||
String internalUserID = ((String) params[6]).toString();
|
String internalUserID = ((String) params[6]).toString();
|
||||||
|
|
||||||
Boolean locked = false;
|
|
||||||
if (params.length >= 7 && ((Boolean) params[7])) {
|
|
||||||
locked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Boolean muted = false;
|
Boolean muted = false;
|
||||||
if (params.length >= 8 && ((Boolean) params[8])) {
|
if (params.length >= 7 && ((Boolean) params[7])) {
|
||||||
muted = true;
|
muted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Boolean> lsMap = null;
|
Map<String, Boolean> lsMap = null;
|
||||||
if (params.length >= 9) {
|
if (params.length >= 8) {
|
||||||
try {
|
try {
|
||||||
lsMap = (Map<String, Boolean> ) params[9];
|
lsMap = (Map<String, Boolean> ) params[8];
|
||||||
} catch(Exception e){
|
} catch(Exception e){
|
||||||
lsMap = new HashMap<String, Boolean>();
|
lsMap = new HashMap<String, Boolean>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (record == true) {
|
if (record == true) {
|
||||||
recorderApplication.createRecordSession(room);
|
recorderApplication.createRecordSession(room);
|
||||||
}
|
}
|
||||||
@ -144,10 +140,12 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
|
|||||||
connection.setAttribute("USER_SESSION_ID", sessionId);
|
connection.setAttribute("USER_SESSION_ID", sessionId);
|
||||||
|
|
||||||
String debugInfo = "internalUserID=" + internalUserID + ",username=" + username + ",role=" + role + "," +
|
String debugInfo = "internalUserID=" + internalUserID + ",username=" + username + ",role=" + role + "," +
|
||||||
",voiceConf=" + voiceBridge + ",room=" + room + ",externalUserid=" + externalUserID;
|
",voiceConf=" + voiceBridge + ",room=" + room + ",externalUserid=" + externalUserID + ", muted =" + muted;
|
||||||
log.debug("User [{}] connected to room [{}]", debugInfo, room);
|
log.debug("User [{}] connected to room [{}]", debugInfo, room);
|
||||||
|
|
||||||
bbbGW.initLockSettings(room, locked, lsMap);
|
bbbGW.initLockSettings(room, lsMap);
|
||||||
|
|
||||||
|
bbbGW.initAudioSettings(room, internalUserID, muted);
|
||||||
|
|
||||||
String meetingId = bbbSession.getRoom();
|
String meetingId = bbbSession.getRoom();
|
||||||
|
|
||||||
|
@ -20,9 +20,10 @@
|
|||||||
package org.bigbluebutton.conference.service.chat;
|
package org.bigbluebutton.conference.service.chat;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
|
||||||
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
||||||
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
public class ChatApplication {
|
public class ChatApplication {
|
||||||
|
@ -20,6 +20,7 @@ package org.bigbluebutton.conference.service.lock;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.bigbluebutton.conference.BigBlueButtonSession;
|
import org.bigbluebutton.conference.BigBlueButtonSession;
|
||||||
import org.bigbluebutton.conference.Constants;
|
import org.bigbluebutton.conference.Constants;
|
||||||
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
||||||
@ -66,15 +67,6 @@ public class LockService {
|
|||||||
bbbInGW.sendLockSettings(meetingId, userId, newSettings);
|
bbbInGW.sendLockSettings(meetingId, userId, newSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method called from client on connect to know if the room is locked or not
|
|
||||||
* */
|
|
||||||
public void isRoomLocked(){
|
|
||||||
String meetingId = getBbbSession().getRoom();
|
|
||||||
String userId = getMyUserId();
|
|
||||||
bbbInGW.isMeetingLocked(meetingId, userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method locks (or unlocks), based on lock parameter
|
* This method locks (or unlocks), based on lock parameter
|
||||||
* all users but the users listed in array dontLockTheseUsers
|
* all users but the users listed in array dontLockTheseUsers
|
||||||
@ -87,10 +79,15 @@ public class LockService {
|
|||||||
/**
|
/**
|
||||||
* This method locks or unlocks a specific user
|
* This method locks or unlocks a specific user
|
||||||
* */
|
* */
|
||||||
public void setUserLock(Boolean lock, String internalUserID){
|
public void setUserLock(Map<String, Object> msg) {
|
||||||
log.debug("setUserLock ({}, {}, {})", new Object[] { lock, internalUserID });
|
String meetingID = Red5.getConnectionLocal().getScope().getName();
|
||||||
String meetingId = getBbbSession().getRoom();
|
String requesterID = getBbbSession().getInternalUserID();
|
||||||
bbbInGW.lockUser(meetingId, lock, internalUserID);
|
|
||||||
|
Boolean lock = (Boolean) msg.get("lock");
|
||||||
|
String userId = (String) msg.get("userId");
|
||||||
|
|
||||||
|
log.info("setUserLock ({}, {})", new Object[] { lock, userId });
|
||||||
|
bbbInGW.lockUser(meetingID, requesterID, lock, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMyUserId() {
|
public String getMyUserId() {
|
||||||
|
@ -18,16 +18,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.bigbluebutton.conference.service.recorder;
|
package org.bigbluebutton.conference.service.recorder;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.bigbluebutton.service.recording.RedisListRecorder;
|
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.BlockingQueue;
|
import java.util.concurrent.BlockingQueue;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
|
import org.bigbluebutton.service.recording.RedisListRecorder;
|
||||||
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* The RecorderApplication class is used for setting the record module
|
* The RecorderApplication class is used for setting the record module
|
||||||
|
@ -2,14 +2,11 @@ package org.bigbluebutton.conference.service.voice;
|
|||||||
|
|
||||||
import org.bigbluebutton.conference.service.messaging.MessagingConstants;
|
import org.bigbluebutton.conference.service.messaging.MessagingConstants;
|
||||||
import org.bigbluebutton.conference.service.messaging.redis.MessageHandler;
|
import org.bigbluebutton.conference.service.messaging.redis.MessageHandler;
|
||||||
import com.google.gson.JsonParser;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
public class VoiceMessageListener implements MessageHandler{
|
public class VoiceMessageListener implements MessageHandler{
|
||||||
|
|
||||||
private IBigBlueButtonInGW bbbGW;
|
private IBigBlueButtonInGW bbbGW;
|
||||||
|
@ -17,14 +17,14 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.bigbluebutton.conference.service.voice;
|
package org.bigbluebutton.conference.service.voice;
|
||||||
import org.slf4j.Logger;
|
import java.util.Map;
|
||||||
import org.red5.server.api.Red5;
|
|
||||||
import org.bigbluebutton.conference.BigBlueButtonSession;
|
import org.bigbluebutton.conference.BigBlueButtonSession;
|
||||||
import org.bigbluebutton.conference.Constants;
|
import org.bigbluebutton.conference.Constants;
|
||||||
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
import org.bigbluebutton.core.api.IBigBlueButtonInGW;
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
import java.util.List;
|
import org.red5.server.api.Red5;
|
||||||
import java.util.Map;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
public class VoiceService {
|
public class VoiceService {
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ public class VoiceService {
|
|||||||
|
|
||||||
String meetingID = Red5.getConnectionLocal().getScope().getName();
|
String meetingID = Red5.getConnectionLocal().getScope().getName();
|
||||||
String requesterID = getBbbSession().getInternalUserID();
|
String requesterID = getBbbSession().getInternalUserID();
|
||||||
bbbInGW.lockUser(meetingID, requesterID, userid, lock);
|
bbbInGW.lockMuteUser(meetingID, requesterID, userid, lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ejectUserFromVoice(Map<String, Object> msg) {
|
public void ejectUserFromVoice(Map<String, Object> msg) {
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.bigbluebutton.conference.service.whiteboard;
|
package org.bigbluebutton.conference.service.whiteboard;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.bigbluebutton.conference.BigBlueButtonSession;
|
import org.bigbluebutton.conference.BigBlueButtonSession;
|
||||||
import org.bigbluebutton.conference.Constants;
|
import org.bigbluebutton.conference.Constants;
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
@ -68,7 +68,7 @@ public class WhiteboardService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String pointsToString(ArrayList<Double> points){
|
/*private String pointsToString(ArrayList<Double> points){
|
||||||
String datapoints = "";
|
String datapoints = "";
|
||||||
for (Double i : points) {
|
for (Double i : points) {
|
||||||
datapoints += i + ",";
|
datapoints += i + ",";
|
||||||
@ -79,7 +79,7 @@ public class WhiteboardService {
|
|||||||
|
|
||||||
// application.sendShape(shape, type, color, thickness, fill, fillColor, transparency, id, status);
|
// application.sendShape(shape, type, color, thickness, fill, fillColor, transparency, id, status);
|
||||||
|
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public void requestAnnotationHistory(Map<String, Object> message) {
|
public void requestAnnotationHistory(Map<String, Object> message) {
|
||||||
log.info("WhiteboardApplication - requestAnnotationHistory");
|
log.info("WhiteboardApplication - requestAnnotationHistory");
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package org.bigbluebutton.core.api;
|
package org.bigbluebutton.core.api;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
@ -19,12 +18,10 @@ public interface IBigBlueButtonInGW {
|
|||||||
|
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
void initLockSettings(String meetingID, boolean locked, Map<String, Boolean> settings);
|
void initLockSettings(String meetingID, Map<String, Boolean> settings);
|
||||||
void sendLockSettings(String meetingID, String userId, Map<String, Boolean> settings);
|
void sendLockSettings(String meetingID, String userId, Map<String, Boolean> settings);
|
||||||
void getLockSettings(String meetingId, String userId);
|
void getLockSettings(String meetingId, String userId);
|
||||||
void isMeetingLocked(String meetingId, String userId);
|
void lockUser(String meetingId, String requesterID, boolean lock, String internalUserID);
|
||||||
void lockAllUsers(String meetingId, boolean lock, ArrayList<String> dontLockTheseUsers);
|
|
||||||
void lockUser(String meetingId, boolean lock, String internalUserID);
|
|
||||||
|
|
||||||
|
|
||||||
// Users
|
// Users
|
||||||
@ -46,11 +43,12 @@ public interface IBigBlueButtonInGW {
|
|||||||
void userDisconnectedFromGlobalAudio(String voiceConf, String userid, String name);
|
void userDisconnectedFromGlobalAudio(String voiceConf, String userid, String name);
|
||||||
|
|
||||||
// Voice
|
// Voice
|
||||||
|
void initAudioSettings(String meetingID, String requesterID, Boolean muted);
|
||||||
void muteAllExceptPresenter(String meetingID, String requesterID, Boolean mute);
|
void muteAllExceptPresenter(String meetingID, String requesterID, Boolean mute);
|
||||||
void muteAllUsers(String meetingID, String requesterID, Boolean mute);
|
void muteAllUsers(String meetingID, String requesterID, Boolean mute);
|
||||||
void isMeetingMuted(String meetingID, String requesterID);
|
void isMeetingMuted(String meetingID, String requesterID);
|
||||||
void muteUser(String meetingID, String requesterID, String userID, Boolean mute);
|
void muteUser(String meetingID, String requesterID, String userID, Boolean mute);
|
||||||
void lockUser(String meetingID, String requesterID, String userID, Boolean lock);
|
void lockMuteUser(String meetingID, String requesterID, String userID, Boolean lock);
|
||||||
void ejectUserFromVoice(String meetingID, String userId, String ejectedBy);
|
void ejectUserFromVoice(String meetingID, String userId, String ejectedBy);
|
||||||
void ejectUserFromMeeting(String meetingId, String userId, String ejectedBy);
|
void ejectUserFromMeeting(String meetingId, String userId, String ejectedBy);
|
||||||
void voiceUserJoined(String meetingId, String userId, String webUserId, String conference,
|
void voiceUserJoined(String meetingId, String userId, String webUserId, String conference,
|
||||||
|
@ -5,12 +5,13 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.bigbluebutton.webconference.voice.events.ConferenceEventListener;
|
import org.bigbluebutton.webconference.voice.events.ConferenceEventListener;
|
||||||
|
import org.bigbluebutton.webconference.voice.events.VoiceStartRecordingEvent;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceUserJoinedEvent;
|
import org.bigbluebutton.webconference.voice.events.VoiceUserJoinedEvent;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceUserLeftEvent;
|
import org.bigbluebutton.webconference.voice.events.VoiceUserLeftEvent;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceUserMutedEvent;
|
import org.bigbluebutton.webconference.voice.events.VoiceUserMutedEvent;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceUserTalkingEvent;
|
import org.bigbluebutton.webconference.voice.events.VoiceUserTalkingEvent;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceStartRecordingEvent;
|
|
||||||
import org.freeswitch.esl.client.IEslEventListener;
|
import org.freeswitch.esl.client.IEslEventListener;
|
||||||
import org.freeswitch.esl.client.transport.event.EslEvent;
|
import org.freeswitch.esl.client.transport.event.EslEvent;
|
||||||
import org.jboss.netty.channel.ExceptionEvent;
|
import org.jboss.netty.channel.ExceptionEvent;
|
||||||
@ -197,9 +198,9 @@ public class ESLEventListener implements IEslEventListener {
|
|||||||
return e.getEventHeaders().get("Path");
|
return e.getEventHeaders().get("Path");
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getRecordTimestampFromEvent(EslEvent e) {
|
/*private String getRecordTimestampFromEvent(EslEvent e) {
|
||||||
return e.getEventHeaders().get("Event-Date-Timestamp");
|
return e.getEventHeaders().get("Event-Date-Timestamp");
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public void setConferenceEventListener(ConferenceEventListener listener) {
|
public void setConferenceEventListener(ConferenceEventListener listener) {
|
||||||
this.conferenceEventListener = listener;
|
this.conferenceEventListener = listener;
|
||||||
|
@ -18,21 +18,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.bigbluebutton.webconference.voice.freeswitch.actions;
|
package org.bigbluebutton.webconference.voice.freeswitch.actions;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import javax.xml.parsers.SAXParser;
|
|
||||||
import javax.xml.parsers.SAXParserFactory;
|
|
||||||
|
|
||||||
import org.bigbluebutton.webconference.voice.events.ConferenceEventListener;
|
import org.bigbluebutton.webconference.voice.events.ConferenceEventListener;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceUserJoinedEvent;
|
|
||||||
import org.bigbluebutton.webconference.voice.freeswitch.response.ConferenceMember;
|
|
||||||
import org.bigbluebutton.webconference.voice.freeswitch.response.XMLResponseConferenceListParser;
|
|
||||||
import org.freeswitch.esl.client.transport.message.EslMessage;
|
import org.freeswitch.esl.client.transport.message.EslMessage;
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
public class BroadcastConferenceCommand extends FreeswitchCommand {
|
public class BroadcastConferenceCommand extends FreeswitchCommand {
|
||||||
|
|
||||||
|
@ -18,21 +18,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.bigbluebutton.webconference.voice.freeswitch.actions;
|
package org.bigbluebutton.webconference.voice.freeswitch.actions;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import javax.xml.parsers.SAXParser;
|
|
||||||
import javax.xml.parsers.SAXParserFactory;
|
|
||||||
|
|
||||||
import org.bigbluebutton.webconference.voice.events.ConferenceEventListener;
|
import org.bigbluebutton.webconference.voice.events.ConferenceEventListener;
|
||||||
import org.bigbluebutton.webconference.voice.events.VoiceUserJoinedEvent;
|
|
||||||
import org.bigbluebutton.webconference.voice.freeswitch.response.ConferenceMember;
|
|
||||||
import org.bigbluebutton.webconference.voice.freeswitch.response.XMLResponseConferenceListParser;
|
|
||||||
import org.freeswitch.esl.client.transport.message.EslMessage;
|
import org.freeswitch.esl.client.transport.message.EslMessage;
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
public class RecordConferenceCommand extends FreeswitchCommand {
|
public class RecordConferenceCommand extends FreeswitchCommand {
|
||||||
|
|
||||||
|
@ -18,20 +18,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.bigbluebutton.webconference.voice.freeswitch.response;
|
package org.bigbluebutton.webconference.voice.freeswitch.response;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import javax.xml.parsers.SAXParser;
|
|
||||||
import javax.xml.parsers.SAXParserFactory;
|
|
||||||
import org.red5.logging.Red5LoggerFactory;
|
import org.red5.logging.Red5LoggerFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
import org.xml.sax.helpers.DefaultHandler;
|
import org.xml.sax.helpers.DefaultHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,7 +15,7 @@ import org.bigbluebutton.core.apps.presentation.Page
|
|||||||
import org.bigbluebutton.core.apps.presentation.Presentation
|
import org.bigbluebutton.core.apps.presentation.Presentation
|
||||||
|
|
||||||
class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresentationsUtil) extends IBigBlueButtonInGW {
|
class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresentationsUtil) extends IBigBlueButtonInGW {
|
||||||
|
|
||||||
// Meeting
|
// Meeting
|
||||||
def createMeeting2(meetingID: String, externalMeetingID:String, meetingName: String, record: Boolean,
|
def createMeeting2(meetingID: String, externalMeetingID:String, meetingName: String, record: Boolean,
|
||||||
voiceBridge: String, duration: Long, autoStartRecording: Boolean,
|
voiceBridge: String, duration: Long, autoStartRecording: Boolean,
|
||||||
@ -82,18 +82,21 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresen
|
|||||||
val disablePrivChat = s.getOrElse("disablePrivateChat", false)
|
val disablePrivChat = s.getOrElse("disablePrivateChat", false)
|
||||||
val disablePubChat = s.getOrElse("disablePublicChat", false)
|
val disablePubChat = s.getOrElse("disablePublicChat", false)
|
||||||
val lockedLayout = s.getOrElse("lockedLayout", false)
|
val lockedLayout = s.getOrElse("lockedLayout", false)
|
||||||
|
var lockOnJoin = s.getOrElse("lockOnJoin", false)
|
||||||
|
|
||||||
val permissions = new Permissions(disableCam = disableCam,
|
val permissions = new Permissions(disableCam = disableCam,
|
||||||
disableMic = disableMic,
|
disableMic = disableMic,
|
||||||
disablePrivChat = disablePrivChat,
|
disablePrivChat = disablePrivChat,
|
||||||
disablePubChat = disablePubChat,
|
disablePubChat = disablePubChat,
|
||||||
lockedLayout = lockedLayout)
|
lockedLayout = lockedLayout,
|
||||||
|
lockOnJoin = lockOnJoin)
|
||||||
|
|
||||||
bbbGW.accept(new SetLockSettings(meetingID, userId, permissions))
|
bbbGW.accept(new SetLockSettings(meetingID, userId, permissions))
|
||||||
}
|
}
|
||||||
|
|
||||||
def initLockSettings(meetingID: String, locked: Boolean, settings: java.util.Map[String, java.lang.Boolean]) {
|
def initLockSettings(meetingID: String, settings: java.util.Map[String, java.lang.Boolean]) {
|
||||||
// Convert java.util.Map to scala.collection.immutable.Map
|
// Convert java.util.Map to scala.collection.immutable.Map
|
||||||
// settings.mapValues -> convaert java Map to scala mutable Map
|
// settings.mapValues -> convert java Map to scala mutable Map
|
||||||
// v => v.booleanValue() -> convert java Boolean to Scala Boolean
|
// v => v.booleanValue() -> convert java Boolean to Scala Boolean
|
||||||
// toMap -> converts from scala mutable map to scala immutable map
|
// toMap -> converts from scala mutable map to scala immutable map
|
||||||
val s = settings.mapValues (v => v.booleanValue() /* convert java Boolean to Scala Boolean */).toMap
|
val s = settings.mapValues (v => v.booleanValue() /* convert java Boolean to Scala Boolean */).toMap
|
||||||
@ -102,29 +105,29 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresen
|
|||||||
val disablePrivChat = s.getOrElse("disablePrivateChat", false)
|
val disablePrivChat = s.getOrElse("disablePrivateChat", false)
|
||||||
val disablePubChat = s.getOrElse("disablePublicChat", false)
|
val disablePubChat = s.getOrElse("disablePublicChat", false)
|
||||||
val lockedLayout = s.getOrElse("lockedLayout", false)
|
val lockedLayout = s.getOrElse("lockedLayout", false)
|
||||||
|
val lockOnJoin = s.getOrElse("lockOnJoin", false)
|
||||||
val permissions = new Permissions(disableCam = disableCam,
|
val permissions = new Permissions(disableCam = disableCam,
|
||||||
disableMic = disableMic,
|
disableMic = disableMic,
|
||||||
disablePrivChat = disablePrivChat,
|
disablePrivChat = disablePrivChat,
|
||||||
disablePubChat = disablePubChat,
|
disablePubChat = disablePubChat,
|
||||||
lockedLayout = lockedLayout)
|
lockedLayout = lockedLayout,
|
||||||
|
lockOnJoin = lockOnJoin)
|
||||||
|
|
||||||
bbbGW.accept(new InitLockSettings(meetingID, locked, permissions))
|
bbbGW.accept(new InitLockSettings(meetingID, permissions))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def initAudioSettings(meetingID: String, requesterID: String, muted: java.lang.Boolean) {
|
||||||
|
bbbGW.accept(new InitAudioSettings(meetingID, requesterID, muted.booleanValue()))
|
||||||
}
|
}
|
||||||
|
|
||||||
def getLockSettings(meetingId: String, userId: String) {
|
def getLockSettings(meetingId: String, userId: String) {
|
||||||
bbbGW.accept(new GetLockSettings(meetingId, userId))
|
bbbGW.accept(new GetLockSettings(meetingId, userId))
|
||||||
}
|
}
|
||||||
|
|
||||||
def isMeetingLocked(meetingId: String, userId: String) {
|
def lockUser(meetingId: String, requesterID: String, lock: Boolean, userId: String) {
|
||||||
bbbGW.accept(new IsMeetingLocked(meetingId, userId))
|
bbbGW.accept(new LockUserRequest(meetingId, requesterID, userId, lock))
|
||||||
}
|
|
||||||
|
|
||||||
def lockAllUsers(meetingId: String, lock: Boolean, dontLockTheseUsers: ArrayList[String]) {
|
|
||||||
bbbGW.accept(new LockAllUsers(meetingId, lock, dontLockTheseUsers.toSeq))
|
|
||||||
}
|
|
||||||
|
|
||||||
def lockUser(meetingId: String, lock: Boolean, userId: String) {
|
|
||||||
bbbGW.accept(new LockUser(meetingId, userId, lock))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def setRecordingStatus(meetingId: String, userId: String, recording: java.lang.Boolean) {
|
def setRecordingStatus(meetingId: String, userId: String, recording: java.lang.Boolean) {
|
||||||
@ -413,7 +416,7 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway, presUtil: PreuploadedPresen
|
|||||||
voiceGW.muteUser(meetingID, requesterID, userID, mute)
|
voiceGW.muteUser(meetingID, requesterID, userID, mute)
|
||||||
}
|
}
|
||||||
|
|
||||||
def lockUser(meetingID: String, requesterID: String, userID: String, lock: java.lang.Boolean) {
|
def lockMuteUser(meetingID: String, requesterID: String, userID: String, lock: java.lang.Boolean) {
|
||||||
voiceGW.lockUser(meetingID, requesterID, userID, lock)
|
voiceGW.lockUser(meetingID, requesterID, userID, lock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,11 +30,10 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
case msg: EndMeeting => handleEndMeeting(msg)
|
case msg: EndMeeting => handleEndMeeting(msg)
|
||||||
case msg: LockSetting => handleLockSetting(msg)
|
case msg: LockSetting => handleLockSetting(msg)
|
||||||
case msg: LockUser => handleLockUser(msg)
|
case msg: LockUser => handleLockUser(msg)
|
||||||
case msg: LockAllUsers => handleLockAllUsers(msg)
|
|
||||||
case msg: InitLockSettings => handleInitLockSettings(msg)
|
case msg: InitLockSettings => handleInitLockSettings(msg)
|
||||||
|
case msg: InitAudioSettings => handleInitAudioSettings(msg)
|
||||||
case msg: SetLockSettings => handleSetLockSettings(msg)
|
case msg: SetLockSettings => handleSetLockSettings(msg)
|
||||||
case msg: GetLockSettings => handleGetLockSettings(msg)
|
case msg: GetLockSettings => handleGetLockSettings(msg)
|
||||||
case msg: IsMeetingLocked => handleIsMeetingLocked(msg)
|
|
||||||
case msg: ValidateAuthToken => handleValidateAuthToken(msg)
|
case msg: ValidateAuthToken => handleValidateAuthToken(msg)
|
||||||
case msg: RegisterUser => handleRegisterUser(msg)
|
case msg: RegisterUser => handleRegisterUser(msg)
|
||||||
case msg: UserJoining => handleUserJoining(msg)
|
case msg: UserJoining => handleUserJoining(msg)
|
||||||
@ -114,9 +113,7 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
case msg: PermissionsSettingInitialized => handlePermissionsSettingInitialized(msg)
|
case msg: PermissionsSettingInitialized => handlePermissionsSettingInitialized(msg)
|
||||||
case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg)
|
case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg)
|
||||||
case msg: UserLocked => handleUserLocked(msg)
|
case msg: UserLocked => handleUserLocked(msg)
|
||||||
case msg: UsersLocked => handleUsersLocked(msg)
|
|
||||||
case msg: GetPermissionsSettingReply => handleGetPermissionsSettingReply(msg)
|
case msg: GetPermissionsSettingReply => handleGetPermissionsSettingReply(msg)
|
||||||
case msg: IsMeetingLockedReply => handleIsMeetingLockedReply(msg)
|
|
||||||
case msg: UserRegistered => handleUserRegistered(msg)
|
case msg: UserRegistered => handleUserRegistered(msg)
|
||||||
case msg: UserLeft => handleUserLeft(msg)
|
case msg: UserLeft => handleUserLeft(msg)
|
||||||
case msg: PresenterAssigned => handlePresenterAssigned(msg)
|
case msg: PresenterAssigned => handlePresenterAssigned(msg)
|
||||||
@ -333,32 +330,30 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
dispatcher.dispatch(buildJson(header, payload))
|
dispatcher.dispatch(buildJson(header, payload))
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleLockAllUsers(msg: LockAllUsers) {
|
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
|
||||||
payload.put(Constants.EXCEPT_USERS, msg.exceptUsers.toString())
|
|
||||||
payload.put(Constants.LOCK, msg.lock)
|
|
||||||
|
|
||||||
val header = new java.util.HashMap[String, Any]()
|
|
||||||
header.put(Constants.NAME, MessageNames.END_MEETING)
|
|
||||||
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
|
||||||
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
|
||||||
|
|
||||||
// println("***** DISPATCHING LOCK ALL USERS *****************")
|
|
||||||
dispatcher.dispatch(buildJson(header, payload))
|
|
||||||
}
|
|
||||||
|
|
||||||
private def handleInitLockSettings(msg: InitLockSettings) {
|
private def handleInitLockSettings(msg: InitLockSettings) {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
payload.put(Constants.SETTINGS, msg.settings.toString())
|
payload.put(Constants.SETTINGS, msg.settings.toString())
|
||||||
payload.put(Constants.LOCKED, msg.locked)
|
|
||||||
|
|
||||||
val header = new java.util.HashMap[String, Any]()
|
val header = new java.util.HashMap[String, Any]()
|
||||||
header.put(Constants.NAME, MessageNames.INIT_LOCK_SETTINGS)
|
header.put(Constants.NAME, MessageNames.INIT_LOCK_SETTINGS)
|
||||||
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
||||||
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
||||||
|
|
||||||
|
// println("***** DISPATCHING INIT LOCK SETTINGS *****************")
|
||||||
|
dispatcher.dispatch(buildJson(header, payload))
|
||||||
|
}
|
||||||
|
|
||||||
|
private def handleInitAudioSettings(msg: InitAudioSettings) {
|
||||||
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
|
payload.put(Constants.MUTED, msg.muted.toString())
|
||||||
|
|
||||||
|
val header = new java.util.HashMap[String, Any]()
|
||||||
|
header.put(Constants.NAME, MessageNames.INIT_AUDIO_SETTINGS)
|
||||||
|
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
||||||
|
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
||||||
|
|
||||||
// println("***** DISPATCHING INIT LOCK SETTINGS *****************")
|
// println("***** DISPATCHING INIT LOCK SETTINGS *****************")
|
||||||
dispatcher.dispatch(buildJson(header, payload))
|
dispatcher.dispatch(buildJson(header, payload))
|
||||||
}
|
}
|
||||||
@ -391,20 +386,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
dispatcher.dispatch(buildJson(header, payload))
|
dispatcher.dispatch(buildJson(header, payload))
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleIsMeetingLocked(msg: IsMeetingLocked) {
|
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
|
||||||
payload.put(Constants.USER_ID, msg.userId)
|
|
||||||
|
|
||||||
val header = new java.util.HashMap[String, Any]()
|
|
||||||
header.put(Constants.NAME, MessageNames.IS_MEETING_LOCKED)
|
|
||||||
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
|
||||||
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
|
||||||
|
|
||||||
// println("***** DISPATCHING IS MEETING LOCKED *****************")
|
|
||||||
dispatcher.dispatch(buildJson(header, payload))
|
|
||||||
}
|
|
||||||
|
|
||||||
private def handleValidateAuthToken(msg: ValidateAuthToken) {
|
private def handleValidateAuthToken(msg: ValidateAuthToken) {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
@ -1455,7 +1436,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
private def handlePermissionsSettingInitialized(msg: PermissionsSettingInitialized) {
|
private def handlePermissionsSettingInitialized(msg: PermissionsSettingInitialized) {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
payload.put(Constants.LOCKED, msg.locked)
|
|
||||||
payload.put(Constants.SETTINGS, msg.permissions.toString()) //#todo not tested
|
payload.put(Constants.SETTINGS, msg.permissions.toString()) //#todo not tested
|
||||||
|
|
||||||
val header = new java.util.HashMap[String, Any]()
|
val header = new java.util.HashMap[String, Any]()
|
||||||
@ -1496,21 +1476,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
dispatcher.dispatch(buildJson(header, payload))
|
dispatcher.dispatch(buildJson(header, payload))
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleUsersLocked(msg: UsersLocked) {
|
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
|
||||||
payload.put(Constants.EXCEPT_USERS, msg.exceptUsers.toString())
|
|
||||||
payload.put(Constants.LOCKED, msg.lock)
|
|
||||||
|
|
||||||
val header = new java.util.HashMap[String, Any]()
|
|
||||||
header.put(Constants.NAME, MessageNames.USERS_LOCKED)
|
|
||||||
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
|
||||||
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
|
||||||
|
|
||||||
// println("***** DISPATCHING USERS LOCKED *****************")
|
|
||||||
dispatcher.dispatch(buildJson(header, payload))
|
|
||||||
}
|
|
||||||
|
|
||||||
private def handleGetPermissionsSettingReply(msg: GetPermissionsSettingReply) {
|
private def handleGetPermissionsSettingReply(msg: GetPermissionsSettingReply) {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
@ -1524,20 +1489,6 @@ class CollectorActor(dispatcher: IDispatcher) extends Actor {
|
|||||||
dispatcher.dispatch(buildJson(header, payload))
|
dispatcher.dispatch(buildJson(header, payload))
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleIsMeetingLockedReply(msg: IsMeetingLockedReply) {
|
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
|
||||||
payload.put(Constants.USER_ID, msg.userId)
|
|
||||||
|
|
||||||
val header = new java.util.HashMap[String, Any]()
|
|
||||||
header.put(Constants.NAME, MessageNames.IS_MEETING_LOCKED_REPLY)
|
|
||||||
header.put(Constants.TIMESTAMP, TimestampGenerator.generateTimestamp)
|
|
||||||
header.put(Constants.CURRENT_TIME, TimestampGenerator.getCurrentTime)
|
|
||||||
|
|
||||||
// println("***** DISPATCHING IS MEETING LOCKED REPLY *****************")
|
|
||||||
dispatcher.dispatch(buildJson(header, payload))
|
|
||||||
}
|
|
||||||
|
|
||||||
private def handleUserRegistered(msg: UserRegistered) {
|
private def handleUserRegistered(msg: UserRegistered) {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
|
@ -25,6 +25,7 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee
|
|||||||
with PollApp with LayoutApp with ChatApp
|
with PollApp with LayoutApp with ChatApp
|
||||||
with WhiteboardApp with LogHelper {
|
with WhiteboardApp with LogHelper {
|
||||||
|
|
||||||
|
var audioSettingsInited = false
|
||||||
var permissionsInited = false
|
var permissionsInited = false
|
||||||
var permissions = new Permissions()
|
var permissions = new Permissions()
|
||||||
var recording = false;
|
var recording = false;
|
||||||
@ -87,7 +88,9 @@ class MeetingActor(val meetingID: String, val externalMeetingID: String, val mee
|
|||||||
case msg: MuteUserRequest => handleMuteUserRequest(msg)
|
case msg: MuteUserRequest => handleMuteUserRequest(msg)
|
||||||
case msg: EjectUserFromVoiceRequest => handleEjectUserRequest(msg)
|
case msg: EjectUserFromVoiceRequest => handleEjectUserRequest(msg)
|
||||||
case msg: SetLockSettings => handleSetLockSettings(msg)
|
case msg: SetLockSettings => handleSetLockSettings(msg)
|
||||||
|
case msg: LockUserRequest => handleLockUserRequest(msg)
|
||||||
case msg: InitLockSettings => handleInitLockSettings(msg)
|
case msg: InitLockSettings => handleInitLockSettings(msg)
|
||||||
|
case msg: InitAudioSettings => handleInitAudioSettings(msg)
|
||||||
case msg: GetChatHistoryRequest => handleGetChatHistoryRequest(msg)
|
case msg: GetChatHistoryRequest => handleGetChatHistoryRequest(msg)
|
||||||
case msg: SendPublicMessageRequest => handleSendPublicMessageRequest(msg)
|
case msg: SendPublicMessageRequest => handleSendPublicMessageRequest(msg)
|
||||||
case msg: SendPrivateMessageRequest => handleSendPrivateMessageRequest(msg)
|
case msg: SendPrivateMessageRequest => handleSendPrivateMessageRequest(msg)
|
||||||
|
@ -51,15 +51,9 @@ case class LockUser(
|
|||||||
meetingID: String,
|
meetingID: String,
|
||||||
userId: String,
|
userId: String,
|
||||||
lock: Boolean) extends InMessage
|
lock: Boolean) extends InMessage
|
||||||
|
|
||||||
case class LockAllUsers(
|
|
||||||
meetingID: String,
|
|
||||||
lock: Boolean,
|
|
||||||
exceptUsers: Seq[String]) extends InMessage
|
|
||||||
|
|
||||||
case class InitLockSettings(
|
case class InitLockSettings(
|
||||||
meetingID: String,
|
meetingID: String,
|
||||||
locked: Boolean,
|
|
||||||
settings: Permissions) extends InMessage
|
settings: Permissions) extends InMessage
|
||||||
|
|
||||||
case class SetLockSettings(
|
case class SetLockSettings(
|
||||||
@ -73,12 +67,6 @@ case class GetLockSettings(
|
|||||||
userId: String
|
userId: String
|
||||||
) extends InMessage
|
) extends InMessage
|
||||||
|
|
||||||
case class IsMeetingLocked(
|
|
||||||
meetingID: String,
|
|
||||||
userId: String
|
|
||||||
) extends InMessage
|
|
||||||
|
|
||||||
|
|
||||||
// Users
|
// Users
|
||||||
case class ValidateAuthToken(
|
case class ValidateAuthToken(
|
||||||
meetingID: String,
|
meetingID: String,
|
||||||
@ -393,6 +381,11 @@ case class PresentationConversionCompleted(
|
|||||||
) extends InMessage
|
) extends InMessage
|
||||||
|
|
||||||
// Voice
|
// Voice
|
||||||
|
case class InitAudioSettings(
|
||||||
|
meetingID: String,
|
||||||
|
requesterID: String,
|
||||||
|
muted: Boolean) extends InMessage
|
||||||
|
|
||||||
case class SendVoiceUsersRequest(
|
case class SendVoiceUsersRequest(
|
||||||
meetingID: String,
|
meetingID: String,
|
||||||
requesterID: String) extends InMessage
|
requesterID: String) extends InMessage
|
||||||
|
@ -9,6 +9,7 @@ object MessageNames {
|
|||||||
val LOCK_SETTING = "lock_setting_request"
|
val LOCK_SETTING = "lock_setting_request"
|
||||||
val LOCK_USER = "lock_user_request"
|
val LOCK_USER = "lock_user_request"
|
||||||
val INIT_LOCK_SETTINGS = "init_lock_settings"
|
val INIT_LOCK_SETTINGS = "init_lock_settings"
|
||||||
|
val INIT_AUDIO_SETTINGS = "init_audio_settings"
|
||||||
val SET_LOCK_SETTINGS = "set_lock_settings"
|
val SET_LOCK_SETTINGS = "set_lock_settings"
|
||||||
val GET_LOCK_SETTINGS = "get_lock_settings"
|
val GET_LOCK_SETTINGS = "get_lock_settings"
|
||||||
val IS_MEETING_LOCKED = "is_meeting_locked"
|
val IS_MEETING_LOCKED = "is_meeting_locked"
|
||||||
|
@ -107,7 +107,6 @@ case object IsAliveMessage extends IOutMessage
|
|||||||
// Permissions
|
// Permissions
|
||||||
case class PermissionsSettingInitialized(
|
case class PermissionsSettingInitialized(
|
||||||
meetingID: String,
|
meetingID: String,
|
||||||
locked: Boolean,
|
|
||||||
permissions: Permissions,
|
permissions: Permissions,
|
||||||
applyTo: Array[UserVO],
|
applyTo: Array[UserVO],
|
||||||
version:String = Versions.V_0_0_1
|
version:String = Versions.V_0_0_1
|
||||||
@ -128,24 +127,12 @@ case class UserLocked(
|
|||||||
version:String = Versions.V_0_0_1
|
version:String = Versions.V_0_0_1
|
||||||
) extends IOutMessage
|
) extends IOutMessage
|
||||||
|
|
||||||
case class UsersLocked(
|
|
||||||
meetingID: String,
|
|
||||||
lock: Boolean,
|
|
||||||
exceptUsers: Seq[String],
|
|
||||||
version:String = Versions.V_0_0_1
|
|
||||||
) extends IOutMessage
|
|
||||||
|
|
||||||
case class GetPermissionsSettingReply(
|
case class GetPermissionsSettingReply(
|
||||||
meetingID: String,
|
meetingID: String,
|
||||||
userId: String,
|
userId: String,
|
||||||
version:String = Versions.V_0_0_1
|
version:String = Versions.V_0_0_1
|
||||||
) extends IOutMessage
|
) extends IOutMessage
|
||||||
|
|
||||||
case class IsMeetingLockedReply(
|
|
||||||
meetingID: String,
|
|
||||||
userId: String,
|
|
||||||
version:String = Versions.V_0_0_1
|
|
||||||
) extends IOutMessage
|
|
||||||
|
|
||||||
// Users
|
// Users
|
||||||
case class UserRegistered(
|
case class UserRegistered(
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package org.bigbluebutton.core.api
|
package org.bigbluebutton.core.api
|
||||||
|
|
||||||
|
import java.lang.Boolean
|
||||||
|
|
||||||
object Role extends Enumeration {
|
object Role extends Enumeration {
|
||||||
type Role = Value
|
type Role = Value
|
||||||
val MODERATOR = Value("MODERATOR")
|
val MODERATOR = Value("MODERATOR")
|
||||||
@ -36,7 +38,8 @@ case class Permissions(
|
|||||||
disableMic: Boolean = false,
|
disableMic: Boolean = false,
|
||||||
disablePrivChat: Boolean = false,
|
disablePrivChat: Boolean = false,
|
||||||
disablePubChat: Boolean = false,
|
disablePubChat: Boolean = false,
|
||||||
lockedLayout:Boolean = false
|
lockedLayout:Boolean = false,
|
||||||
|
lockOnJoin:Boolean = false
|
||||||
)
|
)
|
||||||
|
|
||||||
case class RegisteredUser (
|
case class RegisteredUser (
|
||||||
@ -70,8 +73,7 @@ case class UserVO(
|
|||||||
webcamStream: String,
|
webcamStream: String,
|
||||||
phoneUser: Boolean,
|
phoneUser: Boolean,
|
||||||
voiceUser: VoiceUser,
|
voiceUser: VoiceUser,
|
||||||
listenOnly: Boolean,
|
listenOnly: Boolean)
|
||||||
permissions: Permissions = new Permissions())
|
|
||||||
|
|
||||||
case class VoiceUser(userId: String,
|
case class VoiceUser(userId: String,
|
||||||
webUserId: String,
|
webUserId: String,
|
||||||
|
@ -153,43 +153,50 @@ trait UsersApp {
|
|||||||
case None => // do nothing
|
case None => // do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def handleLockUser(msg: LockUser) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
def handleLockAllUsers(msg: LockAllUsers) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
def handleGetLockSettings(msg: GetLockSettings) {
|
def handleGetLockSettings(msg: GetLockSettings) {
|
||||||
|
logger.info("Not implemented: handleGetLockSettings")
|
||||||
}
|
}
|
||||||
|
|
||||||
def handleIsMeetingLocked(msg: IsMeetingLocked) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
def handleSetLockSettings(msg: SetLockSettings) {
|
def handleSetLockSettings(msg: SetLockSettings) {
|
||||||
// println("*************** Received new lock settings ********************")
|
// println("*************** Received new lock settings ********************")
|
||||||
if (!permissionsEqual(msg.settings)) {
|
if (!permissionsEqual(msg.settings)) {
|
||||||
newPermissions(msg.settings)
|
newPermissions(msg.settings)
|
||||||
val au = affectedUsers(msg.settings)
|
outGW.send(new NewPermissionsSetting(meetingID, msg.setByUser, permissions, users.getUsers))
|
||||||
outGW.send(new NewPermissionsSetting(meetingID, msg.setByUser, permissions, au))
|
|
||||||
|
|
||||||
handleLockLayout(msg.settings.lockedLayout, msg.setByUser)
|
handleLockLayout(msg.settings.lockedLayout, msg.setByUser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def handleLockUserRequest(msg: LockUserRequest) {
|
||||||
|
users.getUser(msg.userID) match {
|
||||||
|
case Some(u) => {
|
||||||
|
val uvo = u.copy(locked=msg.lock)
|
||||||
|
users.addUser(uvo)
|
||||||
|
|
||||||
|
logger.info("Lock user: mid=[" + meetingID + "] uid=[" + u.userID + "] lock=[" + msg.lock + "]")
|
||||||
|
outGW.send(new UserLocked(meetingID, u.userID, msg.lock))
|
||||||
|
}
|
||||||
|
case None => {
|
||||||
|
logger.info("Could not find user to lock: mid=[" + meetingID + "] uid=[" + msg.userID + "] lock=[" + msg.lock + "]")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def handleInitLockSettings(msg: InitLockSettings) {
|
def handleInitLockSettings(msg: InitLockSettings) {
|
||||||
if (! permissionsInited) {
|
if (! permissionsInited) {
|
||||||
permissionsInited = true
|
permissionsInited = true
|
||||||
if (permissions != msg.settings || locked != msg.locked) {
|
newPermissions(msg.settings)
|
||||||
permissions = msg.settings
|
outGW.send(new PermissionsSettingInitialized(msg.meetingID, msg.settings, users.getUsers))
|
||||||
locked = msg.locked
|
}
|
||||||
val au = affectedUsers(msg.settings)
|
}
|
||||||
outGW.send(new PermissionsSettingInitialized(msg.meetingID, msg.locked, msg.settings, au))
|
|
||||||
}
|
def handleInitAudioSettings(msg: InitAudioSettings) {
|
||||||
|
if (! audioSettingsInited) {
|
||||||
|
audioSettingsInited = true
|
||||||
|
if(meetingMuted != msg.muted) {
|
||||||
|
handleMuteAllExceptPresenterRequest(new MuteAllExceptPresenterRequest(meetingID, msg.requesterID, msg.muted));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,19 +211,6 @@ trait UsersApp {
|
|||||||
au.toArray
|
au.toArray
|
||||||
}
|
}
|
||||||
|
|
||||||
def affectedUsers(settings: Permissions):Array[UserVO] = {
|
|
||||||
val au = ArrayBuffer[UserVO]()
|
|
||||||
|
|
||||||
users.getUsers foreach {u =>
|
|
||||||
val nu = u.copy(permissions=permissions)
|
|
||||||
users.addUser(nu)
|
|
||||||
if (! u.presenter && u.role != Role.MODERATOR) {
|
|
||||||
au += nu
|
|
||||||
}
|
|
||||||
}
|
|
||||||
au.toArray
|
|
||||||
}
|
|
||||||
|
|
||||||
def handleUserRaiseHand(msg: UserRaiseHand) {
|
def handleUserRaiseHand(msg: UserRaiseHand) {
|
||||||
users.getUser(msg.userId) foreach {user =>
|
users.getUser(msg.userId) foreach {user =>
|
||||||
val uvo = user.copy(raiseHand=true)
|
val uvo = user.copy(raiseHand=true)
|
||||||
@ -285,12 +279,12 @@ trait UsersApp {
|
|||||||
false, false, false, false)
|
false, false, false, false)
|
||||||
val uvo = new UserVO(msg.userID, ru.externId, ru.name,
|
val uvo = new UserVO(msg.userID, ru.externId, ru.name,
|
||||||
ru.role, raiseHand=false, presenter=false,
|
ru.role, raiseHand=false, presenter=false,
|
||||||
hasStream=false, locked=false, webcamStream="",
|
hasStream=false, locked=getInitialLockStatus(ru.role),
|
||||||
phoneUser=false, vu, listenOnly=false, permissions)
|
webcamStream="", phoneUser=false, vu, listenOnly=false)
|
||||||
|
|
||||||
users.addUser(uvo)
|
users.addUser(uvo)
|
||||||
|
|
||||||
logger.info("User joined meeting: mid=[" + meetingID + "] uid=[" + uvo.userID + "]")
|
logger.info("User joined meeting: mid=[" + meetingID + "] uid=[" + uvo.userID + "] role=[" + uvo.role + "] locked=[" + uvo.locked + "] permissions.lockOnJoin=[" + permissions.lockOnJoin + "] ")
|
||||||
outGW.send(new UserJoined(meetingID, recorded, uvo))
|
outGW.send(new UserJoined(meetingID, recorded, uvo))
|
||||||
|
|
||||||
outGW.send(new MeetingState(meetingID, recorded, uvo.userID, permissions, meetingMuted))
|
outGW.send(new MeetingState(meetingID, recorded, uvo.userID, permissions, meetingMuted))
|
||||||
@ -319,6 +313,10 @@ trait UsersApp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def getInitialLockStatus(role: Role.Role):Boolean = {
|
||||||
|
permissions.lockOnJoin && !role.equals(Role.MODERATOR)
|
||||||
|
}
|
||||||
|
|
||||||
def handleUserJoinedVoiceFromPhone(msg: VoiceUserJoined) = {
|
def handleUserJoinedVoiceFromPhone(msg: VoiceUserJoined) = {
|
||||||
val user = users.getUserWithVoiceUserId(msg.voiceUser.userId) match {
|
val user = users.getUserWithVoiceUserId(msg.voiceUser.userId) match {
|
||||||
case Some(user) => {
|
case Some(user) => {
|
||||||
@ -337,8 +335,8 @@ trait UsersApp {
|
|||||||
|
|
||||||
val uvo = new UserVO(webUserId, webUserId, msg.voiceUser.callerName,
|
val uvo = new UserVO(webUserId, webUserId, msg.voiceUser.callerName,
|
||||||
Role.VIEWER, raiseHand=false, presenter=false,
|
Role.VIEWER, raiseHand=false, presenter=false,
|
||||||
hasStream=false, locked=false, webcamStream="",
|
hasStream=false, locked=getInitialLockStatus(Role.VIEWER), webcamStream="",
|
||||||
phoneUser=true, vu, listenOnly=false, permissions)
|
phoneUser=true, vu, listenOnly=false)
|
||||||
|
|
||||||
users.addUser(uvo)
|
users.addUser(uvo)
|
||||||
logger.info("New user joined voice for user [" + uvo.name + "] userid=[" + msg.voiceUser.webUserId + "]")
|
logger.info("New user joined voice for user [" + uvo.name + "] userid=[" + msg.voiceUser.webUserId + "]")
|
||||||
@ -391,7 +389,7 @@ trait UsersApp {
|
|||||||
|
|
||||||
def handleVoiceUserMuted(msg: VoiceUserMuted) {
|
def handleVoiceUserMuted(msg: VoiceUserMuted) {
|
||||||
users.getUser(msg.userId) foreach {user =>
|
users.getUser(msg.userId) foreach {user =>
|
||||||
val talking = if (msg.muted) false else user.voiceUser.talking
|
val talking:Boolean = if (msg.muted) false else user.voiceUser.talking
|
||||||
val nv = user.voiceUser.copy(muted=msg.muted, talking=talking)
|
val nv = user.voiceUser.copy(muted=msg.muted, talking=talking)
|
||||||
val nu = user.copy(voiceUser=nv)
|
val nu = user.copy(voiceUser=nv)
|
||||||
users.addUser(nu)
|
users.addUser(nu)
|
||||||
|
@ -41,6 +41,7 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes
|
|||||||
case msg: UserRegistered => handleRegisteredUser(msg)
|
case msg: UserRegistered => handleRegisteredUser(msg)
|
||||||
case msg: UserListeningOnly => handleUserListeningOnly(msg)
|
case msg: UserListeningOnly => handleUserListeningOnly(msg)
|
||||||
case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg)
|
case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg)
|
||||||
|
case msg: UserLocked => handleUserLocked(msg)
|
||||||
case msg: MeetingMuted => handleMeetingMuted(msg)
|
case msg: MeetingMuted => handleMeetingMuted(msg)
|
||||||
case msg: MeetingState => handleMeetingState(msg)
|
case msg: MeetingState => handleMeetingState(msg)
|
||||||
|
|
||||||
@ -55,6 +56,7 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes
|
|||||||
args.put("disablePrivChat", perms.disablePrivChat:java.lang.Boolean);
|
args.put("disablePrivChat", perms.disablePrivChat:java.lang.Boolean);
|
||||||
args.put("disablePubChat", perms.disablePubChat:java.lang.Boolean);
|
args.put("disablePubChat", perms.disablePubChat:java.lang.Boolean);
|
||||||
args.put("lockedLayout", perms.lockedLayout:java.lang.Boolean);
|
args.put("lockedLayout", perms.lockedLayout:java.lang.Boolean);
|
||||||
|
args.put("lockOnJoin", perms.lockOnJoin:java.lang.Boolean);
|
||||||
args
|
args
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,16 +85,7 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes
|
|||||||
wuser.put("phoneUser", user.phoneUser:java.lang.Boolean)
|
wuser.put("phoneUser", user.phoneUser:java.lang.Boolean)
|
||||||
wuser.put("voiceUser", vuser)
|
wuser.put("voiceUser", vuser)
|
||||||
wuser.put("listenOnly", user.listenOnly:java.lang.Boolean)
|
wuser.put("listenOnly", user.listenOnly:java.lang.Boolean)
|
||||||
|
|
||||||
val permissions = new HashMap[String, Object]()
|
|
||||||
permissions.put("disableCam", user.permissions.disableCam:java.lang.Boolean)
|
|
||||||
permissions.put("disableMic", user.permissions.disableMic:java.lang.Boolean)
|
|
||||||
permissions.put("disablePrivChat", user.permissions.disablePrivChat:java.lang.Boolean)
|
|
||||||
permissions.put("disablePubChat", user.permissions.disablePubChat:java.lang.Boolean)
|
|
||||||
permissions.put("lockedLayout", user.permissions.lockedLayout:java.lang.Boolean)
|
|
||||||
|
|
||||||
wuser.put("permissions", permissions)
|
|
||||||
|
|
||||||
wuser
|
wuser
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +96,7 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes
|
|||||||
args.put("disablePrivChat", msg.permissions.disablePrivChat:java.lang.Boolean);
|
args.put("disablePrivChat", msg.permissions.disablePrivChat:java.lang.Boolean);
|
||||||
args.put("disablePubChat", msg.permissions.disablePubChat:java.lang.Boolean);
|
args.put("disablePubChat", msg.permissions.disablePubChat:java.lang.Boolean);
|
||||||
args.put("lockedLayout", msg.permissions.lockedLayout:java.lang.Boolean);
|
args.put("lockedLayout", msg.permissions.lockedLayout:java.lang.Boolean);
|
||||||
|
args.put("lockOnJoin", msg.permissions.lockOnJoin:java.lang.Boolean);
|
||||||
|
|
||||||
var users = new ArrayList[java.util.HashMap[String, Object]];
|
var users = new ArrayList[java.util.HashMap[String, Object]];
|
||||||
msg.applyTo.foreach(uvo => {
|
msg.applyTo.foreach(uvo => {
|
||||||
@ -120,6 +114,20 @@ class UsersClientMessageSender(service: ConnectionInvokerService) extends OutMes
|
|||||||
service.sendMessage(m);
|
service.sendMessage(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def handleUserLocked(msg: UserLocked) {
|
||||||
|
val args = new java.util.HashMap[String, Object]();
|
||||||
|
args.put("meetingID", msg.meetingID);
|
||||||
|
args.put("user", msg.userId)
|
||||||
|
args.put("lock", msg.lock:java.lang.Boolean)
|
||||||
|
|
||||||
|
val message = new java.util.HashMap[String, Object]()
|
||||||
|
val gson = new Gson();
|
||||||
|
message.put("msg", gson.toJson(args))
|
||||||
|
|
||||||
|
val m = new BroadcastClientMessage(msg.meetingID, "userLocked", message);
|
||||||
|
service.sendMessage(m);
|
||||||
|
}
|
||||||
|
|
||||||
private def handleRegisteredUser(msg: UserRegistered) {
|
private def handleRegisteredUser(msg: UserRegistered) {
|
||||||
val args = new java.util.HashMap[String, Object]();
|
val args = new java.util.HashMap[String, Object]();
|
||||||
args.put("userId", msg.user.id);
|
args.put("userId", msg.user.id);
|
||||||
|
@ -15,9 +15,7 @@ class UsersEventRedisPublisher(service: MessageSender) extends OutMessageListene
|
|||||||
case msg: PermissionsSettingInitialized => handlePermissionsSettingInitialized(msg)
|
case msg: PermissionsSettingInitialized => handlePermissionsSettingInitialized(msg)
|
||||||
case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg)
|
case msg: NewPermissionsSetting => handleNewPermissionsSetting(msg)
|
||||||
case msg: UserLocked => handleUserLocked(msg)
|
case msg: UserLocked => handleUserLocked(msg)
|
||||||
case msg: UsersLocked => handleUsersLocked(msg)
|
|
||||||
case msg: GetPermissionsSettingReply => handleGetPermissionsSettingReply(msg)
|
case msg: GetPermissionsSettingReply => handleGetPermissionsSettingReply(msg)
|
||||||
case msg: IsMeetingLockedReply => handleIsMeetingLockedReply(msg)
|
|
||||||
case msg: UserRegistered => handleUserRegistered(msg)
|
case msg: UserRegistered => handleUserRegistered(msg)
|
||||||
case msg: UserLeft => handleUserLeft(msg)
|
case msg: UserLeft => handleUserLeft(msg)
|
||||||
case msg: PresenterAssigned => handlePresenterAssigned(msg)
|
case msg: PresenterAssigned => handlePresenterAssigned(msg)
|
||||||
@ -66,21 +64,11 @@ class UsersEventRedisPublisher(service: MessageSender) extends OutMessageListene
|
|||||||
val json = UsersMessageToJsonConverter.userLockedToJson(msg)
|
val json = UsersMessageToJsonConverter.userLockedToJson(msg)
|
||||||
service.send(MessagingConstants.FROM_MEETING_CHANNEL, json)
|
service.send(MessagingConstants.FROM_MEETING_CHANNEL, json)
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleUsersLocked(msg: UsersLocked) {
|
|
||||||
val json = UsersMessageToJsonConverter.usersLockedToJson(msg)
|
|
||||||
service.send(MessagingConstants.FROM_MEETING_CHANNEL, json)
|
|
||||||
}
|
|
||||||
|
|
||||||
private def handleGetPermissionsSettingReply(msg: GetPermissionsSettingReply) {
|
private def handleGetPermissionsSettingReply(msg: GetPermissionsSettingReply) {
|
||||||
val json = UsersMessageToJsonConverter.getPermissionsSettingReplyToJson(msg)
|
val json = UsersMessageToJsonConverter.getPermissionsSettingReplyToJson(msg)
|
||||||
service.send(MessagingConstants.FROM_MEETING_CHANNEL, json)
|
service.send(MessagingConstants.FROM_MEETING_CHANNEL, json)
|
||||||
}
|
}
|
||||||
|
|
||||||
private def handleIsMeetingLockedReply(msg: IsMeetingLockedReply) {
|
|
||||||
val json = UsersMessageToJsonConverter.isMeetingLockedReplyToJson(msg)
|
|
||||||
service.send(MessagingConstants.FROM_MEETING_CHANNEL, json)
|
|
||||||
}
|
|
||||||
|
|
||||||
private def handleUserRegistered(msg: UserRegistered) {
|
private def handleUserRegistered(msg: UserRegistered) {
|
||||||
val json = UsersMessageToJsonConverter.userRegisteredToJson(msg)
|
val json = UsersMessageToJsonConverter.userRegisteredToJson(msg)
|
||||||
|
@ -24,15 +24,6 @@ object UsersMessageToJsonConverter {
|
|||||||
wuser += "phone_user" -> user.phoneUser
|
wuser += "phone_user" -> user.phoneUser
|
||||||
wuser += "listenOnly" -> user.listenOnly
|
wuser += "listenOnly" -> user.listenOnly
|
||||||
|
|
||||||
val permissions = new scala.collection.mutable.HashMap[String, Any]
|
|
||||||
permissions.put("disableCam", user.permissions.disableCam)
|
|
||||||
permissions.put("disableMic", user.permissions.disableMic)
|
|
||||||
permissions.put("disablePrivChat", user.permissions.disablePrivChat)
|
|
||||||
permissions.put("disablePubChat", user.permissions.disablePubChat)
|
|
||||||
permissions.put("lockedLayout", user.permissions.lockedLayout)
|
|
||||||
|
|
||||||
wuser.put("permissions", permissions)
|
|
||||||
|
|
||||||
val vuser = new scala.collection.mutable.HashMap[String, Any]
|
val vuser = new scala.collection.mutable.HashMap[String, Any]
|
||||||
vuser += "userid" -> user.voiceUser.userId
|
vuser += "userid" -> user.voiceUser.userId
|
||||||
vuser += "web_userid" -> user.voiceUser.webUserId
|
vuser += "web_userid" -> user.voiceUser.webUserId
|
||||||
@ -79,7 +70,6 @@ object UsersMessageToJsonConverter {
|
|||||||
def permissionsSettingInitializedToJson(msg: PermissionsSettingInitialized):String = {
|
def permissionsSettingInitializedToJson(msg: PermissionsSettingInitialized):String = {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
payload.put(Constants.LOCKED, msg.locked)
|
|
||||||
payload.put(Constants.SETTINGS, msg.permissions.toString()) //#todo not tested
|
payload.put(Constants.SETTINGS, msg.permissions.toString()) //#todo not tested
|
||||||
|
|
||||||
val header = Util.buildHeader(MessageNames.PERMISSION_SETTING_INITIALIZED, msg.version, None)
|
val header = Util.buildHeader(MessageNames.PERMISSION_SETTING_INITIALIZED, msg.version, None)
|
||||||
@ -90,10 +80,12 @@ object UsersMessageToJsonConverter {
|
|||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
payload.put("disableCam", msg.permissions.disableCam)
|
payload.put("disableCam", msg.permissions.disableCam)
|
||||||
payload.put("disableMic", msg.permissions.disableMic)
|
payload.put("disableMic", msg.permissions.disableMic)
|
||||||
payload.put("disablePrivChat", msg.permissions.disablePrivChat)
|
payload.put("disablePrivChat", msg.permissions.disablePrivChat)
|
||||||
payload.put("disablePubChat", msg.permissions.disablePubChat)
|
payload.put("disablePubChat", msg.permissions.disablePubChat)
|
||||||
|
payload.put("lockedLayout", msg.permissions.lockedLayout)
|
||||||
|
payload.put("lockOnJoin", msg.permissions.lockOnJoin)
|
||||||
|
|
||||||
val users = new java.util.ArrayList[java.util.Map[String, Any]]
|
val users = new java.util.ArrayList[java.util.Map[String, Any]]
|
||||||
msg.applyTo.foreach(uvo => {
|
msg.applyTo.foreach(uvo => {
|
||||||
users.add(userToMap(uvo))
|
users.add(userToMap(uvo))
|
||||||
@ -115,16 +107,6 @@ object UsersMessageToJsonConverter {
|
|||||||
Util.buildJson(header, payload)
|
Util.buildJson(header, payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
def usersLockedToJson(msg: UsersLocked):String = {
|
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
|
||||||
payload.put(Constants.EXCEPT_USERS, msg.exceptUsers.toString())
|
|
||||||
payload.put(Constants.LOCKED, msg.lock)
|
|
||||||
|
|
||||||
val header = Util.buildHeader(MessageNames.USERS_LOCKED, msg.version, None)
|
|
||||||
Util.buildJson(header, payload)
|
|
||||||
}
|
|
||||||
|
|
||||||
def getPermissionsSettingReplyToJson(msg: GetPermissionsSettingReply):String = {
|
def getPermissionsSettingReplyToJson(msg: GetPermissionsSettingReply):String = {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
payload.put(Constants.MEETING_ID, msg.meetingID)
|
||||||
@ -133,15 +115,6 @@ object UsersMessageToJsonConverter {
|
|||||||
val header = Util.buildHeader(MessageNames.GET_PERMISSION_SETTINGS_REPLY, msg.version, None)
|
val header = Util.buildHeader(MessageNames.GET_PERMISSION_SETTINGS_REPLY, msg.version, None)
|
||||||
Util.buildJson(header, payload)
|
Util.buildJson(header, payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
def isMeetingLockedReplyToJson(msg: IsMeetingLockedReply):String = {
|
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
|
||||||
payload.put(Constants.MEETING_ID, msg.meetingID)
|
|
||||||
payload.put(Constants.USER_ID, msg.userId)
|
|
||||||
|
|
||||||
val header = Util.buildHeader(MessageNames.IS_MEETING_LOCKED_REPLY, msg.version, None)
|
|
||||||
Util.buildJson(header, payload)
|
|
||||||
}
|
|
||||||
|
|
||||||
def userRegisteredToJson(msg: UserRegistered):String = {
|
def userRegisteredToJson(msg: UserRegistered):String = {
|
||||||
val payload = new java.util.HashMap[String, Any]()
|
val payload = new java.util.HashMap[String, Any]()
|
||||||
|
@ -14,14 +14,13 @@ class UsersModelTests {
|
|||||||
"Asyong Aksaya", "+639175558624",
|
"Asyong Aksaya", "+639175558624",
|
||||||
joined = true, locked = false,
|
joined = true, locked = false,
|
||||||
muted = false, talking = false)
|
muted = false, talking = false)
|
||||||
val perm = new Permissions
|
|
||||||
|
val userVo = new UserVO("user1", userID="user1", externUserID = "euser1", name = "Asyong Aksaya",
|
||||||
val userVo = new UserVO("user1", "euser1", name = "Asyong Aksaya",
|
|
||||||
role = MODERATOR, raiseHand = false,
|
role = MODERATOR, raiseHand = false,
|
||||||
presenter = true, hasStream = false,
|
presenter = true, hasStream = false,
|
||||||
locked = false, webcamStream = "",
|
locked = false, webcamStream = "",
|
||||||
phoneUser = false, voiceUser = voiceUser,
|
phoneUser = false, voiceUser = voiceUser,
|
||||||
listenOnly = false, permissions = perm)
|
listenOnly = false)
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
def setUp() {
|
def setUp() {
|
||||||
|
@ -603,4 +603,5 @@ bbb.lockSettings.microphone = Microphone
|
|||||||
bbb.lockSettings.layout = Layout
|
bbb.lockSettings.layout = Layout
|
||||||
bbb.lockSettings.title=Lock Viewers
|
bbb.lockSettings.title=Lock Viewers
|
||||||
bbb.lockSettings.feature=Feature
|
bbb.lockSettings.feature=Feature
|
||||||
bbb.lockSettings.enabled=Locked
|
bbb.lockSettings.locked=Locked
|
||||||
|
bbb.lockSettings.lockOnJoin=Lock On Join
|
||||||
|
9
bigbluebutton-client/locale/pt_BR/bbbResources.properties
Normal file → Executable file
9
bigbluebutton-client/locale/pt_BR/bbbResources.properties
Normal file → Executable file
@ -130,7 +130,6 @@ bbb.users.settings.lowerAllHands = Baixar todas as mãos
|
|||||||
bbb.users.raiseHandBtn.toolTip = Levantar a mão
|
bbb.users.raiseHandBtn.toolTip = Levantar a mão
|
||||||
bbb.users.raiseHandBtn.toolTip2 = Abaixar a mão
|
bbb.users.raiseHandBtn.toolTip2 = Abaixar a mão
|
||||||
bbb.users.roomMuted.text = Participantes silenciados
|
bbb.users.roomMuted.text = Participantes silenciados
|
||||||
bbb.users.roomLocked.text = Participantes bloqueados
|
|
||||||
bbb.users.pushToTalk.toolTip = Falar
|
bbb.users.pushToTalk.toolTip = Falar
|
||||||
bbb.users.pushToMute.toolTip = Silenciar você mesmo
|
bbb.users.pushToMute.toolTip = Silenciar você mesmo
|
||||||
bbb.users.muteMeBtnTxt.talk = Falar
|
bbb.users.muteMeBtnTxt.talk = Falar
|
||||||
@ -587,12 +586,13 @@ bbb.users.settings.unlockAll=Liberar todos os participantes
|
|||||||
bbb.users.settings.roomIsLocked=Bloqueados por padrão
|
bbb.users.settings.roomIsLocked=Bloqueados por padrão
|
||||||
bbb.users.settings.roomIsMuted=Silenciados por padrão
|
bbb.users.settings.roomIsMuted=Silenciados por padrão
|
||||||
|
|
||||||
|
bbb.users.roomLocked.text = Participantes c/ restrições
|
||||||
|
|
||||||
bbb.lockSettings.save = Aplicar
|
bbb.lockSettings.save = Aplicar
|
||||||
bbb.lockSettings.save.tooltip = Aplicar configurações de restrição
|
bbb.lockSettings.save.toolTip = Aplicar configurações de restrição
|
||||||
bbb.lockSettings.cancel = Cancelar
|
bbb.lockSettings.cancel = Cancelar
|
||||||
bbb.lockSettings.cancel.toolTip = Fecha esta janela sem aplicar
|
bbb.lockSettings.cancel.toolTip = Fecha esta janela sem aplicar
|
||||||
|
|
||||||
bbb.lockSettings.moderatorLocking = Bloqueio de moderador
|
|
||||||
bbb.lockSettings.privateChat = Chat privado
|
bbb.lockSettings.privateChat = Chat privado
|
||||||
bbb.lockSettings.publicChat = Chat público
|
bbb.lockSettings.publicChat = Chat público
|
||||||
bbb.lockSettings.webcam = Câmera
|
bbb.lockSettings.webcam = Câmera
|
||||||
@ -600,4 +600,5 @@ bbb.lockSettings.microphone = Microfone
|
|||||||
bbb.lockSettings.layout = Layout
|
bbb.lockSettings.layout = Layout
|
||||||
bbb.lockSettings.title=Restringir participantes
|
bbb.lockSettings.title=Restringir participantes
|
||||||
bbb.lockSettings.feature=Recurso
|
bbb.lockSettings.feature=Recurso
|
||||||
bbb.lockSettings.enabled=Bloqueado
|
bbb.lockSettings.locked=Restrito
|
||||||
|
bbb.lockSettings.lockOnJoin=Restringir ao entrar
|
||||||
|
@ -94,7 +94,7 @@
|
|||||||
glowBlurSize = "30.0"
|
glowBlurSize = "30.0"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<module name="WhiteboardModule" url="http://HOST/client/WhiteboardModule.swf?v=4105"
|
<module name="WhiteboardModule" url="http://HOST/client/WhiteboardModule.swf?v=VERSION"
|
||||||
uri="rtmp://HOST/bigbluebutton"
|
uri="rtmp://HOST/bigbluebutton"
|
||||||
dependsOn="PresentModule"
|
dependsOn="PresentModule"
|
||||||
baseTabIndex="601"
|
baseTabIndex="601"
|
||||||
|
27
bigbluebutton-client/src/org/bigbluebutton/core/vo/LockSettingsVO.as
Normal file → Executable file
27
bigbluebutton-client/src/org/bigbluebutton/core/vo/LockSettingsVO.as
Normal file → Executable file
@ -24,15 +24,17 @@ package org.bigbluebutton.core.vo
|
|||||||
private var disableMic:Boolean;
|
private var disableMic:Boolean;
|
||||||
private var disablePrivateChat:Boolean;
|
private var disablePrivateChat:Boolean;
|
||||||
private var disablePublicChat:Boolean;
|
private var disablePublicChat:Boolean;
|
||||||
private var lockedLayout:Boolean;
|
private var lockedLayout:Boolean;
|
||||||
|
private var lockOnJoin:Boolean;
|
||||||
|
|
||||||
public function LockSettingsVO(pDisableCam:Boolean, pDisableMic:Boolean, pDisablePrivateChat:Boolean, pDisablePublicChat:Boolean, pLockLayout: Boolean)
|
public function LockSettingsVO(pDisableCam:Boolean, pDisableMic:Boolean, pDisablePrivateChat:Boolean, pDisablePublicChat:Boolean, pLockLayout: Boolean, pLockOnJoin:Boolean)
|
||||||
{
|
{
|
||||||
this.disableCam = pDisableCam;
|
this.disableCam = pDisableCam;
|
||||||
this.disableMic = pDisableMic;
|
this.disableMic = pDisableMic;
|
||||||
this.disablePrivateChat = pDisablePrivateChat;
|
this.disablePrivateChat = pDisablePrivateChat;
|
||||||
this.disablePublicChat = pDisablePublicChat;
|
this.disablePublicChat = pDisablePublicChat;
|
||||||
this.lockedLayout = pLockLayout;
|
this.lockedLayout = pLockLayout;
|
||||||
|
this.lockOnJoin = pLockOnJoin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function toMap():Object {
|
public function toMap():Object {
|
||||||
@ -41,7 +43,8 @@ package org.bigbluebutton.core.vo
|
|||||||
disableMic: this.disableMic,
|
disableMic: this.disableMic,
|
||||||
disablePrivateChat: this.disablePrivateChat,
|
disablePrivateChat: this.disablePrivateChat,
|
||||||
disablePublicChat: this.disablePublicChat,
|
disablePublicChat: this.disablePublicChat,
|
||||||
lockedLayout: this.lockedLayout
|
lockedLayout: this.lockedLayout,
|
||||||
|
lockOnJoin: this.lockOnJoin
|
||||||
};
|
};
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
@ -62,9 +65,17 @@ package org.bigbluebutton.core.vo
|
|||||||
public function getDisablePublicChat():Boolean {
|
public function getDisablePublicChat():Boolean {
|
||||||
return disablePublicChat;
|
return disablePublicChat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLockedLayout():Boolean {
|
public function getLockedLayout():Boolean {
|
||||||
return lockedLayout;
|
return lockedLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLockOnJoin():Boolean {
|
||||||
|
return lockOnJoin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isAnythingLocked():Boolean {
|
||||||
|
return lockedLayout || disableCam || disableMic || disablePrivateChat || disablePublicChat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -85,11 +85,6 @@ package org.bigbluebutton.main.model
|
|||||||
public var userid:String;
|
public var userid:String;
|
||||||
public var record:Boolean;
|
public var record:Boolean;
|
||||||
|
|
||||||
/**
|
|
||||||
* Flag used to start room as locked
|
|
||||||
* */
|
|
||||||
public var lockOnStart:Boolean;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag used to start room as muted
|
* Flag used to start room as muted
|
||||||
* */
|
* */
|
||||||
|
60
bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
Normal file → Executable file
60
bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
Normal file → Executable file
@ -74,6 +74,10 @@ package org.bigbluebutton.main.model.users
|
|||||||
public function set presenter(p:Boolean):void {
|
public function set presenter(p:Boolean):void {
|
||||||
_presenter = p;
|
_presenter = p;
|
||||||
verifyUserStatus();
|
verifyUserStatus();
|
||||||
|
|
||||||
|
//As the lock settings are now not applied to presenters, when the presenter flag is changed, we need to apply the lock settings
|
||||||
|
if(me)
|
||||||
|
applyLockSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
public var raiseHandTime:Date;
|
public var raiseHandTime:Date;
|
||||||
@ -215,23 +219,20 @@ package org.bigbluebutton.main.model.users
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function lockStatusChanged(locked: Boolean):void {
|
public function lockStatusChanged(locked: Boolean):void {
|
||||||
userLocked = locked;
|
trace("lockStatusChanged -> " + locked);
|
||||||
if(me)
|
userLocked = locked;
|
||||||
applyLockSettings();
|
if(me)
|
||||||
buildStatus();
|
applyLockSettings();
|
||||||
|
buildStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function changeStatus(status:Status):void {
|
public function changeStatus(status:Status):void {
|
||||||
|
trace("changeStatus -> " + status.name);
|
||||||
//_status.changeStatus(status);
|
//_status.changeStatus(status);
|
||||||
if (status.name == "presenter") {
|
if (status.name == "presenter") {
|
||||||
presenter = status.value
|
presenter = status.value
|
||||||
}
|
}
|
||||||
switch (status.name) {
|
switch (status.name) {
|
||||||
case "locked":
|
|
||||||
userLocked = status.value as Boolean;
|
|
||||||
if(me)
|
|
||||||
applyLockSettings();
|
|
||||||
break;
|
|
||||||
case "presenter":
|
case "presenter":
|
||||||
presenter = status.value;
|
presenter = status.value;
|
||||||
break;
|
break;
|
||||||
@ -307,32 +308,31 @@ package org.bigbluebutton.main.model.users
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function applyLockSettings():void {
|
public function applyLockSettings():void {
|
||||||
|
|
||||||
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
||||||
|
var lockAppliesToMe:Boolean = me && role != MODERATOR && !presenter && userLocked;
|
||||||
|
|
||||||
|
disableMyCam = lockAppliesToMe && lockSettings.getDisableCam();
|
||||||
|
disableMyMic = lockAppliesToMe && lockSettings.getDisableMic();
|
||||||
|
disableMyPrivateChat = lockAppliesToMe && lockSettings.getDisablePrivateChat();
|
||||||
|
disableMyPublicChat = lockAppliesToMe && lockSettings.getDisablePublicChat();
|
||||||
|
lockedLayout = lockAppliesToMe && lockSettings.getLockedLayout();
|
||||||
|
|
||||||
disableMyCam = lockSettings.getDisableCam();
|
|
||||||
disableMyMic = lockSettings.getDisableMic();
|
|
||||||
disableMyPrivateChat = lockSettings.getDisablePrivateChat();
|
|
||||||
disableMyPublicChat = lockSettings.getDisablePublicChat();
|
|
||||||
lockedLayout = lockSettings.getLockedLayout();
|
|
||||||
|
|
||||||
var dispatcher:Dispatcher = new Dispatcher();
|
var dispatcher:Dispatcher = new Dispatcher();
|
||||||
dispatcher.dispatchEvent(new LockControlEvent(LockControlEvent.CHANGED_LOCK_SETTINGS));
|
dispatcher.dispatchEvent(new LockControlEvent(LockControlEvent.CHANGED_LOCK_SETTINGS));
|
||||||
|
|
||||||
if (me && role != MODERATOR && !presenter) {
|
if (lockAppliesToMe) {
|
||||||
//If it's sharing webcam, stop it
|
//If it's sharing webcam, stop it
|
||||||
if (disableMyCam && hasStream){
|
if (disableMyCam && hasStream){
|
||||||
dispatcher.dispatchEvent(new ClosePublishWindowEvent());
|
dispatcher.dispatchEvent(new ClosePublishWindowEvent());
|
||||||
}
|
}
|
||||||
|
//If it's sharing microphone, mute it
|
||||||
//If it's sharing microphone, mute it
|
if (disableMyMic && !UserManager.getInstance().getConference().isMyVoiceMuted()) {
|
||||||
if (disableMyMic && !UserManager.getInstance().getConference().isMyVoiceMuted()) {
|
var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
|
||||||
var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
|
e.userid = UserManager.getInstance().getConference().getMyUserId();
|
||||||
e.userid = UserManager.getInstance().getConference().getMyUserId();
|
e.mute = true;
|
||||||
e.mute = true;
|
dispatcher.dispatchEvent(e);
|
||||||
dispatcher.dispatchEvent(e);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -437,12 +437,12 @@ package org.bigbluebutton.main.model.users {
|
|||||||
public function configLockSettings():void {
|
public function configLockSettings():void {
|
||||||
var config:Config = BBB.initConfigManager().config;
|
var config:Config = BBB.initConfigManager().config;
|
||||||
|
|
||||||
var allowModeratorLocking:Boolean,
|
var disableCam:Boolean,
|
||||||
disableCam:Boolean,
|
disableMic:Boolean,
|
||||||
disableMic:Boolean,
|
disablePrivateChat:Boolean,
|
||||||
disablePrivateChat:Boolean,
|
disablePublicChat:Boolean,
|
||||||
disablePublicChat:Boolean,
|
lockedLayout:Boolean,
|
||||||
lockedLayout:Boolean;
|
lockOnJoin:Boolean;
|
||||||
|
|
||||||
var lockConfig:XML;
|
var lockConfig:XML;
|
||||||
|
|
||||||
@ -450,45 +450,45 @@ package org.bigbluebutton.main.model.users {
|
|||||||
lockConfig = config.lock;
|
lockConfig = config.lock;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
allowModeratorLocking = (lockConfig.@allowModeratorLocking.toUpperCase() == "TRUE");
|
|
||||||
} catch(e:Error) {
|
|
||||||
allowModeratorLocking = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
disableCam = (lockConfig.@disableCamForLockedUsers.toUpperCase() == "TRUE");
|
disableCam = (lockConfig.@disableCamForLockedUsers.toUpperCase() == "TRUE");
|
||||||
} catch(e:Error) {
|
} catch(e:Error) {
|
||||||
disableCam = false;
|
disableCam = false; //If not set, default to false
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
disableMic = (lockConfig.@disableMicForLockedUsers.toUpperCase() == "TRUE");
|
disableMic = (lockConfig.@disableMicForLockedUsers.toUpperCase() == "TRUE");
|
||||||
} catch(e:Error) {
|
} catch(e:Error) {
|
||||||
disableMic = false;
|
disableMic = false; //If not set, default to false
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
disablePrivateChat = (lockConfig.@disablePrivateChatForLockedUsers.toUpperCase() == "TRUE");
|
disablePrivateChat = (lockConfig.@disablePrivateChatForLockedUsers.toUpperCase() == "TRUE");
|
||||||
} catch(e:Error) {
|
} catch(e:Error) {
|
||||||
disablePrivateChat = false;
|
disablePrivateChat = false; //If not set, default to false
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
disablePublicChat = (lockConfig.@disablePublicChatForLockedUsers.toUpperCase() == "TRUE");
|
disablePublicChat = (lockConfig.@disablePublicChatForLockedUsers.toUpperCase() == "TRUE");
|
||||||
} catch(e:Error) {
|
} catch(e:Error) {
|
||||||
disablePublicChat = false;
|
disablePublicChat = false; //If not set, default to false
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
lockedLayout = (lockConfig.@lockLayoutForLockedUsers.toUpperCase() == "TRUE");
|
lockedLayout = (lockConfig.@lockLayoutForLockedUsers.toUpperCase() == "TRUE");
|
||||||
} catch(e:Error) {
|
} catch(e:Error) {
|
||||||
lockedLayout = false;
|
lockedLayout = false; //If not set, default to false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
lockOnJoin = (lockConfig.@lockOnJoin.toUpperCase() == "TRUE");
|
||||||
|
} catch(e:Error) {
|
||||||
|
lockOnJoin = true; //If not set, default to true
|
||||||
|
}
|
||||||
|
|
||||||
trace(LOG + " init lock settings from config");
|
trace(LOG + " init lock settings from config");
|
||||||
|
|
||||||
lockSettings = new LockSettingsVO(disableCam, disableMic, disablePrivateChat, disablePublicChat, lockedLayout);
|
lockSettings = new LockSettingsVO(disableCam, disableMic, disablePrivateChat, disablePublicChat, lockedLayout, lockOnJoin);
|
||||||
|
|
||||||
setLockSettings(lockSettings);
|
setLockSettings(lockSettings);
|
||||||
}
|
}
|
||||||
@ -513,7 +513,7 @@ package org.bigbluebutton.main.model.users {
|
|||||||
|
|
||||||
public function setLockSettings(lockSettings:LockSettingsVO):void {
|
public function setLockSettings(lockSettings:LockSettingsVO):void {
|
||||||
this.lockSettings = lockSettings;
|
this.lockSettings = lockSettings;
|
||||||
applyLockSettings();
|
applyLockSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function applyLockSettings():void {
|
public function applyLockSettings():void {
|
||||||
|
@ -221,12 +221,11 @@ package org.bigbluebutton.main.model.users
|
|||||||
var uri:String = _applicationURI + "/" + _conferenceParameters.room;
|
var uri:String = _applicationURI + "/" + _conferenceParameters.room;
|
||||||
|
|
||||||
trace(LOG + "::Connecting to " + uri + " [" + _conferenceParameters.username + "," + _conferenceParameters.role + "," +
|
trace(LOG + "::Connecting to " + uri + " [" + _conferenceParameters.username + "," + _conferenceParameters.role + "," +
|
||||||
_conferenceParameters.conference + "," + _conferenceParameters.record + "," + _conferenceParameters.room + "]");
|
_conferenceParameters.conference + "," + _conferenceParameters.record + "," + _conferenceParameters.room + ", " + _conferenceParameters.lockSettings.lockOnJoin + "]");
|
||||||
_netConnection.connect(uri, _conferenceParameters.username, _conferenceParameters.role,
|
_netConnection.connect(uri, _conferenceParameters.username, _conferenceParameters.role,
|
||||||
_conferenceParameters.room, _conferenceParameters.voicebridge,
|
_conferenceParameters.room, _conferenceParameters.voicebridge,
|
||||||
_conferenceParameters.record, _conferenceParameters.externUserID,
|
_conferenceParameters.record, _conferenceParameters.externUserID,
|
||||||
_conferenceParameters.internalUserID, _conferenceParameters.lockOnStart,
|
_conferenceParameters.internalUserID, _conferenceParameters.muteOnStart, _conferenceParameters.lockSettings);
|
||||||
_conferenceParameters.muteOnStart, _conferenceParameters.lockSettings);
|
|
||||||
} catch(e:ArgumentError) {
|
} catch(e:ArgumentError) {
|
||||||
// Invalid parameters.
|
// Invalid parameters.
|
||||||
switch (e.errorID) {
|
switch (e.errorID) {
|
||||||
|
@ -129,21 +129,15 @@ package org.bigbluebutton.main.model.users
|
|||||||
muteOnStart = false;
|
muteOnStart = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var lockOnStart:Boolean;
|
|
||||||
try {
|
|
||||||
lockOnStart = (config.meeting.@lockOnStart.toUpperCase() == "TRUE");
|
|
||||||
} catch(e:Error) {
|
|
||||||
lockOnStart = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_conferenceParameters.muteOnStart = muteOnStart;
|
_conferenceParameters.muteOnStart = muteOnStart;
|
||||||
_conferenceParameters.lockOnStart = lockOnStart;
|
|
||||||
_conferenceParameters.lockSettings = UserManager.getInstance().getConference().getLockSettings().toMap();
|
_conferenceParameters.lockSettings = UserManager.getInstance().getConference().getLockSettings().toMap();
|
||||||
|
|
||||||
// assign the meeting name to the document title
|
trace("_conferenceParameters.muteOnStart = " + _conferenceParameters.muteOnStart);
|
||||||
ExternalInterface.call("setTitle", _conferenceParameters.meetingName);
|
|
||||||
|
// assign the meeting name to the document title
|
||||||
trace(LOG + " Got the user info from web api.");
|
ExternalInterface.call("setTitle", _conferenceParameters.meetingName);
|
||||||
|
|
||||||
|
trace(LOG + " Got the user info from web api.");
|
||||||
/**
|
/**
|
||||||
* Temporarily store the parameters in global BBB so we get easy access to it.
|
* Temporarily store the parameters in global BBB so we get easy access to it.
|
||||||
*/
|
*/
|
||||||
@ -153,7 +147,7 @@ package org.bigbluebutton.main.model.users
|
|||||||
e.conference = UserManager.getInstance().getConference();
|
e.conference = UserManager.getInstance().getConference();
|
||||||
dispatcher.dispatchEvent(e);
|
dispatcher.dispatchEvent(e);
|
||||||
|
|
||||||
connect();
|
connect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
import org.bigbluebutton.core.UsersUtil;
|
import org.bigbluebutton.core.UsersUtil;
|
||||||
import org.bigbluebutton.core.managers.UserManager;
|
import org.bigbluebutton.core.managers.UserManager;
|
||||||
|
import org.bigbluebutton.core.vo.LockSettingsVO;
|
||||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||||
|
import org.bigbluebutton.main.model.users.BBBUser;
|
||||||
|
import org.bigbluebutton.main.model.users.Conference;
|
||||||
import org.bigbluebutton.modules.phone.PhoneOptions;
|
import org.bigbluebutton.modules.phone.PhoneOptions;
|
||||||
import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
|
import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
|
||||||
import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand;
|
import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand;
|
||||||
@ -48,11 +51,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
[Bindable] private var baseIndex:int = 1;
|
[Bindable] private var baseIndex:int = 1;
|
||||||
|
|
||||||
private function init():void {
|
private function init():void {
|
||||||
|
var conference:Conference = UserManager.getInstance().getConference();
|
||||||
|
|
||||||
if (!phoneOptions.listenOnlyMode) btnListenOnly.enabled = false;
|
if (!phoneOptions.listenOnlyMode) btnListenOnly.enabled = false;
|
||||||
if (phoneOptions.presenterShareOnly && !UsersUtil.amIPresenter() && !UsersUtil.amIModerator()) btnMicrophone.enabled = false;
|
if (
|
||||||
|
(phoneOptions.presenterShareOnly && !UsersUtil.amIPresenter() && !UsersUtil.amIModerator())
|
||||||
|
) {
|
||||||
|
btnMicrophone.enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (phoneOptions.showPhoneOption) {
|
if (phoneOptions.showPhoneOption) {
|
||||||
txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [UserManager.getInstance().getConference().dialNumber, UserManager.getInstance().getConference().voiceBridge]);
|
txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [conference.dialNumber, conference.voiceBridge]);
|
||||||
} else {
|
} else {
|
||||||
vrulePhone.visible = vrulePhone.includeInLayout = false;
|
vrulePhone.visible = vrulePhone.includeInLayout = false;
|
||||||
vboxPhone.visible = vboxPhone.includeInLayout = false;
|
vboxPhone.visible = vboxPhone.includeInLayout = false;
|
||||||
|
@ -42,20 +42,22 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||||
|
|
||||||
private var images:Images = new Images();
|
private var images:Images = new Images();
|
||||||
|
|
||||||
[Bindable] private var cancelIcon:Class = images.cancel;
|
[Bindable] private var cancelIcon:Class = images.cancel;
|
||||||
|
|
||||||
[Bindable] private var baseIndex:int = 1;
|
[Bindable] private var baseIndex:int = 1;
|
||||||
|
|
||||||
[Bindable] public var disableCam:Boolean = false;
|
[Bindable] public var disableCam:Boolean = false;
|
||||||
[Bindable] public var disableMic:Boolean = false;
|
[Bindable] public var disableMic:Boolean = false;
|
||||||
[Bindable] public var disablePubChat:Boolean = false;
|
[Bindable] public var disablePubChat:Boolean = false;
|
||||||
[Bindable] public var disablePrivChat:Boolean = false;
|
[Bindable] public var disablePrivChat:Boolean = false;
|
||||||
[Bindable] public var lockedLayout:Boolean = false;
|
[Bindable] public var lockedLayout:Boolean = false;
|
||||||
|
[Bindable] public var lockOnJoin:Boolean = false;
|
||||||
|
|
||||||
override public function move(x:Number, y:Number):void {
|
override public function move(x:Number, y:Number):void {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleKeyDown(event:KeyboardEvent):void {
|
private function handleKeyDown(event:KeyboardEvent):void {
|
||||||
if (event.charCode == Keyboard.ESCAPE) {
|
if (event.charCode == Keyboard.ESCAPE) {
|
||||||
this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
|
this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
|
||||||
@ -65,15 +67,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
private function onSaveClicked():void {
|
private function onSaveClicked():void {
|
||||||
var event:LockControlEvent = new LockControlEvent(LockControlEvent.SAVE_LOCK_SETTINGS);
|
var event:LockControlEvent = new LockControlEvent(LockControlEvent.SAVE_LOCK_SETTINGS);
|
||||||
|
var lockSettings:LockSettingsVO = new LockSettingsVO(chkDisableWebcam.selected, chkDisableMicrophone.selected, chkDisablePrivateChat.selected, chkDisablePublicChat.selected, chkDisableLayout.selected, chkLockOnJoin.selected);
|
||||||
var lockSettings:LockSettingsVO = new LockSettingsVO(enableWebcam.selected,
|
|
||||||
enableMicrophone.selected,
|
|
||||||
enablePrivateChat.selected,
|
|
||||||
enablePublicChat.selected,
|
|
||||||
enableLayout.selected);
|
|
||||||
|
|
||||||
event.payload = lockSettings.toMap();
|
event.payload = lockSettings.toMap();
|
||||||
|
|
||||||
dispatchEvent(event);
|
dispatchEvent(event);
|
||||||
|
|
||||||
PopUpManager.removePopUp(this);
|
PopUpManager.removePopUp(this);
|
||||||
@ -85,9 +80,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
protected function creationCompleteHandler(event:FlexEvent):void
|
protected function creationCompleteHandler(event:FlexEvent):void
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
]]>
|
]]>
|
||||||
</mx:Script>
|
</mx:Script>
|
||||||
<mx:VBox width="100%" height="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
|
<mx:VBox width="100%" height="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
|
||||||
@ -97,14 +91,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
<mx:HBox verticalAlign="top" width="100%" paddingTop="20">
|
<mx:HBox verticalAlign="top" width="100%" paddingTop="20">
|
||||||
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle" text="{ResourceUtil.getInstance().getString('bbb.lockSettings.feature')}" fontWeight="bold" />
|
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle" text="{ResourceUtil.getInstance().getString('bbb.lockSettings.feature')}" fontWeight="bold" />
|
||||||
<mx:Label styleName="lockSettingsDefaultLabelStyle" text="{ResourceUtil.getInstance().getString('bbb.lockSettings.enabled')}" fontWeight="bold" />
|
<mx:Label styleName="lockSettingsDefaultLabelStyle" text="{ResourceUtil.getInstance().getString('bbb.lockSettings.locked')}" fontWeight="bold" />
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
<mx:HBox verticalAlign="top" width="100%">
|
<mx:HBox verticalAlign="top" width="100%">
|
||||||
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle"
|
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle"
|
||||||
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.webcam')}" />
|
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.webcam')}" />
|
||||||
<mx:HBox width="30%">
|
<mx:HBox width="30%">
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
<mx:CheckBox id="enableWebcam" selected="{disableCam}" />
|
<mx:CheckBox id="chkDisableWebcam" selected="{disableCam}" />
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
@ -113,7 +107,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.microphone')}" />
|
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.microphone')}" />
|
||||||
<mx:HBox width="30%">
|
<mx:HBox width="30%">
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
<mx:CheckBox id="enableMicrophone" selected="{disableMic}"/>
|
<mx:CheckBox id="chkDisableMicrophone" selected="{disableMic}"/>
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
@ -122,7 +116,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.publicChat')}" />
|
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.publicChat')}" />
|
||||||
<mx:HBox width="30%">
|
<mx:HBox width="30%">
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
<mx:CheckBox id="enablePublicChat" selected="{disablePubChat}"/>
|
<mx:CheckBox id="chkDisablePublicChat" selected="{disablePubChat}"/>
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
@ -131,19 +125,33 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.privateChat')}" />
|
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.privateChat')}" />
|
||||||
<mx:HBox width="30%">
|
<mx:HBox width="30%">
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
<mx:CheckBox id="enablePrivateChat" selected="{disablePrivChat}"/>
|
<mx:CheckBox id="chkDisablePrivateChat" selected="{disablePrivChat}"/>
|
||||||
<mx:Spacer width="50%" />
|
<mx:Spacer width="50%" />
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
<mx:HBox verticalAlign="top" width="100%">
|
|
||||||
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle"
|
<mx:HBox verticalAlign="top" width="100%">
|
||||||
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.layout')}" />
|
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle"
|
||||||
<mx:HBox width="30%">
|
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.layout')}" />
|
||||||
<mx:Spacer width="50%" />
|
<mx:HBox width="30%">
|
||||||
<mx:CheckBox id="enableLayout" selected="{lockedLayout}"/>
|
<mx:Spacer width="50%" />
|
||||||
<mx:Spacer width="50%" />
|
<mx:CheckBox id="chkDisableLayout" selected="{lockedLayout}"/>
|
||||||
</mx:HBox>
|
<mx:Spacer width="50%" />
|
||||||
</mx:HBox>
|
</mx:HBox>
|
||||||
|
</mx:HBox>
|
||||||
|
|
||||||
|
<mx:HRule width="100%"/>
|
||||||
|
|
||||||
|
<mx:HBox verticalAlign="top" width="100%">
|
||||||
|
<mx:Label width="70%" styleName="lockSettingsDefaultLabelStyle"
|
||||||
|
text="{ResourceUtil.getInstance().getString('bbb.lockSettings.lockOnJoin')}" />
|
||||||
|
<mx:HBox width="30%">
|
||||||
|
<mx:Spacer width="50%" />
|
||||||
|
<mx:CheckBox id="chkLockOnJoin" selected="{lockOnJoin}"/>
|
||||||
|
<mx:Spacer width="50%" />
|
||||||
|
</mx:HBox>
|
||||||
|
</mx:HBox>
|
||||||
|
|
||||||
<mx:HRule width="100%"/>
|
<mx:HRule width="100%"/>
|
||||||
|
|
||||||
<mx:HBox width="100%" horizontalAlign="right" horizontalGap="18" paddingTop="20">
|
<mx:HBox width="100%" horizontalAlign="right" horizontalGap="18" paddingTop="20">
|
||||||
|
@ -387,7 +387,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
* pop-up is opened from another pop-up. I delayed the second open to
|
* pop-up is opened from another pop-up. I delayed the second open to
|
||||||
* avoid this case. - Chad
|
* avoid this case. - Chad
|
||||||
*/
|
*/
|
||||||
this.callLater( function() {
|
this.callLater( function():void {
|
||||||
var micSettings:FlashMicSettings = PopUpManager.createPopUp(mdiCanvas, FlashMicSettings, true) as FlashMicSettings;
|
var micSettings:FlashMicSettings = PopUpManager.createPopUp(mdiCanvas, FlashMicSettings, true) as FlashMicSettings;
|
||||||
micSettings.addEventListener(FlexEvent.CREATION_COMPLETE, function(e:Event):void {
|
micSettings.addEventListener(FlexEvent.CREATION_COMPLETE, function(e:Event):void {
|
||||||
var point1:Point = new Point();
|
var point1:Point = new Point();
|
||||||
@ -628,22 +628,23 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function openLockSettingsWindow(event:LockControlEvent):void {
|
private function openLockSettingsWindow(event:LockControlEvent):void {
|
||||||
var conference:Conference = UserManager.getInstance().getConference();
|
var conference:Conference = UserManager.getInstance().getConference();
|
||||||
var lsv:LockSettingsVO = conference.getLockSettings();
|
var lsv:LockSettingsVO = conference.getLockSettings();
|
||||||
|
|
||||||
var popUp:IFlexDisplayObject = PopUpManager.createPopUp(mdiCanvas, LockSettings, true);
|
var popUp:IFlexDisplayObject = PopUpManager.createPopUp(mdiCanvas, LockSettings, true);
|
||||||
var ls:LockSettings = LockSettings(popUp);
|
var ls:LockSettings = LockSettings(popUp);
|
||||||
ls.disableCam = lsv.getDisableCam();
|
ls.disableCam = lsv.getDisableCam();
|
||||||
ls.disableMic = lsv.getDisableMic();
|
ls.disableMic = lsv.getDisableMic();
|
||||||
ls.disablePrivChat = lsv.getDisablePrivateChat();
|
ls.disablePrivChat = lsv.getDisablePrivateChat();
|
||||||
ls.disablePubChat = lsv.getDisablePublicChat();
|
ls.disablePubChat = lsv.getDisablePublicChat();
|
||||||
ls.lockedLayout = lsv.getLockedLayout();
|
ls.lockedLayout = lsv.getLockedLayout();
|
||||||
|
ls.lockOnJoin = lsv.getLockOnJoin();
|
||||||
|
|
||||||
var point1:Point = new Point();
|
var point1:Point = new Point();
|
||||||
point1.x = width/2;
|
point1.x = width/2;
|
||||||
point1.y = height/2;
|
point1.y = height/2;
|
||||||
ls.x = point1.x - (ls.width/2);
|
ls.x = point1.x - (ls.width/2);
|
||||||
ls.y = point1.y - (ls.height/2);
|
ls.y = point1.y - (ls.height/2);
|
||||||
}
|
}
|
||||||
]]>
|
]]>
|
||||||
</mx:Script>
|
</mx:Script>
|
||||||
|
@ -645,24 +645,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function lockSettingsChanged(e:Event):void {
|
private function lockSettingsChanged(e:Event):void {
|
||||||
applyLockSettings();
|
applyLockSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function applyLockSettings():void {
|
private function applyLockSettings():void {
|
||||||
|
var userManager:UserManager = UserManager.getInstance();
|
||||||
if (UsersUtil.amIModerator() || UsersUtil.amIPresenter()) return; // Settings only affect viewers.
|
var conference:Conference = userManager.getConference();
|
||||||
|
var me:BBBUser = conference.getMyUser();
|
||||||
var userManager:UserManager = UserManager.getInstance();
|
|
||||||
var conference:Conference = userManager.getConference();
|
if (publicChat) {
|
||||||
var me:BBBUser = conference.getMyUser();
|
txtMsgArea.enabled = sendBtn.enabled = !me.disableMyPublicChat;
|
||||||
|
} else {
|
||||||
if (publicChat) {
|
txtMsgArea.enabled = sendBtn.enabled = !me.disableMyPrivateChat;
|
||||||
txtMsgArea.enabled = sendBtn.enabled = !me.disableMyPublicChat;
|
|
||||||
} else {
|
|
||||||
txtMsgArea.enabled = sendBtn.enabled = !me.disableMyPrivateChat;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]]>
|
}
|
||||||
|
]]>
|
||||||
|
|
||||||
</mx:Script>
|
</mx:Script>
|
||||||
|
|
||||||
|
@ -61,6 +61,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
import org.bigbluebutton.core.events.SwitchedLayoutEvent;
|
import org.bigbluebutton.core.events.SwitchedLayoutEvent;
|
||||||
import org.bigbluebutton.core.managers.UserManager;
|
import org.bigbluebutton.core.managers.UserManager;
|
||||||
import org.bigbluebutton.core.vo.LockSettingsVO;
|
import org.bigbluebutton.core.vo.LockSettingsVO;
|
||||||
|
import org.bigbluebutton.main.model.users.BBBUser;
|
||||||
|
import org.bigbluebutton.main.model.users.Conference;
|
||||||
import org.bigbluebutton.main.views.MainToolbar;
|
import org.bigbluebutton.main.views.MainToolbar;
|
||||||
import org.bigbluebutton.modules.layout.events.ChangeLayoutEvent;
|
import org.bigbluebutton.modules.layout.events.ChangeLayoutEvent;
|
||||||
import org.bigbluebutton.modules.layout.events.ComboBoxCreatedEvent;
|
import org.bigbluebutton.modules.layout.events.ComboBoxCreatedEvent;
|
||||||
@ -88,10 +90,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function lockSettingsChanged(e:LockControlEvent):void {
|
private function lockSettingsChanged(e:LockControlEvent):void {
|
||||||
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
var conference:Conference = UserManager.getInstance().getConference();
|
||||||
if (UsersUtil.amIModerator() || UsersUtil.amIPresenter()) return;
|
var thisUser:BBBUser = conference.getMyUser();
|
||||||
|
this.enabled = ! thisUser.lockedLayout;
|
||||||
this.enabled = ! lockSettings.getLockedLayout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function populateLayoutsList(e:LayoutsReadyEvent):void {
|
private function populateLayoutsList(e:LayoutsReadyEvent):void {
|
||||||
|
@ -38,25 +38,23 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
<mx:Script>
|
<mx:Script>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
import com.asfusion.mate.events.Dispatcher;
|
import com.asfusion.mate.events.Dispatcher;
|
||||||
import flash.system.Security;
|
|
||||||
import flash.system.SecurityPanel;
|
|
||||||
import org.bigbluebutton.common.LogUtil;
|
|
||||||
import org.bigbluebutton.core.BBB;
|
|
||||||
import org.bigbluebutton.core.UsersUtil;
|
import org.bigbluebutton.core.UsersUtil;
|
||||||
|
import org.bigbluebutton.core.managers.UserManager;
|
||||||
import org.bigbluebutton.main.events.BBBEvent;
|
import org.bigbluebutton.main.events.BBBEvent;
|
||||||
import org.bigbluebutton.main.events.ShortcutEvent;
|
import org.bigbluebutton.main.events.ShortcutEvent;
|
||||||
|
import org.bigbluebutton.main.model.users.BBBUser;
|
||||||
|
import org.bigbluebutton.main.model.users.Conference;
|
||||||
import org.bigbluebutton.main.views.MainToolbar;
|
import org.bigbluebutton.main.views.MainToolbar;
|
||||||
import org.bigbluebutton.modules.phone.PhoneOptions;
|
import org.bigbluebutton.modules.phone.PhoneOptions;
|
||||||
import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
|
import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
|
||||||
import org.bigbluebutton.modules.phone.events.FlashJoinedListenOnlyVoiceConferenceEvent;
|
import org.bigbluebutton.modules.phone.events.FlashJoinedListenOnlyVoiceConferenceEvent;
|
||||||
import org.bigbluebutton.modules.phone.events.FlashJoinedVoiceConferenceEvent;
|
import org.bigbluebutton.modules.phone.events.FlashJoinedVoiceConferenceEvent;
|
||||||
import org.bigbluebutton.modules.phone.events.FlashLeftVoiceConferenceEvent;
|
import org.bigbluebutton.modules.phone.events.FlashLeftVoiceConferenceEvent;
|
||||||
import org.bigbluebutton.modules.phone.events.FlashStopEchoTestCommand;
|
|
||||||
import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand;
|
import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand;
|
||||||
import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand;
|
import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand;
|
||||||
import org.bigbluebutton.modules.phone.events.WebRTCCallEvent;
|
import org.bigbluebutton.modules.phone.events.WebRTCCallEvent;
|
||||||
import org.bigbluebutton.modules.phone.views.assets.Images;
|
|
||||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||||
|
|
||||||
private static const LOG:String = "Phone::ToolbarButton - ";
|
private static const LOG:String = "Phone::ToolbarButton - ";
|
||||||
@ -71,16 +69,25 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
[Bindable] public var phoneOptions:PhoneOptions = new PhoneOptions();
|
[Bindable] public var phoneOptions:PhoneOptions = new PhoneOptions();
|
||||||
|
|
||||||
private function startPhone():void {
|
private function startPhone():void {
|
||||||
|
var conference:Conference = UserManager.getInstance().getConference();
|
||||||
|
var thisUser:BBBUser = conference.getMyUser();
|
||||||
|
|
||||||
trace(LOG + "startPhone 1 enabled=[" + enabled + "] selected=[" + selected + "]");
|
trace(LOG + "startPhone 1 enabled=[" + enabled + "] selected=[" + selected + "]");
|
||||||
// Disable the button right away to prevent the user from clicking
|
// Disable the button right away to prevent the user from clicking
|
||||||
// multiple times.
|
// multiple times.
|
||||||
this.enabled = false;
|
this.enabled = false;
|
||||||
trace(LOG + "startPhone 2 enabled=[" + enabled + "] selected=[" + selected + "]");
|
trace(LOG + "startPhone 2 enabled=[" + enabled + "] selected=[" + selected + "]");
|
||||||
if (this.selected) {
|
if (this.selected) {
|
||||||
//trace(LOG + "Sending Join Conference command");
|
if(thisUser.disableMyMic){
|
||||||
//dispatcher.dispatchEvent(new JoinVoiceConferenceCommand());
|
var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand();
|
||||||
trace(LOG + "Sending Show Audio Selection command");
|
command.mic = false;
|
||||||
dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.SHOW_AUDIO_SELECTION));
|
dispatcher.dispatchEvent(command);
|
||||||
|
} else {
|
||||||
|
//trace(LOG + "Sending Join Conference command");
|
||||||
|
//dispatcher.dispatchEvent(new JoinVoiceConferenceCommand());
|
||||||
|
trace(LOG + "Sending Show Audio Selection command");
|
||||||
|
dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.SHOW_AUDIO_SELECTION));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
trace(LOG + "Sending Leave Conference command");
|
trace(LOG + "Sending Leave Conference command");
|
||||||
dispatcher.dispatchEvent(new LeaveVoiceConferenceCommand());
|
dispatcher.dispatchEvent(new LeaveVoiceConferenceCommand());
|
||||||
@ -108,21 +115,27 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function onCreationComplete():void {
|
private function onCreationComplete():void {
|
||||||
|
var conference:Conference = UserManager.getInstance().getConference();
|
||||||
|
var thisUser:BBBUser = conference.getMyUser();
|
||||||
|
|
||||||
// when the button is added to the stage display the audio selection window if auto join is true
|
// when the button is added to the stage display the audio selection window if auto join is true
|
||||||
if (phoneOptions.autoJoin) {
|
if (phoneOptions.autoJoin) {
|
||||||
if (phoneOptions.skipCheck) {
|
if (phoneOptions.skipCheck || thisUser.disableMyMic) {
|
||||||
var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand();
|
var command:JoinVoiceConferenceCommand = new JoinVoiceConferenceCommand();
|
||||||
if (phoneOptions.presenterShareOnly && !UsersUtil.amIPresenter() && !UsersUtil.amIModerator()) {
|
if (
|
||||||
command.mic = false;
|
(phoneOptions.presenterShareOnly && !UsersUtil.amIPresenter() && !UsersUtil.amIModerator())
|
||||||
} else {
|
|| thisUser.disableMyMic
|
||||||
command.mic = true;
|
) {
|
||||||
}
|
command.mic = false;
|
||||||
|
} else {
|
||||||
dispatcher.dispatchEvent(command);
|
command.mic = true;
|
||||||
} else {
|
}
|
||||||
trace(LOG + "Sending Show Audio Selection command");
|
|
||||||
dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.SHOW_AUDIO_SELECTION));
|
dispatcher.dispatchEvent(command);
|
||||||
}
|
} else {
|
||||||
|
trace(LOG + "Sending Show Audio Selection command");
|
||||||
|
dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.SHOW_AUDIO_SELECTION));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
Normal file → Executable file
26
bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
Normal file → Executable file
@ -132,10 +132,24 @@ package org.bigbluebutton.modules.users.services
|
|||||||
break;
|
break;
|
||||||
case "permissionsSettingsChanged":
|
case "permissionsSettingsChanged":
|
||||||
handlePermissionsSettingsChanged(message);
|
handlePermissionsSettingsChanged(message);
|
||||||
|
break;
|
||||||
|
case "userLocked":
|
||||||
|
handleUserLocked(message);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function handleUserLocked(msg:Object):void {
|
||||||
|
trace(LOG + "*** handleUserLocked " + msg.msg + " **** \n");
|
||||||
|
var map:Object = JSON.parse(msg.msg);
|
||||||
|
var user:BBBUser = UsersUtil.getUser(map.user);
|
||||||
|
|
||||||
|
if(user.userLocked != map.lock)
|
||||||
|
user.lockStatusChanged(map.lock);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
private function handleMeetingHasEnded(msg: Object):void {
|
private function handleMeetingHasEnded(msg: Object):void {
|
||||||
trace(LOG + "*** handleMeetingHasEnded " + msg.msg + " **** \n");
|
trace(LOG + "*** handleMeetingHasEnded " + msg.msg + " **** \n");
|
||||||
}
|
}
|
||||||
@ -147,7 +161,8 @@ package org.bigbluebutton.modules.users.services
|
|||||||
map.disableMic,
|
map.disableMic,
|
||||||
map.disablePrivChat,
|
map.disablePrivChat,
|
||||||
map.disablePubChat,
|
map.disablePubChat,
|
||||||
map.lockedLayout);
|
map.lockedLayout,
|
||||||
|
map.lockOnJoin);
|
||||||
UserManager.getInstance().getConference().setLockSettings(lockSettings);
|
UserManager.getInstance().getConference().setLockSettings(lockSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +200,7 @@ package org.bigbluebutton.modules.users.services
|
|||||||
var perm:Object = map.permissions;
|
var perm:Object = map.permissions;
|
||||||
|
|
||||||
var lockSettings:LockSettingsVO = new LockSettingsVO(perm.disableCam, perm.disableMic,
|
var lockSettings:LockSettingsVO = new LockSettingsVO(perm.disableCam, perm.disableMic,
|
||||||
perm.disablePrivChat, perm.disablePubChat, perm.lockedLayout);
|
perm.disablePrivChat, perm.disablePubChat, perm.lockedLayout, perm.lockOnJoin);
|
||||||
UserManager.getInstance().getConference().setLockSettings(lockSettings);
|
UserManager.getInstance().getConference().setLockSettings(lockSettings);
|
||||||
MeetingModel.getInstance().meetingMuted = map.meetingMuted;
|
MeetingModel.getInstance().meetingMuted = map.meetingMuted;
|
||||||
|
|
||||||
@ -296,7 +311,7 @@ package org.bigbluebutton.modules.users.services
|
|||||||
l.voiceMuted = false;
|
l.voiceMuted = false;
|
||||||
l.voiceJoined = false;
|
l.voiceJoined = false;
|
||||||
l.talking = false;
|
l.talking = false;
|
||||||
l.userLocked = false;
|
//l.userLocked = false;
|
||||||
|
|
||||||
trace(LOG + "notifying views that user has left voice. id[" + voiceUser.userId + "]");
|
trace(LOG + "notifying views that user has left voice. id[" + voiceUser.userId + "]");
|
||||||
var bbbEvent:BBBEvent = new BBBEvent(BBBEvent.USER_VOICE_LEFT);
|
var bbbEvent:BBBEvent = new BBBEvent(BBBEvent.USER_VOICE_LEFT);
|
||||||
@ -429,7 +444,7 @@ package org.bigbluebutton.modules.users.services
|
|||||||
bu.voiceMuted = voiceUser.muted;
|
bu.voiceMuted = voiceUser.muted;
|
||||||
bu.voiceJoined = voiceUser.joined;
|
bu.voiceJoined = voiceUser.joined;
|
||||||
bu.talking = voiceUser.talking;
|
bu.talking = voiceUser.talking;
|
||||||
bu.userLocked = voiceUser.locked;
|
//bu.userLocked = voiceUser.locked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -524,7 +539,8 @@ package org.bigbluebutton.modules.users.services
|
|||||||
user.externUserID = joinedUser.externUserID;
|
user.externUserID = joinedUser.externUserID;
|
||||||
user.isLeavingFlag = false;
|
user.isLeavingFlag = false;
|
||||||
user.listenOnly = joinedUser.listenOnly;
|
user.listenOnly = joinedUser.listenOnly;
|
||||||
|
user.userLocked = joinedUser.locked;
|
||||||
|
|
||||||
trace(LOG + "User status: hasStream " + joinedUser.hasStream);
|
trace(LOG + "User status: hasStream " + joinedUser.hasStream);
|
||||||
|
|
||||||
trace(LOG + "Joined as [" + user.userID + "," + user.name + "," + user.role + "," + joinedUser.hasStream + "]");
|
trace(LOG + "Joined as [" + user.userID + "," + user.name + "," + user.role + "," + joinedUser.hasStream + "]");
|
||||||
|
18
bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
Normal file → Executable file
18
bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
Normal file → Executable file
@ -298,8 +298,22 @@ package org.bigbluebutton.modules.users.services
|
|||||||
* Set lock state of all users in the room, except the users listed in second parameter
|
* Set lock state of all users in the room, except the users listed in second parameter
|
||||||
* */
|
* */
|
||||||
public function setUserLock(internalUserID:String, lock:Boolean):void {
|
public function setUserLock(internalUserID:String, lock:Boolean):void {
|
||||||
|
var message:Object = new Object();
|
||||||
return;
|
message["userId"] = internalUserID;
|
||||||
|
message["lock"] = lock;
|
||||||
|
|
||||||
|
trace("Sending lockRequest");
|
||||||
|
var _nc:ConnectionManager = BBB.initConnectionManager();
|
||||||
|
_nc.sendMessage(
|
||||||
|
"lock.setUserLock",
|
||||||
|
function(result:String):void { // On successful result
|
||||||
|
LogUtil.debug(result);
|
||||||
|
},
|
||||||
|
function(status:String):void { // status - On error occurred
|
||||||
|
LogUtil.error(status);
|
||||||
|
},
|
||||||
|
message
|
||||||
|
);
|
||||||
/*
|
/*
|
||||||
var nc:NetConnection = _module.connection;
|
var nc:NetConnection = _module.connection;
|
||||||
nc.call(
|
nc.call(
|
||||||
|
@ -31,25 +31,17 @@
|
|||||||
|
|
||||||
<mx:Script>
|
<mx:Script>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
import com.asfusion.mate.events.Dispatcher;
|
|
||||||
|
|
||||||
import mx.binding.utils.BindingUtils;
|
import mx.binding.utils.BindingUtils;
|
||||||
import mx.controls.Alert;
|
|
||||||
import mx.events.FlexEvent;
|
import mx.events.FlexEvent;
|
||||||
import mx.events.ListEvent;
|
|
||||||
|
|
||||||
import org.bigbluebutton.common.Images;
|
import org.bigbluebutton.common.Images;
|
||||||
import org.bigbluebutton.common.LogUtil;
|
|
||||||
import org.bigbluebutton.common.Role;
|
import org.bigbluebutton.common.Role;
|
||||||
import org.bigbluebutton.core.events.LockControlEvent;
|
import org.bigbluebutton.core.events.LockControlEvent;
|
||||||
import org.bigbluebutton.core.events.VoiceConfEvent;
|
import org.bigbluebutton.core.events.VoiceConfEvent;
|
||||||
import org.bigbluebutton.core.managers.UserManager;
|
import org.bigbluebutton.core.managers.UserManager;
|
||||||
import org.bigbluebutton.main.events.BBBEvent;
|
import org.bigbluebutton.core.vo.LockSettingsVO;
|
||||||
import org.bigbluebutton.main.events.StoppedViewingWebcamEvent;
|
|
||||||
import org.bigbluebutton.main.model.users.BBBUser;
|
import org.bigbluebutton.main.model.users.BBBUser;
|
||||||
import org.bigbluebutton.main.model.users.Conference;
|
|
||||||
import org.bigbluebutton.main.model.users.events.KickUserEvent;
|
import org.bigbluebutton.main.model.users.events.KickUserEvent;
|
||||||
import org.bigbluebutton.main.model.users.events.LowerHandEvent;
|
|
||||||
import org.bigbluebutton.modules.users.events.UsersRollEvent;
|
import org.bigbluebutton.modules.users.events.UsersRollEvent;
|
||||||
import org.bigbluebutton.modules.users.events.ViewCameraEvent;
|
import org.bigbluebutton.modules.users.events.ViewCameraEvent;
|
||||||
import org.bigbluebutton.modules.users.model.UsersOptions;
|
import org.bigbluebutton.modules.users.model.UsersOptions;
|
||||||
@ -158,10 +150,11 @@
|
|||||||
// reset the mute image filter so the talking indicator doesn't stick
|
// reset the mute image filter so the talking indicator doesn't stick
|
||||||
muteImg.filters = null;
|
muteImg.filters = null;
|
||||||
|
|
||||||
|
var ls:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
||||||
|
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
kickUserBtn.visible = !data.me && rolledOver && options.allowKickUser;
|
kickUserBtn.visible = !data.me && rolledOver && options.allowKickUser;
|
||||||
|
|
||||||
|
|
||||||
if (!data.voiceJoined) {
|
if (!data.voiceJoined) {
|
||||||
if (data.listenOnly) {
|
if (data.listenOnly) {
|
||||||
muteImg.source = images.sound;
|
muteImg.source = images.sound;
|
||||||
@ -173,11 +166,10 @@
|
|||||||
muteImg.visible = false;
|
muteImg.visible = false;
|
||||||
muteImg.includeInLayout = false;
|
muteImg.includeInLayout = false;
|
||||||
muteBtn.visible = false;
|
muteBtn.visible = false;
|
||||||
muteBtn.includeInLayout = true;
|
muteBtn.includeInLayout = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (data.userLocked && UserManager.getInstance().getConference().getLockSettings().getDisableMic()) {
|
if (data.userLocked && ls.getDisableMic()) {
|
||||||
muteImg.visible = true;
|
muteImg.visible = true;
|
||||||
muteImg.includeInLayout = true;
|
muteImg.includeInLayout = true;
|
||||||
muteBtn.visible = false;
|
muteBtn.visible = false;
|
||||||
@ -197,7 +189,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//If it's not a moderator, it always can be locked.
|
//If it's not a moderator, it always can be locked.
|
||||||
if( data.role != BBBUser.MODERATOR && data.userLocked == true){
|
if( data.role != BBBUser.MODERATOR && ls.isAnythingLocked() ){
|
||||||
lockImg.visible = !rolledOver;
|
lockImg.visible = !rolledOver;
|
||||||
lockImg.includeInLayout = !rolledOver;
|
lockImg.includeInLayout = !rolledOver;
|
||||||
lockBtn.visible = rolledOver;
|
lockBtn.visible = rolledOver;
|
||||||
@ -240,11 +232,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ((data.role != Role.MODERATOR && !data.presenter) &&
|
if ( data.userLocked && !data.presenter && ls.isAnythingLocked() ) {
|
||||||
(data.disableMyCam || data.disableMyMic || data.disableMyPrivateChat || data.disableMyPublicChat))
|
|
||||||
lockImg.source = images.locked_20;
|
lockImg.source = images.locked_20;
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
lockImg.source = null;
|
lockImg.source = null;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (data.voiceMuted == rolledOverMute)
|
if (data.voiceMuted == rolledOverMute)
|
||||||
muteBtn.setStyle("icon", images.audio);
|
muteBtn.setStyle("icon", images.audio);
|
||||||
|
@ -125,8 +125,7 @@
|
|||||||
|
|
||||||
roomMuted = MeetingModel.getInstance().meetingMuted;
|
roomMuted = MeetingModel.getInstance().meetingMuted;
|
||||||
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
||||||
roomLocked = lockSettings.getDisableCam() || lockSettings.getDisableMic() || lockSettings.getDisablePrivateChat()
|
roomLocked = lockSettings.isAnythingLocked();
|
||||||
|| lockSettings.getDisablePublicChat() || lockSettings.getLockedLayout();
|
|
||||||
|
|
||||||
titleBarOverlay.tabIndex = partOptions.baseTabIndex;
|
titleBarOverlay.tabIndex = partOptions.baseTabIndex;
|
||||||
minimizeBtn.tabIndex = partOptions.baseTabIndex+1;
|
minimizeBtn.tabIndex = partOptions.baseTabIndex+1;
|
||||||
@ -275,8 +274,7 @@
|
|||||||
|
|
||||||
private function handleChangedLockSettingsEvent(e:LockControlEvent):void {
|
private function handleChangedLockSettingsEvent(e:LockControlEvent):void {
|
||||||
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
|
||||||
roomLocked = lockSettings.getDisableCam() || lockSettings.getDisableMic() || lockSettings.getDisablePrivateChat()
|
roomLocked = lockSettings.isAnythingLocked();
|
||||||
|| lockSettings.getDisablePublicChat() || lockSettings.getLockedLayout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function lockSettings():void {
|
private function lockSettings():void {
|
||||||
@ -286,7 +284,7 @@
|
|||||||
dispatcher.dispatchEvent(event);
|
dispatcher.dispatchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function unlockAll():void {
|
/*private function unlockAll():void {
|
||||||
LogUtil.traceObject("Action: unlockAll");
|
LogUtil.traceObject("Action: unlockAll");
|
||||||
if (amIModerator) {
|
if (amIModerator) {
|
||||||
if (roomLocked) {
|
if (roomLocked) {
|
||||||
@ -325,6 +323,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
private function handleMeetingMuted(e:MeetingMutedEvent):void {
|
private function handleMeetingMuted(e:MeetingMutedEvent):void {
|
||||||
roomMuted = MeetingModel.getInstance().meetingMuted;
|
roomMuted = MeetingModel.getInstance().meetingMuted;
|
||||||
|
21
bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarButton.mxml
Normal file → Executable file
21
bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarButton.mxml
Normal file → Executable file
@ -63,36 +63,28 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
|
|
||||||
private var dispatcher:Dispatcher;
|
private var dispatcher:Dispatcher;
|
||||||
|
private var _this:Button ;
|
||||||
|
|
||||||
public function lockSettingsChanged(e:*):void{
|
public function lockSettingsChanged(e:*):void{
|
||||||
if (UsersUtil.amIModerator() || UsersUtil.amIPresenter()){
|
|
||||||
// Ignore lock setting changes as
|
|
||||||
// or presenter we are moderator.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var userManager:UserManager = UserManager.getInstance();
|
var userManager:UserManager = UserManager.getInstance();
|
||||||
var conference:Conference = userManager.getConference();
|
var conference:Conference = userManager.getConference();
|
||||||
var me:BBBUser = conference.getMyUser();
|
var me:BBBUser = conference.getMyUser();
|
||||||
|
|
||||||
this.visible = !me.disableMyCam;
|
_this.visible = !me.disableMyCam;
|
||||||
this.includeInLayout = !me.disableMyCam;
|
_this.includeInLayout = !me.disableMyCam;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function init():void{
|
private function init():void{
|
||||||
|
_this = this;
|
||||||
dispatcher = new Dispatcher();
|
dispatcher = new Dispatcher();
|
||||||
this.toolTip = ResourceUtil.getInstance().getString('bbb.toolbar.video.toolTip.start');
|
this.toolTip = ResourceUtil.getInstance().getString('bbb.toolbar.video.toolTip.start');
|
||||||
this.styleName = "webcamDefaultButtonStyle";
|
this.styleName = "webcamDefaultButtonStyle";
|
||||||
this.enabled = true;
|
this.enabled = true;
|
||||||
this.selected = false;
|
this.selected = false;
|
||||||
_currentState = OFF_STATE;
|
_currentState = OFF_STATE;
|
||||||
lockSettingsChanged(null);
|
lockSettingsChanged(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function set isPresenter(presenter:Boolean):void {
|
|
||||||
visible = presenter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function remoteClick(e:ShortcutEvent):void{
|
public function remoteClick(e:ShortcutEvent):void{
|
||||||
openPublishWindow();
|
openPublishWindow();
|
||||||
dispatchEvent(new ShortcutEvent(ShortcutEvent.REMOTE_FOCUS_WEBCAM));
|
dispatchEvent(new ShortcutEvent(ShortcutEvent.REMOTE_FOCUS_WEBCAM));
|
||||||
@ -114,6 +106,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function set isPresenter (presenter:Boolean):void{
|
||||||
|
//Nothing
|
||||||
|
}
|
||||||
|
|
||||||
private function openPublishWindow():void{
|
private function openPublishWindow():void{
|
||||||
if(_currentState == ON_STATE) {
|
if(_currentState == ON_STATE) {
|
||||||
|
@ -221,7 +221,12 @@ Handlebars.registerHelper "visibility", (section) ->
|
|||||||
# Meteor.call('userToggleCam', context._id, !context.sharingVideo)
|
# Meteor.call('userToggleCam', context._id, !context.sharingVideo)
|
||||||
|
|
||||||
@toggleChatbar = ->
|
@toggleChatbar = ->
|
||||||
setInSession "display_chatbar", !getInSession "display_chatbar"
|
if getInSession("display_chatbar") and isOnlyOnePanelOpen()
|
||||||
|
setInSession "display_usersList", true
|
||||||
|
setInSession "display_whiteboard", true
|
||||||
|
setInSession "display_chatbar", true
|
||||||
|
else
|
||||||
|
setInSession "display_chatbar", !getInSession "display_chatbar"
|
||||||
setTimeout(redrawWhiteboard, 0)
|
setTimeout(redrawWhiteboard, 0)
|
||||||
|
|
||||||
@toggleMic = (event) ->
|
@toggleMic = (event) ->
|
||||||
@ -234,7 +239,12 @@ Handlebars.registerHelper "visibility", (section) ->
|
|||||||
|
|
||||||
# toggle state of session variable
|
# toggle state of session variable
|
||||||
@toggleUsersList = ->
|
@toggleUsersList = ->
|
||||||
setInSession "display_usersList", !getInSession "display_usersList"
|
if getInSession("display_usersList") and isOnlyOnePanelOpen()
|
||||||
|
setInSession "display_usersList", true
|
||||||
|
setInSession "display_whiteboard", true
|
||||||
|
setInSession "display_chatbar", true
|
||||||
|
else
|
||||||
|
setInSession "display_usersList", !getInSession "display_usersList"
|
||||||
setTimeout(redrawWhiteboard, 0)
|
setTimeout(redrawWhiteboard, 0)
|
||||||
|
|
||||||
@toggleVoiceCall = (event) ->
|
@toggleVoiceCall = (event) ->
|
||||||
@ -250,7 +260,12 @@ Handlebars.registerHelper "visibility", (section) ->
|
|||||||
return false
|
return false
|
||||||
|
|
||||||
@toggleWhiteBoard = ->
|
@toggleWhiteBoard = ->
|
||||||
setInSession "display_whiteboard", !getInSession "display_whiteboard"
|
if getInSession("display_whiteboard") and isOnlyOnePanelOpen()
|
||||||
|
setInSession "display_usersList", true
|
||||||
|
setInSession "display_whiteboard", true
|
||||||
|
setInSession "display_chatbar", true
|
||||||
|
else
|
||||||
|
setInSession "display_whiteboard", !getInSession "display_whiteboard"
|
||||||
setTimeout(redrawWhiteboard, 0)
|
setTimeout(redrawWhiteboard, 0)
|
||||||
|
|
||||||
@toggleSlidingMenu = ->
|
@toggleSlidingMenu = ->
|
||||||
@ -306,7 +321,10 @@ Handlebars.registerHelper "visibility", (section) ->
|
|||||||
# assign the default values for the Session vars
|
# assign the default values for the Session vars
|
||||||
@setDefaultSettings = ->
|
@setDefaultSettings = ->
|
||||||
# console.log "in setDefaultSettings"
|
# console.log "in setDefaultSettings"
|
||||||
setInSession "display_usersList", true
|
if isLandscapeMobile()
|
||||||
|
setInSession "display_usersList", false
|
||||||
|
else
|
||||||
|
setInSession "display_usersList", true
|
||||||
setInSession "display_navbar", true
|
setInSession "display_navbar", true
|
||||||
setInSession "display_chatbar", true
|
setInSession "display_chatbar", true
|
||||||
setInSession "display_whiteboard", true
|
setInSession "display_whiteboard", true
|
||||||
@ -346,6 +364,7 @@ Handlebars.registerHelper "visibility", (section) ->
|
|||||||
@listSessionVars = ->
|
@listSessionVars = ->
|
||||||
console.log SessionAmplify.keys
|
console.log SessionAmplify.keys
|
||||||
|
|
||||||
|
|
||||||
# Checks if the view is portrait and a mobile device is being used
|
# Checks if the view is portrait and a mobile device is being used
|
||||||
@isPortraitMobile = () ->
|
@isPortraitMobile = () ->
|
||||||
window.matchMedia('(orientation: portrait)').matches and # browser is portrait
|
window.matchMedia('(orientation: portrait)').matches and # browser is portrait
|
||||||
@ -355,4 +374,21 @@ Handlebars.registerHelper "visibility", (section) ->
|
|||||||
navigator.userAgent.match(/BlackBerry/i) or
|
navigator.userAgent.match(/BlackBerry/i) or
|
||||||
navigator.userAgent.match(/Opera Mini/i) or
|
navigator.userAgent.match(/Opera Mini/i) or
|
||||||
navigator.userAgent.match(/IEMobile/i) or
|
navigator.userAgent.match(/IEMobile/i) or
|
||||||
navigator.userAgent.match(/webOS/i))
|
navigator.userAgent.match(/webOS/i))
|
||||||
|
|
||||||
|
# Checks if the view is landscape and mobile device is being used
|
||||||
|
@isLandscapeMobile = () ->
|
||||||
|
window.matchMedia('(orientation: landscape)').matches and # browser is landscape
|
||||||
|
window.matchMedia('(min-device-aspect-ratio: 1/1)').matches and # device is landscape
|
||||||
|
(navigator.userAgent.match(/Android/i) or # device is one of the mobile gadgets
|
||||||
|
navigator.userAgent.match(/iPad/i) or
|
||||||
|
navigator.userAgent.match(/iPhone/i) or
|
||||||
|
navigator.userAgent.match(/iPod/i) or
|
||||||
|
navigator.userAgent.match(/Windows Phone/i) or
|
||||||
|
navigator.userAgent.match(/BlackBerry/i) or
|
||||||
|
navigator.userAgent.match(/webOS/i))
|
||||||
|
|
||||||
|
# Checks if only one panel (userlist/whiteboard/chatbar) is currently open
|
||||||
|
@isOnlyOnePanelOpen = () ->
|
||||||
|
#(getInSession "display_usersList" ? 1 : 0) + (getInSession "display_whiteboard" ? 1 : 0) + (getInSession "display_chatbar" ? 1 : 0) is 1
|
||||||
|
getInSession("display_usersList") + getInSession("display_whiteboard") + getInSession("display_chatbar") is 1
|
||||||
|
@ -18,7 +18,7 @@ config.maxChatLength = 140
|
|||||||
config.app = {}
|
config.app = {}
|
||||||
|
|
||||||
# server ip
|
# server ip
|
||||||
config.app.logOutUrl = "http://192.168.0.119/demo/demoHTML5.jsp" # TODO temporary
|
config.app.logOutUrl = "http://192.168.0.215/demo/demoHTML5.jsp" # TODO temporary
|
||||||
|
|
||||||
#default font sizes for mobile / desktop
|
#default font sizes for mobile / desktop
|
||||||
config.app.mobileFont = 24
|
config.app.mobileFont = 24
|
||||||
|
Loading…
Reference in New Issue
Block a user