diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java index 50a831fa4594fa088de11aad4ddf0b53967f6a0e..b0570c7fe1ee78f534616651b15dc3daaeaa980c 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java @@ -45,7 +45,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { @Override public boolean appStart(IScope app) { - log.debug("Starting BigBlueButton version {}", version); + log.debug("Starting BigBlueButton version " + version); IContext context = app.getContext(); appCtx = (AbstractApplicationContext) context.getApplicationContext(); appCtx.addApplicationListener(new ShutdownHookListener()); @@ -55,13 +55,13 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { @Override public void appStop(IScope app) { - log.debug("Stopping BigBlueButton version {}", version); + log.debug("Stopping BigBlueButton version " + version); super.appStop(app); } @Override public boolean roomStart(IScope room) { - log.debug("Starting room [{}].", room.getName()); + log.debug("Starting room [" + room.getName() + "]."); assert participantsApplication != null; return super.roomStart(room); @@ -69,7 +69,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { @Override public void roomStop(IScope room) { - log.debug("Stopping room [{}]", room.getName()); + log.debug("Stopping room [" + room.getName() + "]."); super.roomStop(room); assert participantsApplication != null; participantsApplication.destroyRoom(room.getName()); @@ -82,7 +82,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { assert recorderApplication != null; recorderApplication.destroyRecordSession(bbbSession.getSessionName()); - log.debug("Stopped room [{}]", room.getName()); + log.debug("Stopped room [" + room.getName() + "]."); } @Override @@ -90,7 +90,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { String remoteHost = Red5.getConnectionLocal().getRemoteAddress(); int remotePort = Red5.getConnectionLocal().getRemotePort(); String clientId = Red5.getConnectionLocal().getClient().getId(); - log.info("[clientid={}] connected from {}.", clientId, remoteHost + ":" + remotePort); + log.info("[clientid=" + clientId + "] connected from " + remoteHost + ":" + remotePort + "."); String username = ((String) params[0]).toString(); String role = ((String) params[1]).toString(); @@ -107,7 +107,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { String room = sessionName; assert recorderApplication != null; boolean record = (Boolean)params[5]; - log.debug("record value - [{}]", record); + log.debug("record value - [" + record + "]"); String externUserID = ((String) params[6]).toString(); @@ -132,17 +132,17 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { String remoteHost = Red5.getConnectionLocal().getRemoteAddress(); int remotePort = Red5.getConnectionLocal().getRemotePort(); String clientId = Red5.getConnectionLocal().getClient().getId(); - log.info("[clientid={}] disconnnected from {}.", clientId, remoteHost + ":" + remotePort); + log.info("[clientid=" + clientId + "] disconnnected from " + remoteHost + ":" + remotePort + "."); BigBlueButtonSession bbbSession = (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION); - log.info("User [{}] disconnected from room [{}]", bbbSession.getUsername(), bbbSession.getRoom()); + log.info("User [" + bbbSession.getUsername() + "] disconnected from room [" + bbbSession.getRoom() +"]"); super.roomDisconnect(conn); } public String getMyUserId() { BigBlueButtonSession bbbSession = (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION); assert bbbSession != null; - return bbbSession.getUserid()+""; + return Long.toString(bbbSession.getUserid()); } public void setParticipantsApplication(ParticipantsApplication a) { diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/ParticipantUpdatingRoomListener.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/ParticipantUpdatingRoomListener.java index 423a396c1036a5c95130ae1e1ef3a794389f058d..0e58ff8969f6849bb60fa9f4a8a7eafcaaa668f5 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/ParticipantUpdatingRoomListener.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/ParticipantUpdatingRoomListener.java @@ -56,7 +56,7 @@ public class ParticipantUpdatingRoomListener implements IRoomListener{ Gson gson= new Gson(); messagingService.send(MessagingConstants.PARTICIPANTS_CHANNEL, gson.toJson(map)); - log.debug("Publishing a status change in:{}",this.room.getName()); + log.debug("Publishing a status change in: " + this.room.getName()); } } @@ -71,7 +71,7 @@ public class ParticipantUpdatingRoomListener implements IRoomListener{ Gson gson= new Gson(); messagingService.send(MessagingConstants.PARTICIPANTS_CHANNEL, gson.toJson(map)); - log.debug("Publishing message participant joined in {}",this.room.getName()); + log.debug("Publishing message participant joined in " + this.room.getName()); } } @@ -84,7 +84,7 @@ public class ParticipantUpdatingRoomListener implements IRoomListener{ Gson gson= new Gson(); messagingService.send(MessagingConstants.PARTICIPANTS_CHANNEL, gson.toJson(map)); - log.debug("Publishing message participant left in {}",this.room.getName()); + log.debug("Publishing message participant left in " + this.room.getName()); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/Room.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/Room.java index 8ac498796f13d965374e30579a9257114efa1661..ca848e77db5be1b2f5df23a610fd1d94dc3526e3 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/Room.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/Room.java @@ -67,16 +67,14 @@ public class Room implements Serializable { public void addParticipant(Participant participant) { synchronized (this) { - log.debug("adding participant {}",participant.getUserid()); + log.debug("adding participant " + participant.getUserid()); participants.put(participant.getUserid(), participant); // unmodifiableMap = Collections.unmodifiableMap(participants) } - log.debug("addparticipant - informing roomlisteners {}",listeners.size()); + log.debug("Informing roomlisteners " + listeners.size()); for (Iterator it = listeners.values().iterator(); it.hasNext();) { - //for (IRoomListener listener : listeners) { - log.debug("calling participantJoined on listener"); IRoomListener listener = (IRoomListener) it.next(); - log.debug("calling participantJoined on listener {}",listener.getName()); + log.debug("calling participantJoined on listener " + listener.getName()); listener.participantJoined(participant); } } @@ -92,9 +90,8 @@ public class Room implements Serializable { } if (present) { for (Iterator it = listeners.values().iterator(); it.hasNext();) { - log.debug("calling participantLeft on listener"); IRoomListener listener = (IRoomListener) it.next(); - log.debug("calling participantLeft on listener {}",listener.getName()); + log.debug("calling participantLeft on listener " + listener.getName()); listener.participantLeft(userid); } } @@ -114,9 +111,8 @@ public class Room implements Serializable { } if (present) { for (Iterator it = listeners.values().iterator(); it.hasNext();) { - log.debug("calling participantStatusChange on listener"); IRoomListener listener = (IRoomListener) it.next(); - log.debug("calling participantStatusChange on listener {}",listener.getName()); + log.debug("calling participantStatusChange on listener " + listener.getName()); listener.participantStatusChange(userid, status, value); } } @@ -125,7 +121,7 @@ public class Room implements Serializable { public void endAndKickAll() { for (Iterator it = listeners.values().iterator(); it.hasNext();) { IRoomListener listener = (IRoomListener) it.next(); - log.debug("calling endAndKickAll on listener {}",listener.getName()); + log.debug("calling endAndKickAll on listener " + listener.getName()); listener.endAndKickAll(); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/RoomsManager.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/RoomsManager.java index 9249762e6506bd5d9c7c0453981b84687db9c82a..a3bd994871b504f712426154254e88131d89f76a 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/RoomsManager.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/RoomsManager.java @@ -47,7 +47,7 @@ public class RoomsManager { } public void addRoom(Room room) { - log.debug("Adding room {}", room.getName()); + log.debug("Adding room " + room.getName()); room.addRoomListener(new ParticipantUpdatingRoomListener(room,messagingService)); if (checkPublisher()) { @@ -64,7 +64,7 @@ public class RoomsManager { } public void removeRoom(String name) { - log.debug("Remove room {}", name); + log.debug("Remove room " + name); Room room = rooms.remove(name); if (checkPublisher() && room != null) { room.endAndKickAll(); @@ -104,7 +104,7 @@ public class RoomsManager { */ //TODO: this method becomes public for ParticipantsApplication, ask if it's right? public Room getRoom(String name) { - log.debug("Get room {}", name); + log.debug("Get room " + name); return rooms.get(name); } @@ -113,7 +113,7 @@ public class RoomsManager { if (r != null) { return r.getParticipants(); } - log.warn("Getting participants from a non-existing room {}", roomName); + log.warn("Getting participants from a non-existing room " + roomName); return null; } @@ -123,7 +123,7 @@ public class RoomsManager { r.addRoomListener(listener); return; } - log.warn("Adding listener to a non-existing room {}", roomName); + log.warn("Adding listener to a non-existing room " + roomName); } // TODO: this must be broken, right? where is roomName? (JRT: 9/25/2009) @@ -138,7 +138,7 @@ public class RoomsManager { // } public void addParticipant(String roomName, Participant participant) { - log.debug("Add participant {}", participant.getName()); + log.debug("Add participant " + participant.getName()); Room r = getRoom(roomName); if (r != null) { /* if (checkPublisher()) { @@ -158,11 +158,11 @@ public class RoomsManager { return; } - log.warn("Adding participant to a non-existing room {}", roomName); + log.warn("Adding participant to a non-existing room " + roomName); } public void removeParticipant(String roomName, Long userid) { - log.debug("Remove participant {} from {}", userid, roomName); + log.debug("Remove participant " + userid + " from " + roomName); Room r = getRoom(roomName); if (r != null) { if (checkPublisher()) { @@ -173,17 +173,17 @@ public class RoomsManager { return; } - log.warn("Removing listener from a non-existing room ${roomName}"); + log.warn("Removing listener from a non-existing room " + roomName); } public void changeParticipantStatus(String roomName, Long userid, String status, Object value) { - log.debug("Change participant status {} - {} [" + value + "]", userid, status); + log.debug("Change participant status " + userid + " - " + status + " [" + value + "]"); Room r = getRoom(roomName); if (r != null) { r.changeParticipantStatus(userid, status, value); return; } - log.warn("Changing participant status on a non-existing room {}", roomName); + log.warn("Changing participant status on a non-existing room " + roomName); } public void setMessagingService(MessagingService messagingService) { @@ -199,12 +199,12 @@ public class RoomsManager { @Override public void endMeetingRequest(String meetingId) { - log.debug("End meeting request for room: {} ", meetingId); + log.debug("End meeting request for room: " + meetingId); Room room = getRoom(meetingId); // must do this because the room coming in is serialized (no transient values are present) if (room != null) room.endAndKickAll(); else - log.debug("Could not find room {}", meetingId); + log.debug("Could not find room " + meetingId); } @Override diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatApplication.java index c31f1c247dbcfd229ce371b62cea5f5ea1d63092..d80c72d65e270dc7d9204694ad1b8ee2cc3cebc3 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatApplication.java @@ -55,7 +55,7 @@ public class ChatApplication { roomsManager.addRoomListener(room, listener); return true; } - log.warn("Adding listener to a non-existant room {}", room); + log.warn("Adding listener to a non-existant room " + room); return false; } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java index 843689835a3e957668ad2eb564fab166cd0738d9..72a99faee66deda2c50fd42e9e4f5b832e161ed7 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java @@ -57,25 +57,25 @@ public class ChatHandler extends ApplicationAdapter implements IApplication{ @Override public boolean appJoin(IClient client, IScope scope) { - log.debug("appJoin: {}", scope.getName()); + log.debug("appJoin: " + scope.getName()); return true; } @Override public void appLeave(IClient client, IScope scope) { - log.debug("appLeave: {}", scope.getName()); + log.debug("appLeave: " + scope.getName()); } @Override public boolean appStart(IScope scope) { this.scope = scope; - log.debug("appStart: {}", scope.getName()); + log.debug("appStart: " + scope.getName()); return true; } @Override public void appStop(IScope scope) { - log.debug("appStop: {}", scope.getName()); + log.debug("appStop: " + scope.getName()); } @Override @@ -85,7 +85,7 @@ public class ChatHandler extends ApplicationAdapter implements IApplication{ log.debug("Setting up recorder"); ChatMessageSender messageSender = new ChatMessageSender(so); ChatEventRecorder recorder = new ChatEventRecorder(connection.getScope().getName(), recorderApplication); - log.debug("adding event recorder to {}", connection.getScope().getName()); + log.debug("adding event recorder to " + connection.getScope().getName()); log.debug("Adding room listener"); chatApplication.addRoomListener(connection.getScope().getName(), recorder); chatApplication.addRoomListener(connection.getScope().getName(), messageSender); @@ -100,25 +100,25 @@ public class ChatHandler extends ApplicationAdapter implements IApplication{ @Override public boolean roomJoin(IClient client, IScope scope) { - log.debug("roomJoin {}", scope.getName(), scope.getParent().getName()); + log.debug("roomJoin " + scope.getName(), scope.getParent().getName()); return true; } @Override public void roomLeave(IClient client, IScope scope) { - log.debug("roomLeave: {}", scope.getName()); + log.debug("roomLeave: " + scope.getName()); } @Override public boolean roomStart(IScope scope) { - log.debug("roomStart {}", scope.getName()); + log.debug("roomStart " + scope.getName()); chatApplication.createRoom(scope.getName()); if (!hasSharedObject(scope, CHAT_SO)) { if (createSharedObject(scope, CHAT_SO, false)) { return true; } } - log.error("Failed to start room {}", scope.getName()); + log.error("Failed to start room " + scope.getName()); return false; } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatMessageSender.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatMessageSender.java index 59801c65ecafce29fe291efcfd1308df44d856a4..be1a4e06b279beaff0eec741a20de5dfbbb8a55d 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatMessageSender.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatMessageSender.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.bigbluebutton.conference.service.chat.IChatRoomListener; import org.red5.server.api.so.ISharedObject; +import org.red5.server.api.statistics.ISharedObjectStatistics; import org.slf4j.Logger; import org.red5.logging.Red5LoggerFactory; @@ -38,13 +39,19 @@ private static Logger log = Red5LoggerFactory.getLogger( ChatMessageSender.class this.so = so; } - @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void newChatMessage(String message) { - log.debug("New chat message..."); - List list=new ArrayList(); + List<String> list = new ArrayList<String>(); list.add(message); + log.debug("Sending public chat message [" + message + "]"); + if (so.isLocked()) log.info("Chat message SO is locked"); + if (so.isAcquired()) log.info("Chat message SO is acquired"); + ISharedObjectStatistics stats = so.getStatistics(); + log.debug("Before: Chat SO stats [total-sends=" + stats.getTotalSends() + "]"); so.sendMessage("newChatMessage", list); + log.debug("After: Chat SO stats [total-sends=" + stats.getTotalSends() + "]"); + if (so.isLocked()) log.info("Chat message SO is locked"); + if (so.isAcquired()) log.info("Chat message SO is acquired"); } @Override diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoom.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoom.java index 69197d46541a5e66814a932ef2cc36dc35690426..3699e164b625c660db3481460f38cc7153a1217f 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoom.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoom.java @@ -70,7 +70,7 @@ public class ChatRoom { for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IChatRoomListener listener = (IChatRoomListener) iter.next(); - log.debug("calling newChatMessage on listener {}",listener.getName()); + log.debug("calling newChatMessage on listener " + listener.getName()); listener.newChatMessage(msg); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoomsManager.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoomsManager.java index a5f21f8d5e88a86af5c38336675e2a4d276120dc..eb4fb4894c3065244b81ef816bf46e88e0ef4915 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoomsManager.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatRoomsManager.java @@ -40,17 +40,17 @@ public class ChatRoomsManager { } public void addRoom(ChatRoom room) { - log.debug("In ChatRoomsManager adding room {}", room.getName()); + log.debug("In ChatRoomsManager adding room " + room.getName()); rooms.put(room.getName(), room); } public void removeRoom(String name) { - log.debug("In ChatRoomsManager remove room {}", name); + log.debug("In ChatRoomsManager remove room " + name); rooms.remove(name); } public boolean hasRoom(String name) { - log.debug("In ChatRoomsManager has Room {}", name); + log.debug("In ChatRoomsManager has Room " + name); return rooms.containsKey(name); } @@ -59,7 +59,7 @@ public class ChatRoomsManager { * Keeping getRoom private so that all access to ChatRoom goes through here. */ private ChatRoom getRoom(String name) { - log.debug("In ChatRoomsManager get room {}", name); + log.debug("In ChatRoomsManager get room " + name); return rooms.get(name); } @@ -68,7 +68,7 @@ public class ChatRoomsManager { if (r != null) { return r.getChatMessages(); } - log.warn("Getting messages from a non-existing room {}", room); + log.warn("Getting messages from a non-existing room " + room); return null; } @@ -77,7 +77,7 @@ public class ChatRoomsManager { if (r != null) { r.sendMessage(message); } else { - log.warn("Sending message to a non-existing room {}", room); + log.warn("Sending message to a non-existing room " + room); } } @@ -87,7 +87,7 @@ public class ChatRoomsManager { r.addRoomListener(listener); return; } - log.warn("Adding listener to a non-existing room {}", roomName); + log.warn("Adding listener to a non-existing room " + roomName); } //TODO: roomName? diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatService.java index d54bd8e57a80b421bab99f493ec2cc68d8e51763..d1bdcef3d2825f42e72bbb4ec3c482967d45c173 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatService.java @@ -44,12 +44,17 @@ public class ChatService { application = a; } - public void privateMessage(String message, String sender, String recepient){ - log.debug("Received private message: " + message + " from " + sender + " to " + recepient + " The client scope is: " + Red5.getConnectionLocal().getScope().getName()); - ISharedObject sharedObject = application.handler.getSharedObject(Red5.getConnectionLocal().getScope(), recepient); - ArrayList<String> arguments = new ArrayList<String>(); - arguments.add(sender); - arguments.add(message); - sharedObject.sendMessage("messageReceived", arguments); + public void privateMessage(String message, String sender, String receiver){ + log.debug("Received private message: " + message + " from " + sender + " to " + receiver + ". The client scope is: " + Red5.getConnectionLocal().getScope().getName()); + ISharedObject sharedObject = application.handler.getSharedObject(Red5.getConnectionLocal().getScope(), receiver); + if (sharedObject != null) { + ArrayList<String> arguments = new ArrayList<String>(); + arguments.add(sender); + arguments.add(message); + sharedObject.sendMessage("messageReceived", arguments); + } else { + log.debug("Not sending private message from " + sender + " to " + receiver + " as the user may have already left."); + } + } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/messaging/RedisMessagingService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/messaging/RedisMessagingService.java index b909fd43efa647838a914ad0475fb9d84b292c68..b02f0f19800d695a7279129ca7f0e0633c5a0d94 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/messaging/RedisMessagingService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/messaging/RedisMessagingService.java @@ -68,7 +68,7 @@ public class RedisMessagingService implements MessagingService{ try { jedis.publish(channel, message); } catch(Exception e){ - log.warn("Cannot publish the message to redis",e); + log.warn("Cannot publish the message to redis", e); }finally{ redisPool.returnResource(jedis); } @@ -126,7 +126,7 @@ public class RedisMessagingService implements MessagingService{ @Override public void onPSubscribe(String pattern, int subscribedChannels) { - log.debug("Subscribed to the pattern:"+pattern); + log.debug("Subscribed to the pattern: " + pattern); } @Override diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java index 0b2ae654fac26e1c84dff376af81f556717f8adf..855b95bbb07cbc8b6176a3c5187a34904c52cd1d 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsApplication.java @@ -30,7 +30,7 @@ public class ParticipantsApplication { public boolean createRoom(String name) { if(!roomsManager.hasRoom(name)){ - log.info("Creating room {}", name); + log.info("Creating room " + name); roomsManager.addRoom(new Room(name)); return true; } @@ -39,10 +39,10 @@ public class ParticipantsApplication { public boolean destroyRoom(String name) { if (roomsManager.hasRoom(name)) { - log.info("Destroying room {}", name); + log.info("Destroying room " + name); roomsManager.removeRoom(name); } else { - log.warn("Destroying non-existing room {}", name); + log.warn("Destroying non-existing room " + name); } return true; } @@ -60,7 +60,7 @@ public class ParticipantsApplication { roomsManager.addRoomListener(room, listener); return true; } - log.warn("Adding listener to a non-existant room {}",room); + log.warn("Adding listener to a non-existant room " + room); return false; } @@ -71,7 +71,7 @@ public class ParticipantsApplication { public Map getParticipants(String roomName) { log.debug("getParticipants - " + roomName); if (! roomsManager.hasRoom(roomName)) { - log.warn("Could not find room "+roomName+" Total rooms "+roomsManager.numberOfRooms()); + log.warn("Could not find room " + roomName + ". Total rooms " + roomsManager.numberOfRooms()); return null; } @@ -82,7 +82,7 @@ public class ParticipantsApplication { log.debug("Participant " + userid + " leaving room " + roomName); if (roomsManager.hasRoom(roomName)) { Room room = roomsManager.getRoom(roomName); - log.debug("Removing "+ userid + " from room " + roomName); + log.debug("Removing " + userid + " from room " + roomName); room.removeParticipant(userid); return true; } @@ -97,10 +97,10 @@ public class ParticipantsApplication { Participant p = new Participant(userid, username, role, externUserID, status); Room room = roomsManager.getRoom(roomName); room.addParticipant(p); - log.debug(":participant joined room "+roomName); + log.debug("participant joined room " + roomName); return true; } - log.debug(":participant failed to join room"+roomName); + log.debug("participant failed to join room " + roomName); return false; } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsEventSender.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsEventSender.java index 7abaeea1fcfe0c113124012a5ab3d48b85380d0c..8fd1ff0ec6b0bd9035a32a35dff2a889afa77f03 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsEventSender.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsEventSender.java @@ -56,10 +56,10 @@ public class ParticipantsEventSender implements IRoomListener { @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void participantJoined(Participant p) { - log.debug("A participant has joined {}.",p.getUserid()); + log.debug("A participant has joined " + p.getUserid()); ArrayList args = new ArrayList(); args.add(p.toMap()); - log.debug("Sending participantJoined {} to client.",p.getUserid()); + log.debug("Sending participantJoined " + p.getUserid() + " to client."); so.sendMessage("participantJoined", args); } @@ -74,7 +74,7 @@ public class ParticipantsEventSender implements IRoomListener { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void participantStatusChange(Long userid, String status, Object value) { - log.debug("A participant's status has changed "+userid+" "+status+" "+value); + log.debug("A participant's status has changed " + userid + " " + status + " " + value); ArrayList args = new ArrayList(); args.add(userid); args.add(status); diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java index 1cc5b3a41cd0f6dd2797654ce4714eb981dc1472..3105204365acaaa1b0f63b4da655774f40f4cf7c 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java @@ -47,46 +47,46 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat @Override public boolean appConnect(IConnection conn, Object[] params) { - log.debug(APP+":appConnect"); + log.debug(APP + ":appConnect"); return true; } @Override public void appDisconnect(IConnection conn) { - log.debug( APP+":appDisconnect"); + log.debug( APP + ":appDisconnect"); } @Override public boolean appJoin(IClient client, IScope scope) { - log.debug( APP+":appJoin "+scope.getName()); + log.debug( APP + ":appJoin " + scope.getName()); return true; } @Override public void appLeave(IClient client, IScope scope) { - log.debug(APP+":appLeave "+scope.getName()); + log.debug(APP + ":appLeave " + scope.getName()); } @Override public boolean appStart(IScope scope) { - log.debug(APP+":appStart "+scope.getName()); + log.debug(APP + ":appStart " + scope.getName()); return true; } @Override public void appStop(IScope scope) { - log.debug(APP+":appStop "+scope.getName()); + log.debug(APP + ":appStop " + scope.getName()); } @Override public boolean roomConnect(IConnection connection, Object[] params) { - log.debug(APP+":roomConnect"); + log.debug(APP + ":roomConnect"); ISharedObject so = getSharedObject(connection.getScope(), PARTICIPANTS_SO); ParticipantsEventSender sender = new ParticipantsEventSender(so); ParticipantsEventRecorder recorder = new ParticipantsEventRecorder(connection.getScope().getName(), recorderApplication); - log.debug("Adding room listener {}", connection.getScope().getName()); + log.debug("Adding room listener " + connection.getScope().getName()); participantsApplication.addRoomListener(connection.getScope().getName(), recorder); participantsApplication.addRoomListener(connection.getScope().getName(), sender); log.debug("Done setting up recorder and listener"); @@ -96,19 +96,19 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat @Override public void roomDisconnect(IConnection connection) { - log.debug(APP+":roomDisconnect"); + log.debug(APP + ":roomDisconnect"); } @Override public boolean roomJoin(IClient client, IScope scope) { - log.debug(APP+":roomJoin "+scope.getName()+" - "+scope.getParent().getName()); + log.debug(APP + ":roomJoin " + scope.getName() + " - " + scope.getParent().getName()); participantJoin(); return true; } @Override public void roomLeave(IClient client, IScope scope) { - log.debug(APP+":roomLeave "+scope.getName()); + log.debug(APP + ":roomLeave " + scope.getName()); BigBlueButtonSession bbbSession = getBbbSession(); if (bbbSession == null) { log.debug("roomLeave - session is null"); @@ -126,7 +126,7 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat ParticipantsEventSender sender = new ParticipantsEventSender(so); ParticipantsEventRecorder recorder = new ParticipantsEventRecorder(scope.getName(), recorderApplication); - log.debug("Adding room listener {}", scope.getName()); + log.debug("Adding room listener " + scope.getName()); participantsApplication.addRoomListener(scope.getName(), recorder); participantsApplication.addRoomListener(scope.getName(), sender); log.debug("Done setting up recorder and listener"); @@ -134,20 +134,20 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat @Override public boolean roomStart(IScope scope) { - log.debug(APP+" - roomStart "+scope.getName()); + log.debug(APP + " - roomStart "+scope.getName()); // create ParticipantSO if it is not already created if (!hasSharedObject(scope, PARTICIPANTS_SO)) { if (createSharedObject(scope, PARTICIPANTS_SO, false)) { return true; } } - log.error("Failed to start room {}",scope.getName()); + log.error("Failed to start room " + scope.getName()); return false; } @Override public void roomStop(IScope scope) { - log.debug(APP+":roomStop "+scope.getName()); + log.debug(APP + ":roomStop " + scope.getName()); if (!hasSharedObject(scope, PARTICIPANTS_SO)) { clearSharedObjects(scope, PARTICIPANTS_SO); } @@ -155,30 +155,30 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat @SuppressWarnings("unchecked") public boolean participantJoin() { - log.debug(APP+":participantJoin - getting userid"); + log.debug(APP + ":participantJoin - getting userid"); BigBlueButtonSession bbbSession = getBbbSession(); if (bbbSession == null) { log.warn("bbb session is null"); } Long userid = bbbSession.getUserid(); - log.debug(APP+":participantJoin - userid "+userid); + log.debug(APP + ":participantJoin - userid " + userid); String username = bbbSession.getUsername(); - log.debug(APP+":participantJoin - username "+username); + log.debug(APP + ":participantJoin - username " + username); String role = bbbSession.getRole(); - log.debug(APP+":participantJoin - role "+role); + log.debug(APP + ":participantJoin - role " + role); String room = bbbSession.getRoom(); - log.debug(APP+":participantJoin - room "+room); + log.debug(APP + ":participantJoin - room " + room); String externUserID = bbbSession.getExternUserID(); - log.debug(APP+":participantJoin"); + log.debug(APP + ":participantJoin"); Map status = new HashMap(); status.put("raiseHand", false); status.put("presenter", false); status.put("hasStream", false); - log.debug(APP+":participantJoin setting status"); + log.debug(APP + ":participantJoin setting status"); return participantsApplication.participantJoin(room, userid, username, role, externUserID, status); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java index 0f008533d8789a36bb569efd8c8f4d43c509a02c..b09c66486c77671d8a818dba8368a006e9930d14 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsService.java @@ -38,17 +38,17 @@ public class ParticipantsService { @SuppressWarnings("unchecked") public Map getParticipants() { String roomName = Red5.getConnectionLocal().getScope().getName(); - log.debug("getting participants for {}",roomName); + log.debug("getting participants for " + roomName); Map p = application.getParticipants(roomName); - log.debug("getting participants for {}",roomName); + log.debug("getting participants for " + roomName); Map participants = new HashMap(); if (p == null) { participants.put("count", 0); - log.debug("partipants of {} is null",roomName); + log.debug("partipants of " + roomName + " is null"); } else { participants.put("count", p.size()); - log.debug("number of partipants is {}",p.size()); + log.debug("number of partipants is " + p.size()); if (p.size() > 0) { /** * Somehow we need to convert to Map so the client will be @@ -69,7 +69,7 @@ public class ParticipantsService { public void setParticipantStatus(Long userid, String status, Object value) { String roomName = Red5.getConnectionLocal().getScope().getName(); - log.debug("Setting participant status "+roomName+" "+userid+" "+status+" "+value); + log.debug("Setting participant status " + roomName + " " + userid + " " + status + " " + value); application.setParticipantStatus(roomName, userid, status, value); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/ConversionUpdatesMessageListener.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/ConversionUpdatesMessageListener.java index 5751716e2208c4e6475569db24e6aea52d9ec9b4..1ea9fcce29e9b0a7294c0bb8b7c83ad314ff8228 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/ConversionUpdatesMessageListener.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/ConversionUpdatesMessageListener.java @@ -64,7 +64,7 @@ public class ConversionUpdatesMessageListener { message.put("presentationName", presentationName); message.put("messageKey", messageKey); - log.debug("JMS: {}[{}]",messageKey,presentationName); + log.debug("Message: " + messageKey + "[ " + presentationName + "]"); if(messageKey.equalsIgnoreCase(OFFICE_DOC_CONVERSION_SUCCESS_KEY)|| messageKey.equalsIgnoreCase(OFFICE_DOC_CONVERSION_FAILED_KEY)|| @@ -73,11 +73,10 @@ public class ConversionUpdatesMessageListener { messageKey.equalsIgnoreCase(GENERATING_THUMBNAIL_KEY)|| messageKey.equalsIgnoreCase(GENERATED_THUMBNAIL_KEY)|| messageKey.equalsIgnoreCase(PAGE_COUNT_FAILED_KEY)){ - log.debug("message: {}[{}]",messageKey,presentationName); + conversionUpdatesProcessor.process(message); } else if(messageKey.equalsIgnoreCase(PAGE_COUNT_EXCEEDED_KEY)){ - log.debug("JMS: {}[{}]",messageKey,presentationName); String numberOfPages = (String) mapMessage.get("numberOfPages"); String maxNumberPages = (String) mapMessage.get("maxNumberPages"); message.put("numberOfPages", numberOfPages); @@ -90,13 +89,11 @@ public class ConversionUpdatesMessageListener { message.put("numberOfPages", numberOfPages); message.put("pagesCompleted", pagesCompleted); - log.debug("message: {}[{}]",messageKey,presentationName); conversionUpdatesProcessor.process(message); } else if(messageKey.equalsIgnoreCase(CONVERSION_COMPLETED_KEY)){ String slidesInfo = (String) mapMessage.get("slidesInfo"); message.put("slidesInfo", StringEscapeUtils.unescapeXml(slidesInfo)); - log.debug("message: {}[{}]",messageKey,presentationName); conversionUpdatesProcessor.process(message); } else{ diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationApplication.java index b0c11f9310a6b0e260fb314bec0a60b6022e918b..796f9687b4a91cf782068f5b9d9f95cb93195f67 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationApplication.java @@ -56,7 +56,7 @@ public class PresentationApplication { roomsManager.addRoomListener(room, listener); return true; } - log.warn("Adding listener to a non-existant room {}",room); + log.warn("Adding listener to a non-existant room " + room); return false; } @@ -67,14 +67,14 @@ public class PresentationApplication { roomsManager.sendUpdateMessage(message); return; } - log.warn("Sending update message to a non-existant room {}",room); + log.warn("Sending update message to a non-existant room " + room); } public ArrayList getCurrentPresenter(String room){ if (roomsManager.hasRoom(room)){ return roomsManager.getCurrentPresenter(room); } - log.warn("Getting presenter on a non-existant room {}",room); + log.warn("Getting presenter on a non-existant room " + room); return null; } @@ -82,7 +82,7 @@ public class PresentationApplication { if (roomsManager.hasRoom(room)){ return roomsManager.getPresentations(room); } - log.warn("Getting presentations on a non-existant room {}",room); + log.warn("Getting presentations on a non-existant room " + room); return null; } @@ -90,7 +90,7 @@ public class PresentationApplication { if (roomsManager.hasRoom(room)){ roomsManager.removePresentation(room, name); } else { - log.warn("Removing presentation from a non-existant room {}",room); + log.warn("Removing presentation from a non-existant room " + room); } } @@ -98,7 +98,7 @@ public class PresentationApplication { if (roomsManager.hasRoom(room)){ return roomsManager.getCurrentSlide(room); } - log.warn("Getting slide on a non-existant room {}",room); + log.warn("Getting slide on a non-existant room " + room); return -1; } @@ -106,7 +106,7 @@ public class PresentationApplication { if (roomsManager.hasRoom(room)){ return roomsManager.getCurrentPresentation(room); } - log.warn("Getting current presentation on a non-existant room {}",room); + log.warn("Getting current presentation on a non-existant room " + room); return null; } @@ -114,7 +114,7 @@ public class PresentationApplication { if (roomsManager.hasRoom(room)){ return roomsManager.getPresenterSettings(room); } - log.warn("Getting settings information on a non-existant room {}",room); + log.warn("Getting settings information on a non-existant room " + room); return null; } @@ -122,17 +122,17 @@ public class PresentationApplication { if (roomsManager.hasRoom(room)){ return roomsManager.getSharingPresentation(room); } - log.warn("Getting share information on a non-existant room {}",room); + log.warn("Getting share information on a non-existant room " + room); return null; } public void resizeAndMoveSlide(String room, Double xOffset, Double yOffset, Double widthRatio, Double heightRatio) { if (roomsManager.hasRoom(room)){ - log.debug("Request to resize and move slide["+xOffset+","+yOffset+","+widthRatio+","+heightRatio+"]"); + log.debug("Request to resize and move slide[" + xOffset + "," + yOffset + "," + widthRatio + "," + heightRatio + "]"); roomsManager.resizeAndMoveSlide(room, xOffset, yOffset, widthRatio, heightRatio); return; } - log.warn("resizeAndMoveSlide on a non-existant room {}",room); + log.warn("resizeAndMoveSlide on a non-existant room " + room); } public void assignPresenter(String room, ArrayList presenter){ @@ -140,25 +140,25 @@ public class PresentationApplication { roomsManager.assignPresenter(room, presenter); return; } - log.warn("Assigning presenter on a non-existant room {}",room); + log.warn("Assigning presenter on a non-existant room " + room); } public void gotoSlide(String room, int slide){ if (roomsManager.hasRoom(room)){ - log.debug("Request to go to slide {} for room {}",slide,room); + log.debug("Request to go to slide " + slide + " for room " + room); roomsManager.gotoSlide(room, slide); return; } - log.warn("Changing slide on a non-existant room {}",room); + log.warn("Changing slide on a non-existant room " + room); } public void sharePresentation(String room, String presentationName, Boolean share){ if (roomsManager.hasRoom(room)){ - log.debug("Request to share presentation "+presentationName+" "+share+" for room "+room); + log.debug("Request to share presentation " + presentationName + " " + share + " for room " + room); roomsManager.sharePresentation(room, presentationName, share); return; } - log.warn("Sharing presentation on a non-existant room {}",room); + log.warn("Sharing presentation on a non-existant room " + room); } public void setRoomsManager(PresentationRoomsManager r) { diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationEventSender.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationEventSender.java index 027633f05b1f0cf843145bc2e353b4f2457e575a..b4eb4855069a5cf3f4b77bbd1b7583c0aeabad7d 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationEventSender.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationEventSender.java @@ -81,6 +81,8 @@ public class PresentationEventSender implements IPresentationRoomListener { list.add(presentationName); list.add(messageKey); + log.debug("message " + messageKey + "[" + presentationName + "]"); + if(messageKey.equalsIgnoreCase(OFFICE_DOC_CONVERSION_SUCCESS_KEY)|| messageKey.equalsIgnoreCase(OFFICE_DOC_CONVERSION_FAILED_KEY)|| messageKey.equalsIgnoreCase(SUPPORTED_DOCUMENT_KEY)|| @@ -88,25 +90,21 @@ public class PresentationEventSender implements IPresentationRoomListener { messageKey.equalsIgnoreCase(GENERATING_THUMBNAIL_KEY)|| messageKey.equalsIgnoreCase(GENERATED_THUMBNAIL_KEY)|| messageKey.equalsIgnoreCase(PAGE_COUNT_FAILED_KEY)){ - log.debug("{}[{}]",messageKey,presentationName); + // no extra data to send so.sendMessage("conversionUpdateMessageCallback", list); } else if(messageKey.equalsIgnoreCase(PAGE_COUNT_EXCEEDED_KEY)){ - log.debug("{}[{}]",messageKey,presentationName); list.add(message.get("numberOfPages")); list.add(message.get("maxNumberPages")); so.sendMessage("pageCountExceededUpdateMessageCallback", list); } else if(messageKey.equalsIgnoreCase(GENERATED_SLIDE_KEY)){ - log.debug("{}[{}]",messageKey,presentationName); list.add(message.get("numberOfPages")); list.add(message.get("pagesCompleted")); so.sendMessage("generatedSlideUpdateMessageCallback", list); - //recordEvent(parsePresentationToXML(list, this.RECORD_EVENT_GENERATED_SLIDE)); } else if(messageKey.equalsIgnoreCase(CONVERSION_COMPLETED_KEY)){ - log.debug("{}[{}]",messageKey,presentationName); list.add(message.get("slidesInfo")); so.sendMessage("conversionCompletedUpdateMessageCallback", list); } @@ -118,7 +116,7 @@ public class PresentationEventSender implements IPresentationRoomListener { @SuppressWarnings("unchecked") public void removePresentation(String name){ - log.debug("calling removePresentationCallback {}",name); + log.debug("calling removePresentationCallback " + name); ArrayList list=new ArrayList(); list.add(name); so.sendMessage("removePresentationCallback", list); @@ -126,7 +124,7 @@ public class PresentationEventSender implements IPresentationRoomListener { @SuppressWarnings("unchecked") public void gotoSlide(int slide){ - log.debug("calling gotoSlideCallback {}",slide); + log.debug("calling gotoSlideCallback " + slide); ArrayList list=new ArrayList(); list.add(slide); so.sendMessage("gotoSlideCallback", list); @@ -135,7 +133,7 @@ public class PresentationEventSender implements IPresentationRoomListener { @SuppressWarnings("unchecked") @Override public void sharePresentation(String presentationName, Boolean share){ - log.debug("calling sharePresentationCallback {} {}",presentationName,share); + log.debug("calling sharePresentationCallback " + presentationName + " " + share); ArrayList list=new ArrayList(); list.add(presentationName); list.add(share); @@ -145,14 +143,14 @@ public class PresentationEventSender implements IPresentationRoomListener { @SuppressWarnings("unchecked") @Override public void assignPresenter(ArrayList presenter) { - log.debug("calling assignPresenterCallback "+presenter.get(0)+", "+presenter.get(1)+" "+presenter.get(2)); + log.debug("calling assignPresenterCallback " + presenter.get(0) + ", " + presenter.get(1) + " " + presenter.get(2)); so.sendMessage("assignPresenterCallback", presenter); } @SuppressWarnings("unchecked") @Override public void resizeAndMoveSlide(Double xOffset, Double yOffset, Double widthRatio, Double heightRatio) { - log.debug("calling moveCallback["+xOffset+","+yOffset+","+widthRatio+","+heightRatio+"]"); + log.debug("calling moveCallback[" + xOffset + "," + yOffset + "," + widthRatio + "," + heightRatio + "]"); ArrayList list=new ArrayList(); list.add(xOffset); list.add(yOffset); diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java index 0bb3b2c11713525c13f81179e9371a5f53d2b36d..ecac7124ecc9710939d83efa583830302dcea940 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java @@ -53,43 +53,42 @@ public class PresentationHandler extends ApplicationAdapter implements IApplicat @Override public boolean appConnect(IConnection conn, Object[] params) { - log.debug("{}:appConnect",APP); + log.debug(APP + ":appConnect"); return true; } @Override public void appDisconnect(IConnection conn) { - log.debug( "{}:appDisconnect",APP); + log.debug(APP + ":appDisconnect"); } @Override public boolean appJoin(IClient client, IScope scope) { - log.debug( "{}:appJoin {}",APP,scope.getName()); + log.debug(APP + ":appJoin " + scope.getName()); return true; } @Override public void appLeave(IClient client, IScope scope) { - log.debug("{}:appLeave {}",APP,scope.getName()); - + log.debug(APP + ":appLeave " + scope.getName()); } @Override public boolean appStart(IScope scope) { - log.debug("{}:appStart {}",APP,scope.getName()); + log.debug(APP + ":appStart " + scope.getName()); conversionUpdatesMessageListener.start(); return true; } @Override public void appStop(IScope scope) { - log.debug("{}:appStop {}",APP,scope.getName()); + log.debug(APP + ":appStop " + scope.getName()); conversionUpdatesMessageListener.stop(); } @Override public boolean roomConnect(IConnection connection, Object[] params) { - log.debug("{}:roomConnect",APP); + log.debug(APP + ":roomConnect"); log.debug("In live mode"); ISharedObject so = getSharedObject(connection.getScope(), PRESENTATION_SO); @@ -107,28 +106,28 @@ public class PresentationHandler extends ApplicationAdapter implements IApplicat @Override public void roomDisconnect(IConnection connection) { - log.debug("{}:roomDisconnect",APP); + log.debug(APP + ":roomDisconnect"); } @Override public boolean roomJoin(IClient client, IScope scope) { - log.debug(APP+":roomJoin "+scope.getName()+" - "+scope.getParent().getName()); + log.debug(APP + ":roomJoin " + scope.getName() + " - " + scope.getParent().getName()); return true; } @Override public void roomLeave(IClient client, IScope scope) { - log.debug("{}:roomLeave {}",APP,scope.getName()); + log.debug(APP + ":roomLeave " + scope.getName()); } @Override public boolean roomStart(IScope scope) { - log.debug("{} - roomStart {}",APP,scope.getName()); + log.debug(APP + " - roomStart "+ scope.getName()); presentationApplication.createRoom(scope.getName()); if (!hasSharedObject(scope, PRESENTATION_SO)) { if (createSharedObject(scope, PRESENTATION_SO, false)) { - log.debug("{} - scanning for presentations - ", APP, scope.getName()); + log.debug(APP + " - scanning for presentations - " + scope.getName()); try { // TODO: this is hard-coded, and not really a great abstraction. need to fix this up later String folderPath = "/var/bigbluebutton/" + scope.getName() + "/" + scope.getName(); @@ -137,12 +136,12 @@ public class PresentationHandler extends ApplicationAdapter implements IApplicat if (folder.exists() && folder.isDirectory()) { File[] presentations = folder.listFiles(new FileFilter() { public boolean accept(File path) { - log.debug("\tfound: {}", path.getAbsolutePath()); + log.debug("\tfound: " + path.getAbsolutePath()); return path.isDirectory(); } }); for (File presFile : presentations) { - log.debug("\tshare: {}", presFile.getName()); + log.debug("\tshare: " + presFile.getName()); presentationApplication.sharePresentation(scope.getName(), presFile.getName(), true); } } @@ -152,13 +151,13 @@ public class PresentationHandler extends ApplicationAdapter implements IApplicat return true; } } - log.error("Failed to start room {}",scope.getName()); + log.error("Failed to start room " + scope.getName()); return false; } @Override public void roomStop(IScope scope) { - log.debug("{}:roomStop {}",APP,scope.getName()); + log.debug(APP + ":roomStop " + scope.getName()); presentationApplication.destroyRoom(scope.getName()); if (!hasSharedObject(scope, PRESENTATION_SO)) { clearSharedObjects(scope, PRESENTATION_SO); diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java index 18c2756ccba4628b53d4f423848fc69889f338aa..6eea1578914a844796cca9aa3e5e975aafe8e318 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoom.java @@ -78,7 +78,7 @@ public class PresentationRoom { for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IPresentationRoomListener listener = (IPresentationRoomListener) iter.next(); - log.debug("calling sendUpdateMessage on listener {}",listener.getName()); + log.debug("calling sendUpdateMessage on listener " + listener.getName()); listener.sendUpdateMessage(message); } @@ -91,7 +91,7 @@ public class PresentationRoom { String messageKey = (String) message.get("messageKey"); if (messageKey.equalsIgnoreCase("CONVERSION_COMPLETED")) { - log.debug("{}[{}]",messageKey,presentationName); + log.debug(messageKey + "[" + presentationName + "]"); presentationNames.add(presentationName); } } @@ -105,7 +105,7 @@ public class PresentationRoom { for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IPresentationRoomListener listener = (IPresentationRoomListener) iter.next(); - log.debug("calling sendUpdateMessage on listener {}",listener.getName()); + log.debug("calling sendUpdateMessage on listener " + listener.getName()); listener.resizeAndMoveSlide(xOffset, yOffset, widthRatio, heightRatio); } } @@ -115,26 +115,26 @@ public class PresentationRoom { for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IPresentationRoomListener listener = (IPresentationRoomListener) iter.next(); - log.debug("calling sendUpdateMessage on listener {}",listener.getName()); + log.debug("calling sendUpdateMessage on listener " + listener.getName()); listener.assignPresenter(presenter); } } @SuppressWarnings("unchecked") public void gotoSlide(int curslide){ - log.debug("Request to go to slide $it for room $name"); + log.debug("Request to go to slide " + curslide + "for room " + name); currentSlide = curslide; for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IPresentationRoomListener listener = (IPresentationRoomListener) iter.next(); - log.debug("calling sendUpdateMessage on listener {}",listener.getName()); + log.debug("calling sendUpdateMessage on listener " + listener.getName()); listener.gotoSlide(curslide); } } @SuppressWarnings("unchecked") public void sharePresentation(String presentationName, Boolean share){ - log.debug("Request share presentation "+presentationName+" "+share+" for room "+name); + log.debug("Request share presentation " + presentationName + " " + share + " for room " + name); sharing = share; if (share) { currentPresentation = presentationName; @@ -146,17 +146,17 @@ public class PresentationRoom { for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IPresentationRoomListener listener = (IPresentationRoomListener) iter.next(); - log.debug("calling sharePresentation on listener {}",listener.getName()); + log.debug("calling sharePresentation on listener " + listener.getName()); listener.sharePresentation(presentationName, share); } } public void removePresentation(String presentationName){ - log.debug("Request remove presentation {}",presentationName); + log.debug("Request remove presentation " + presentationName); int index = presentationNames.indexOf(presentationName); if (index < 0) { - log.warn("Request remove presentation {}. Presentation not found.",presentationName); + log.warn("Request remove presentation " + presentationName + ". Presentation not found."); return; } @@ -165,7 +165,7 @@ public class PresentationRoom { for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { log.debug("calling on listener"); IPresentationRoomListener listener = (IPresentationRoomListener) iter.next(); - log.debug("calling removePresentation on listener {}",listener.getName()); + log.debug("calling removePresentation on listener " + listener.getName()); listener.removePresentation(presentationName); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoomsManager.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoomsManager.java index 18c521219659b5481b42d4b5d6132f816be9849d..85d15ee31402d369886d5a20344c9ff19c7a974d 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoomsManager.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationRoomsManager.java @@ -46,17 +46,17 @@ public class PresentationRoomsManager { } public void addRoom(PresentationRoom room) { - log.debug("In PresentationRoomsManager adding room {}",room.getName()); + log.debug("In PresentationRoomsManager adding room " + room.getName()); rooms.put(room.getName(), room); } public void removeRoom(String name) { - log.debug("In PresentationRoomsManager remove room {}",name); + log.debug("In PresentationRoomsManager remove room " + name); rooms.remove(name); } public boolean hasRoom(String name) { - log.debug("In PresentationRoomsManager has Room {}",name); + log.debug("In PresentationRoomsManager has Room " + name); return rooms.containsKey(name); } @@ -65,7 +65,7 @@ public class PresentationRoomsManager { * Keeping getRoom private so that all access to ChatRoom goes through here. */ private PresentationRoom getRoom(String name) { - log.debug("In PresentationRoomsManager get room {}",name); + log.debug("In PresentationRoomsManager get room " + name); return rooms.get(name); } @@ -75,7 +75,7 @@ public class PresentationRoomsManager { r.addRoomListener(listener); return; } - log.warn("Adding listener to a non-existing room {}",roomName); + log.warn("Adding listener to a non-existing room " + roomName); } //TODO: where is roomName??? /*public void removeRoomListener(IPresentationRoomListener listener) { @@ -94,7 +94,7 @@ public class PresentationRoomsManager { r.sendUpdateMessage(message); return; } - log.warn("Sending update message to a non-existing room {}",room); + log.warn("Sending update message to a non-existing room " + room); } public ArrayList getCurrentPresenter( String room){ @@ -102,7 +102,7 @@ public class PresentationRoomsManager { if (r != null) { return r.getCurrentPresenter(); } - log.warn("Getting presenter from a non-existing room {}",room); + log.warn("Getting presenter from a non-existing room " + room); return null; } @@ -111,7 +111,7 @@ public class PresentationRoomsManager { if (r != null) { return r.getSharing(); } - log.warn("Getting sharing from a non-existing room {}",room); + log.warn("Getting sharing from a non-existing room " + room); return null; } @@ -121,7 +121,7 @@ public class PresentationRoomsManager { r.assignPresenter(presenter); return; } - log.warn("Assigning presenter to a non-existing room {}",room); + log.warn("Assigning presenter to a non-existing room " + room); } @SuppressWarnings("unchecked") @@ -135,38 +135,38 @@ public class PresentationRoomsManager { settings.put("heightRatio", r.getHeightRatio()); return settings; } - log.warn("Getting settings information on a non-existant room {}",room); + log.warn("Getting settings information on a non-existant room " + room); return null; } public void resizeAndMoveSlide(String room, Double xOffset, Double yOffset, Double widthRatio, Double heightRatio) { PresentationRoom r = getRoom(room); if (r != null){ - log.debug("Request to resize and move slide["+xOffset+","+yOffset+","+widthRatio+","+heightRatio+"]"); + log.debug("Request to resize and move slide[" + xOffset + "," + yOffset + "," + widthRatio + "," + heightRatio + "]"); r.resizeAndMoveSlide(xOffset, yOffset, widthRatio, heightRatio); return; } - log.warn("resizeAndMoveSlide on a non-existant room {}",room); + log.warn("resizeAndMoveSlide on a non-existant room " + room); } public void gotoSlide(String room, int slide){ PresentationRoom r = getRoom(room); if (r != null) { - log.debug("Request to go to slide {} for room {}",slide,room); + log.debug("Request to go to slide " + slide + " for room " + room); r.gotoSlide(slide); return; } - log.warn("Changing slide on a non-existing room {}",room); + log.warn("Changing slide on a non-existing room " + room); } public void sharePresentation(String room, String presentationName, Boolean share){ PresentationRoom r = getRoom(room); if (r != null) { - log.debug("Request share presentation "+presentationName+" "+share+" for room "+room); + log.debug("Request share presentation " + presentationName + " " + share + " for room " + room); r.sharePresentation(presentationName, share); return; } - log.warn("Sharing presentation on a non-existing room {}",room); + log.warn("Sharing presentation on a non-existing room " + room); } public int getCurrentSlide(String room){ @@ -174,7 +174,7 @@ public class PresentationRoomsManager { if (r != null) { return r.getCurrentSlide(); } - log.warn("Getting slide on a non-existing room {}",room); + log.warn("Getting slide on a non-existing room " + room); return -1; } @@ -183,7 +183,7 @@ public class PresentationRoomsManager { if (r != null) { return r.getCurrentPresentation(); } - log.warn("Getting current presentation on a non-existing room {}",room); + log.warn("Getting current presentation on a non-existing room " + room); return null; } @@ -192,7 +192,7 @@ public class PresentationRoomsManager { if (r != null) { return r.getPresentationNames(); } - log.warn("Getting current presentation on a non-existing room {}",room); + log.warn("Getting current presentation on a non-existing room " + room); return null; } @@ -201,7 +201,7 @@ public class PresentationRoomsManager { if (r != null) { r.removePresentation(name); } else { - log.warn("Removing presentation from a non-existing room {}",room); + log.warn("Removing presentation from a non-existing room " + room); } } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationService.java index b879bba18b01a7406fdd264105b40aad5865d3b4..3094e5ab593af14a7b370225112b8f147286f3cb 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationService.java @@ -38,7 +38,7 @@ public class PresentationService { @SuppressWarnings("unchecked") public void assignPresenter(Long userid, String name, Long assignedBy) { - log.debug("assignPresenter "+userid+" "+name+" "+assignedBy); + log.debug("assignPresenter " + userid + " " + name + " " + assignedBy); IScope scope = Red5.getConnectionLocal().getScope(); ArrayList presenter = new ArrayList(); presenter.add(userid); @@ -50,7 +50,7 @@ public class PresentationService { if (curPresenter != null){ long curUserid=(Long) curPresenter.get(0); if( curUserid!= userid){ - log.debug("Changing presenter from {} to {}",curPresenter.get(0),userid); + log.debug("Changing presenter from " + curPresenter.get(0) + " to " + userid); participantsApplication.setParticipantStatus(scope.getName(), (Long)curPresenter.get(0), "presenter", false); } } @@ -58,7 +58,7 @@ public class PresentationService { } public void removePresentation(String name) { - log.debug("removePresentation {}",name); + log.debug("removePresentation " + name); IScope scope = Red5.getConnectionLocal().getScope(); presentationApplication.removePresentation(scope.getName(), name); } @@ -80,7 +80,7 @@ public class PresentationService { presenter.put("user", curPresenter.get(0)); presenter.put("name", curPresenter.get(1)); presenter.put("assignedBy",curPresenter.get(2)); - log.debug("Presenter: "+curPresenter.get(0)+" "+curPresenter.get(1)+" "+curPresenter.get(2)); + log.debug("Presenter: " + curPresenter.get(0) + " " + curPresenter.get(1) + " " + curPresenter.get(2)); } else { presenter.put("hasPresenter", false); } @@ -96,7 +96,7 @@ public class PresentationService { presentation.put("widthRatio", presentersSettings.get("widthRatio")); presentation.put("heightRatio", presentersSettings.get("heightRatio")); } - log.debug("Presentation: presentation={} slide={}",currentPresentation,curSlide); + log.debug("Presentation: presentation=" + currentPresentation + " slide=" + curSlide); } else { presentation.put("sharing", false); } @@ -111,19 +111,19 @@ public class PresentationService { } public void gotoSlide(int slideNum) { - log.debug("Request to go to slide {}",slideNum); + log.debug("Request to go to slide " + slideNum); IScope scope = Red5.getConnectionLocal().getScope(); presentationApplication.gotoSlide(scope.getName(), slideNum); } public void sharePresentation(String presentationName, Boolean share) { - log.debug("Request to go to sharePresentation {} {}",presentationName,share); + log.debug("Request to go to sharePresentation " + presentationName + " " + share); IScope scope = Red5.getConnectionLocal().getScope(); presentationApplication.sharePresentation(scope.getName(), presentationName, share); } public void resizeAndMoveSlide(Double xOffset,Double yOffset,Double widthRatio,Double heightRatio) { - log.debug("Request to resize and move slide["+xOffset+","+yOffset+","+widthRatio+","+heightRatio); + log.debug("Request to resize and move slide[" + xOffset + "," + yOffset + "," + widthRatio + "," + heightRatio); IScope scope = Red5.getConnectionLocal().getScope(); presentationApplication.resizeAndMoveSlide(scope.getName(), xOffset, yOffset, widthRatio, heightRatio); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/recorder/presentation/PresentationEventRecorder.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/recorder/presentation/PresentationEventRecorder.java index 7fe5f900d94e6772403daac6924f862331dfef03..a8b3dd12a6a9fc697de64e7fcc29062aac3a1f0f 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/recorder/presentation/PresentationEventRecorder.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/recorder/presentation/PresentationEventRecorder.java @@ -39,12 +39,12 @@ public class PresentationEventRecorder implements IPresentationRoomListener { handleConversionCompletedEvent(message); } else{ - log.error("NOT recording received message {}",messageKey); + log.error("NOT recording received message " + messageKey); } } private void handleGeneratedSlideEvent(Map<String, Object> message) { - log.debug("Generated Slide Event [{}]", (String)message.get("presentationName")); + log.debug("Generated Slide Event [" + message.get("presentationName") + "]"); GenerateSlidePresentationRecordEvent event = new GenerateSlidePresentationRecordEvent(); event.setMeetingId(session); @@ -56,7 +56,7 @@ public class PresentationEventRecorder implements IPresentationRoomListener { } private void handleConversionCompletedEvent(Map<String, Object> message) { - log.debug("Conversion Completed Event [{}]", (String)message.get("presentationName")); + log.debug("Conversion Completed Event [" + message.get("presentationName") + "]"); ConversionCompletedPresentationRecordEvent event = new ConversionCompletedPresentationRecordEvent(); event.setMeetingId(session); diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java index 9ad9cf15c1876e4e89ca4f7e6ca839db897b57f3..e76a4335051afeeb5392b0f9fae76fe1379aede1 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java @@ -44,43 +44,43 @@ public class VoiceHandler extends ApplicationAdapter implements IApplication{ @Override public boolean appConnect(IConnection conn, Object[] params) { - log.debug("${APP}:appConnect"); + log.debug(APP + ":appConnect"); return true; } @Override public void appDisconnect(IConnection conn) { - log.debug( "${APP}:appDisconnect"); + log.debug(APP + ":appDisconnect"); } @Override public boolean appJoin(IClient client, IScope scope) { - log.debug( "${APP}:appJoin ${scope.name}"); + log.debug(APP + ":appJoin " + scope.getName()); return true; } @Override public void appLeave(IClient client, IScope scope) { - log.debug("${APP}:appLeave ${scope.name}"); + log.debug(APP + ":appLeave " + scope.getName()); } @Override public boolean appStart(IScope scope) { - log.debug("${APP}:appStart ${scope.name}"); + log.debug(APP + ":appStart " + scope.getName()); conferenceService.startup(); return true; } @Override public void appStop(IScope scope) { - log.debug("${APP}:appStop ${scope.name}"); + log.debug(APP + ":appStop " + scope.getName()); conferenceService.shutdown(); } @Override public boolean roomConnect(IConnection connection, Object[] params) { - log.debug("${APP}:roomConnect"); + log.debug(APP + ":roomConnect"); log.debug("In live mode"); ISharedObject so = getSharedObject(connection.getScope(), VOICE_SO); @@ -88,7 +88,7 @@ public class VoiceHandler extends ApplicationAdapter implements IApplication{ String meetingid = getBbbSession().getConference(); Boolean record = getBbbSession().getRecord(); - log.debug("Setting up voiceBridge {}", voiceBridge); + log.debug("Setting up voiceBridge " + voiceBridge); clientManager.addSharedObject(connection.getScope().getName(), voiceBridge, so); conferenceService.createConference(voiceBridge, meetingid, record); return true; @@ -96,36 +96,36 @@ public class VoiceHandler extends ApplicationAdapter implements IApplication{ @Override public void roomDisconnect(IConnection connection) { - log.debug("${APP}:roomDisconnect"); + log.debug(APP + ":roomDisconnect"); } @Override public boolean roomJoin(IClient client, IScope scope) { - log.debug("${APP}:roomJoin ${scope.name} - ${scope.parent.name}"); + log.debug(APP + ":roomJoin " + scope.getName() + " - " + scope.getParent().getName()); return true; } @Override public void roomLeave(IClient client, IScope scope) { - log.debug("${APP}:roomLeave ${scope.name}"); + log.debug(APP + ":roomLeave " + scope.getName()); } @Override public boolean roomStart(IScope scope) { - log.debug("${APP} - roomStart ${scope.name}"); + log.debug(APP + " - roomStart " + scope.getName()); if (!hasSharedObject(scope, VOICE_SO)) { if (createSharedObject(scope, VOICE_SO, false)) { return true; } } - log.error("Failed to start room ${scope.name}"); + log.error("Failed to start room " + scope.getName()); return false; } @Override public void roomStop(IScope scope) { - log.debug("${APP}:roomStop ${scope.name}"); + log.debug(APP + ":roomStop " + scope.getName()); /** * Remove the voicebridge from the list of running * voice conference. diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceService.java index 9618062467d754543b98771705c3fed28272d866..f332822cf9c2eb445677406dc8d46687bdcb1ab9 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceService.java @@ -36,7 +36,7 @@ public class VoiceService { public Map<String, List> getMeetMeUsers() { String voiceBridge = getBbbSession().getVoiceBridge(); - log.debug("GetMeetmeUsers request for room[$voiceBridge]"); + log.debug("GetMeetmeUsers request for room[" + voiceBridge + "]"); ArrayList<Participant> p = conferenceService.getParticipants(voiceBridge); Map participants = new HashMap(); @@ -63,7 +63,7 @@ public class VoiceService { pmap.put("muted", p.isMuted()); pmap.put("talking", p.isTalking()); pmap.put("locked", p.isMuteLocked()); - log.debug("[$p.id,$p.name,$p.muted,$p.talking]"); + log.debug("[" + p.getId() + "," + p.getName() + "," + p.isMuted() + "," + p.isTalking() + "]"); result.put(p.getId(), pmap); } @@ -72,7 +72,7 @@ public class VoiceService { public void muteAllUsers(boolean mute) { String conference = getBbbSession().getVoiceBridge(); - log.debug("Mute all users in room[$conference]"); + log.debug("Mute all users in room[" + conference + "]"); conferenceService.mute(conference, mute); } @@ -83,19 +83,19 @@ public class VoiceService { public void muteUnmuteUser(Integer userid,Boolean mute) { String conference = getBbbSession().getVoiceBridge(); - log.debug("MuteUnmute request for user [$userid] in room[$conference]"); + log.debug("MuteUnmute request for user [" + userid + "] in room[" + conference + "]"); conferenceService.mute(userid, conference, mute); } public void lockMuteUser(Integer userid, Boolean lock) { String conference = getBbbSession().getVoiceBridge(); - log.debug("Lock request for user [$userid] in room[$conference]"); + log.debug("Lock request for user [" + userid + "] in room[" + conference + "]"); conferenceService.lock(userid, conference, lock); } public void kickUSer(Integer userid) { String conference = getBbbSession().getVoiceBridge(); - log.debug("KickUser $userid from $conference"); + log.debug("KickUser " + userid + " from " + conference); conferenceService.eject(userid, conference); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/Shape.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/Shape.java index fdbaed262dbca165d8cf2a4294d845d8f7e68aa6..92bb27440bfd66ea38725731ae7bed609e9c6074 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/Shape.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/Shape.java @@ -91,7 +91,6 @@ public class Shape { double y2 = shape[i+1]; newSlope = (y2 - y1)/(x2 - x1); - //System.out.println("Slope change: " + (Math.abs(stableSlope / newSlope - 1))); if (slopeDifference(stableSlope, newSlope) < 5){ lastStableX = x2; lastStableY = y2; @@ -117,14 +116,11 @@ public class Shape { returnArray[j] = newShape.get(j); } - //System.out.println("Original: " + shape.length); - //System.out.println("Optimized: " + returnArray.length); return returnArray; } private double slopeDifference(double oldSlope, double newSlope){ double differenceInRad = Math.atan(oldSlope) - Math.atan(newSlope); - //System.out.println(Math.abs(Math.toDegrees(differenceInRad))); return Math.abs(Math.toDegrees(differenceInRad)); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java index 91f0a4242c2a79128b34d23670f26813d35ceb57..a0069a2390dea2dc11477c91b59216781b8d6bb6 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java @@ -53,7 +53,6 @@ public class WhiteboardApplication extends MultiThreadedApplicationAdapter imple public boolean appStart(IScope app){ log.info("Starting Whiteboard Application"); this.scope = app; - //roomManager.addRoom(app); return true; } @@ -70,10 +69,8 @@ public class WhiteboardApplication extends MultiThreadedApplicationAdapter imple WhiteboardRoom room = roomManager.getRoom(getLocalScope().getName()); if (room.presentationExists(name)) { room.setActivePresentation(name); - //System.out.println("Presentation " + name + " exists"); } else { room.addPresentation(name, numPages); - //System.out.println("Presentation " + name + " doesn't exists, setting it as active presentation"); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.java index 84ebbf02dc0b91ff023d87e57e81da694e261f73..09c195ad4d20f188cd4ead7f5a94a1289607a693 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.java @@ -127,7 +127,6 @@ public class WhiteboardRoom { public void notifyAddShape(Presentation presentation, Shape shape){ for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { IWhiteboardRoomListener listener = (IWhiteboardRoomListener) iter.next(); - //log.debug("calling newChatMessage on listener {}",listener.getName()); listener.addShape(shape, presentation); } } @@ -135,7 +134,6 @@ public class WhiteboardRoom { public void notifyUndoShape(Presentation presentation){ for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { IWhiteboardRoomListener listener = (IWhiteboardRoomListener) iter.next(); - //log.debug("calling newChatMessage on listener {}",listener.getName()); listener.undoShape(presentation); } } @@ -143,7 +141,6 @@ public class WhiteboardRoom { public void notifyClearPage(Presentation presentation){ for (Iterator iter = listeners.values().iterator(); iter.hasNext();) { IWhiteboardRoomListener listener = (IWhiteboardRoomListener) iter.next(); - //log.debug("calling newChatMessage on listener {}",listener.getName()); listener.clearPage(presentation); } } diff --git a/bigbluebutton-client/.actionScriptProperties b/bigbluebutton-client/.actionScriptProperties index 4fc2e6a500cf447c434e2bf6eb8f1bb04c408cdf..95f5bd7ee58bfa4087f7ed859ef3fb3bb7657f01 100755 --- a/bigbluebutton-client/.actionScriptProperties +++ b/bigbluebutton-client/.actionScriptProperties @@ -1,21 +1,63 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<actionScriptProperties mainApplicationPath="BigBlueButton.mxml" projectUUID="2f78753b-2e4c-41b4-8cf4-eddb768eb4b3" version="6"> - <compiler additionalCompilerArguments="-locale=" autoRSLOrdering="false" copyDependentFiles="true" flexSDK="Flex 3.5" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" sourceFolderPath="src" strict="true" targetPlayerVersion="10.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true"> +<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="2f78753b-2e4c-41b4-8cf4-eddb768eb4b3" version="6"> + <compiler additionalCompilerArguments="-locale=" autoRSLOrdering="false" copyDependentFiles="true" flex3CompatMode="true" flexSDK="Flex 4.5 (build 20967)" fteInMXComponents="false" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin" sourceFolderPath="src" strict="true" targetPlayerVersion="10.3.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true"> <compilerSourcePath/> <libraryPath defaultLinkType="1"> <libraryPathEntry kind="4" path=""> <modifiedEntries> - <libraryPathEntry kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/framework.swc" useDefaultLinkType="true"> + <libraryPathEntry index="10" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/advancedgrids.swc" useDefaultLinkType="true"> <crossDomainRsls> - <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="framework_3.1.0.2710.swz"/> - <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="framework_3.1.0.2710.swf"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/advancedgrids_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="advancedgrids_4.5.0.20967.swz"/> + </crossDomainRsls> + </libraryPathEntry> + <libraryPathEntry index="6" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/charts.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/charts_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="charts_4.5.0.20967.swz"/> + </crossDomainRsls> + </libraryPathEntry> + <libraryPathEntry index="8" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/osmf.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/osmf_1.0.0.16316.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="osmf_1.0.0.16316.swz"/> + </crossDomainRsls> + </libraryPathEntry> + <libraryPathEntry index="5" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/rpc.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/rpc_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="rpc_4.5.0.20967.swz"/> + </crossDomainRsls> + </libraryPathEntry> + <libraryPathEntry index="7" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/spark_dmv.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/spark_dmv_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="spark_dmv_4.5.0.20967.swz"/> + </crossDomainRsls> + </libraryPathEntry> + <libraryPathEntry index="9" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/mx/mx.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/mx_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="mx_4.5.0.20967.swz"/> </crossDomainRsls> </libraryPathEntry> </modifiedEntries> <excludedEntries> <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/qtp.swc" useDefaultLinkType="false"/> + <libraryPathEntry index="4" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/sparkskins.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/sparkskins_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="sparkskins_4.5.0.20967.swz"/> + </crossDomainRsls> + </libraryPathEntry> <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation.swc" useDefaultLinkType="false"/> <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_dmv.swc" useDefaultLinkType="false"/> + <libraryPathEntry index="3" kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/spark.swc" useDefaultLinkType="true"> + <crossDomainRsls> + <crossDomainRslEntry autoExtract="true" policyFileUrl="http://fpdownload.adobe.com/pub/swz/crossdomain.xml" rslUrl="http://fpdownload.adobe.com/pub/swz/flex/4.5.0.20967/spark_4.5.0.20967.swz"/> + <crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="spark_4.5.0.20967.swz"/> + </crossDomainRsls> + </libraryPathEntry> <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_agent.swc" useDefaultLinkType="false"/> </excludedEntries> </libraryPathEntry> @@ -53,4 +95,3 @@ <buildCSSFileEntry destPath="bin" sourcePath="src/branding/css/theme.css"/> </buildCSSFiles> </actionScriptProperties> - diff --git a/bigbluebutton-client/html-template/index.template.html b/bigbluebutton-client/html-template/index.template.html index 1cb29588142b1a3e73f8ef7fe22a5ed2a1aca4ba..8d458fd7e714bafb3eea3cf095e65d27a5f6f40a 100755 --- a/bigbluebutton-client/html-template/index.template.html +++ b/bigbluebutton-client/html-template/index.template.html @@ -33,13 +33,6 @@ <link rel="stylesheet" type="text/css" href="history/history.css" /> <script type="text/javascript" src="history/history.js"></script> <!${useBrowserHistory} END Browser History required section --> - - <script src="jquery-1.5.1.min.js" language="javascript"></script> - <script src="bigbluebutton.js" language="javascript"></script> - <script src="bbb_localization.js" language="javascript"></script> - <script src="deployJava.js" language="javascript"></script> - <script src="bbb_blinker.js" language="javascript"></script> - <script src="bbb_deskshare.js" language="javascript"></script> <script type="text/javascript" src="swfobject.js"></script> <script type="text/javascript"> diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties old mode 100644 new mode 100755 index 04078262a1b3945643ecc39faccded258649936e..00d50459036b5e040ddcb3213a997f5b28b0ef8c --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -88,6 +88,10 @@ bbb.chat.privateChatSelect = Select a person to chat with privately bbb.chat.chatOptions = Chat Options bbb.chat.fontSize = Font Size bbb.listeners.title = Listeners{0} {1} +bbb.listeners.pushToTalk.toolTip = Click to talk +bbb.listeners.pushToMute.toolTip = Click to mute yourself +bbb.listeners.talk=Talk +bbb.listeners.mute=Mute bbb.listeners.muteAllBtn.toolTip = Mute all bbb.listeners.unmuteAllBtn.toolTip = Unmute all bbb.listeners.ejectTooltip = Kick User diff --git a/bigbluebutton-client/locale/no_NO/bbbResources.properties b/bigbluebutton-client/locale/no_NO/bbbResources.properties new file mode 100644 index 0000000000000000000000000000000000000000..5e47a1a0c23830d772b54497eebc973cde5aa3d2 --- /dev/null +++ b/bigbluebutton-client/locale/no_NO/bbbResources.properties @@ -0,0 +1,144 @@ +bbb.logout.usercommand = Du har logget ut av konferansen +bbb.settings.flash.command = Installer nyeste Flash +bbb.oldlocalewindow.reminder2 = Vennligst slett nettleserens mellomlager og prøv igjen +bbb.presentation.maxUploadFileExceededAlert = Feil: Fila er større enn tillatt +bbb.logout.invalidapp = Appen red5 finnes ikke +bbb.fileupload.title = Last opp presentasjon +bbb.chat.publicMsgAwaiting2 = * Melding til alle venter * +bbb.viewers.viewersGrid.roleItemRenderer = Rolle +bbb.oldlocalewindow.windowTitle = Advarsel: Gammel språkfil +bbb.presentation.converted = Konverterte {0} av{1} lysark. +bbb.viewers.presentBtn.toolTip = Velg deltaker som skal presentere. +bbb.viewers.viewersGrid.statusItemRenderer.streamIcon.toolTip = Klikk for å se på +bbb.highlighter.toolbar.undo = Gjenopprett figur +bbb.desktopPublish.minimizeBtn.toolTip = Minimer dette vinduet. +bbb.viewers.presentBtn.label = Velg ny presenterer +bbb.viewers.kickUserBtn.toolTip = Send ut bruker +bbb.listeners.ejectTooltip = Send ut bruker +bbb.presentation.uploadcomplete = Opplasting er fullført +bbb.viewers.viewersGrid.statusItemRenderer.raiseHand.toolTip = Håndsopprekking av {0} +bbb.mainToolbar.settingsBtn.toolTip = Åpne Settinger +bbb.desktopView.actualSize = Vis normal størrelse +bbb.desktopPublish.region.tooltip = Del ut et utsnitt av skjermen +bbb.presentation.error.convert.swf = Feil ved konvertering av opplastet dokument. Vennligst ta kontakt med administrator. +bbb.fileupload.progBarLbl = Framdrift: +bbb.presentation.error.security = Sikkerhetsfeil: Vennligst kontakt administrator. +bbb.desktopPublish.maximizeRestoreBtn.toolTip = Du kan ikke maksimere dette vinduet. +bbb.listenerItem.nameLbl.toolTip = Velg denne brukeren og klikk for knappen +bbb.desktopPublish.region.label = Område +bbb.chat.cmpColorPicker.toolTip = Tekstfarge +bbb.listenerItem.muteUnmute.toolTip = Slå lyd på eller av for lytteren +bbb.chat.chatOptions = Innstillinger for prat +bbb.presentation.uploadwindow.closeLabel = Klikk OK for å lukke vinduet +bbb.viewers.title = Users{0} {1} +bbb.settings.flash.label = Feil versjon av Flash +bbb.presentation.ok = OK +bbb.mainToolbar.helpBtn = Hjelp +bbb.fileupload.showBtn = Vis +bbb.fileupload.fileLbl = Fil: +bbb.listenerItem.talkImg.toolTip = Snakker +bbb.settings.warning.label = Advarsel +bbb.mainshell.copyrightLabel2 = (c) 2010, BigBlueButton build {0} - Mer informasjon finnes hos http://www.bigbluebutton.org/. +bbb.presentation.uploadwindow.powerpoint = POWERPOINT +bbb.toolbar.video.toolTip = Start kamera +bbb.chat.publicMsgAwaiting = Melding til alle venter +bbb.settings.instructions = Tillat at Flash vil bruke ditt kamera. Hvis du kan se og høre deg selv er din nettleser satt opp korrekt. Nedenfor er det vist noen feilsituasjoner som kan undersøkes. +bbb.chat.sendBtn = Send +bbb.publishVideo.title = Vis ditt webkamera +bbb.logout.appshutdown = Appen server er lukket +bbb.presentation.uploadPresBtn = Last opp dokument til presentasjon. +bbb.presentation.uploadPresBtn.toolTip = Last opp dokument til presentasjon. +bbb.highlighter.toolbar.ellipse = Sirkel +bbb.fileupload.deleteBtn.toolTip = Slett presentasjon +bbb.toolbar.deskshare.toolTip = Skrivebordsdeling +bbb.presentation.document.converted = Vellykket konvertering av dokument. +bbb.presentation.error.convert.maxnbpagereach = Feil: Dokumentet som ble lastet opp har for mange sider. +bbb.desktopView.title = Skrivebordsdeling +bbb.settings.java.label = Feil versjon av Java +bbb.presentation.forwardBtn.toolTip = Neste lysark +bbb.settings.java.text = Du har installert versjon {0} av Java, men trenger minst versjon {1}. Klikk nedenfor for å installere siste Java JRE versjon. +bbb.fileupload.genThumbText = Lager ikoner.. +bbb.viewers.viewersGrid.statusItemRenderer = Status +bbb.desktopPublish.title = Skrivebordsdeling: Presenterers forh +bbb.mainToolbar.settingsBtn = Settinger +bbb.fileupload.uploadBtn = Last opp +bbb.fileupload.uploadBtn.toolTip = Last opp fil +bbb.fileupload.showBtn.toolTip = Vis presentasjon +bbb.listeners.muteAllBtn.toolTip = Slå lyd av for alle +bbb.video.publish.close.tooltip = Stopp visning av webkamera +bbb.presentation.error.convert.nbpage = Feil: Antall sider i dokumentet som ble lastet opp kan ikke bestemmes. +bbb.chat.title = Prat +bbb.presentation.uploaded = lastet opp. +bbb.mainshell.logBtn.toolTip = Åpne loggvindu +bbb.desktopPublish.stop.tooltip = Lukk skjermdeling +bbb.presentation.uploadwindow.excel = EXCEL +bbb.settings.voice.volume = Mikrofonaktivitet +bbb.logout.unknown = Din klient har mistet forbindelsen til serveren +bbb.presentation.slideNumLbl.toolTip = Klikk for å velge et lysark +bbb.settings.flash.text = Du har installert versjon {0} av Flash, men trenger minst versjon {1}. Klikk nedenfor for å installere siste Adobe Flash versjon. +bbb.highlighter.toolbar.rectangle = Rektangel +bbb.settings.voice.adjust = Juster volumet +bbb.presentation.uploadwindow.word = WORD +bbb.mainshell.statusProgress.loading = Laster {0} moduler +bbb.presentation.error.io = IO feil: Vennligst kontakt administrator. +bbb.chat.sendBtn.toolTip = Send melding +bbb.highlighter.button.toolTipHide = Skjul tavle +bbb.settings.java.command = Installer nyeste Java +bbb.mainToolbar.logoutBtn = Logg ut +bbb.chat.privateMsgAwaiting2 = * Privat melding venter * +bbb.presentation.document.supported = Godkjent dokumenttype. Starter konvertering... +bbb.listeners.title = Lyttere{0} {1} +bbb.fileupload.presentationNamesLbl = Presentasjoner som er lastet opp: +bbb.pageTitle = BigBlueButton +bbb.mainshell.resetLayoutBtn.toolTip = Nullstill oppsett +bbb.highlighter.toolbar.color = Velg farge +bbb.presentation.uploadwindow.pdf = PDF +bbb.publishVideo.startPublishBtn.toolTip = Start visning +bbb.logout.connectionfailed = Forbindelsen med serveren har feilet +bbb.settings.isight.text = Hvis du har problemer med iSight kamera kan det være at du kjører OS X 10.6.5 som har problemer med Flash kamerahåndtering.\r\nInstaller en nyere versjon av Flashplayer eller oppgrader din Mac til nyeste OS versjon. +bbb.highlighter.toolbar.clear = Slett siden +bbb.toolbar.phone.toolTip = Slå på mikrofon +bbb.chat.privateChatSelect = Velg person til privat prat +bbb.micSettings.cancel = Avbryt +bbb.fileupload.okCancelBtn = Avbryt +bbb.video.publish.close.label = Lukk +bbb.desktopPublish.stop.label = Lukk +bbb.logout.asyncerror = Det oppstod en Async feil +bbb.presentation.presenterNameLbl = {0} er nå presenterer +bbb.chat.privateMsgAwaiting = Privat melding venter +bbb.desktopView.fitToWindow = Tilpass vindu +bbb.highlighter.toolbar.pencil = mark +bbb.mainshell.statusProgress.connecting = Kobler opp til serveren +bbb.listenerItem.lockImg.toolTip = Velg mellom å slå av eller på +bbb.listeners.unmuteAllBtn.toolTip = Slå på lyd for alle +bbb.logout.rejected = Forbindelsen til serveren ble avvist +bbb.presentation.title = Presentasjon +bbb.settings.noissues = Ingen alvorlige feil er oppdaget. +bbb.desktopPublish.closeBtn.toolTip = Stopp deling og lukk dette vinduet. +bbb.fileupload.selectBtn.toolTip = Se etter fil +bbb.presentation.uploadwindow.image = BILDE +bbb.settings.warning.close = Lukk denne advarselen +bbb.presentation.clickToUpload = Last opp presentasjon +bbb.presentation.backBtn.toolTip = Forrige lysark. +bbb.desktopPublish.fullscreen.tooltip = Del ut hele skjermen +bbb.settings.isight.command = Installer Flash 10.2 RC2 +bbb.presentation.error.document.convert.failed = Feil: Mislykket konvertering av dokument. +bbb.viewers.viewersGrid.nameItemRenderer = Navn +bbb.oldlocalewindow.reminder1 = Du har kanskje en gammel språkfil +bbb.highlighter.button.toolTipShow = Vis tavle +bbb.settings.deskshare.start = Sjekk skrivebordsdeling +bbb.viewers.viewersGrid.nameItemRenderer.nameLabel.toolTip = Du er logget inn som denne brukeren. +bbb.chat.fontSize = Fontstørrelse +bbb.presentation.resetZoomBtn.toolTip = Nullstill zoom +bbb.mainshell.statusProgress.cannotConnectServer = Beklager, vi kan ikke koble til serveren +bbb.logout.connectionclosed = Forbindelsen med serveren er slått av +bbb.chat.publicChatUsername = Alle +bbb.viewers.viewersGrid.statusItemRenderer.presIcon.toolTip = Presenterer +bbb.settings.isight.label = Feil med iSight kamera +bbb.mainToolbar.logoutBtn.toolTip = Logg ut +bbb.presentation.error.convert.notsupported = Feil: Filtypen som ble lastet opp er ikke støttet. Vennligst last opp en kompatibel type. +bbb.highlighter.toolbar.thickness = Velg tykkelse +bbb.presentation.uploadwindow.presentationfile = Presentasjonsfil +bbb.viewers.raiseHandBtn.toolTip = Klikk for håndsopprekking +bbb.presentation.error.convert.format = Feil: Vennligst sjekk at dokumenttypen er korrekt. +bbb.desktopPublish.fullscreen.label = Hele skjermen diff --git a/bigbluebutton-client/resources/config.xml.template b/bigbluebutton-client/resources/config.xml.template index 02adf713c43521db5dcd0cc9d3ee93a89cea3416..9088c102493098d009e9edab7f303a1c67991cca 100755 --- a/bigbluebutton-client/resources/config.xml.template +++ b/bigbluebutton-client/resources/config.xml.template @@ -7,16 +7,17 @@ <application uri="rtmp://HOST/bigbluebutton" host="http://HOST/bigbluebutton/api/enter" /> <language userSelectionEnabled="true" /> <skinning enabled="false" url="branding/css/theme.css.swf" /> - <layout showDebugWindow="false" showVideoLayout="false" showResetLayout="true" showToolbar="true" showHelpButton="true" showLogoutWindow="true"/> + <layout showLogButton="false" showVideoLayout="false" showResetLayout="true" showToolbar="true" showHelpButton="true" showLogoutWindow="true"/> <modules> <module name="ChatModule" url="ChatModule.swf?v=VERSION" uri="rtmp://HOST/bigbluebutton" dependsOn="ViewersModule" - translationOn="true" - translationEnabled="true" + translationOn="false" + translationEnabled="false" privateEnabled="true" + position="top-right" /> <module name="ViewersModule" url="ViewersModule.swf?v=VERSION" @@ -61,7 +62,8 @@ camModeFps="15" camQualityBandwidth="0" camQualityPicture="50" - h264Level="4.1" + enableH264="false" + h264Level="2.1" h264Profile="main" /> @@ -82,6 +84,10 @@ dependsOn="VideoconfModule, ViewersModule" autoDock="true" maximizeWindow="false" + position="bottom-right" + width="172" + height="179" + layout="smart" /> <!-- new module in development: diff --git a/bigbluebutton-client/resources/prod/locales.xml b/bigbluebutton-client/resources/prod/locales.xml index 5725c5f3cdd3e3b786a3771ce0a442cc79d37d9a..2efa0a0203cb9d7b2598ea7a89f7c71f222a6ab4 100755 --- a/bigbluebutton-client/resources/prod/locales.xml +++ b/bigbluebutton-client/resources/prod/locales.xml @@ -1,29 +1,46 @@ <?xml version="1.0" ?> <locales> + <locale code="ar_SY" name="Arabic (Syria)"/> <locale code="az_AZ" name="Azerbaijani"/> + <locale code="eu_EU" name="Basque" /> + <locale code="bn_BN" name="Bengali" /> + <locale code="bg_BG" name="Bulgarian" /> + <locale code="zh_CN" name="Chinese (Simplified)"/> + <locale code="zh_TW" name="Chinese (Traditional)"/> + <locale code="hr_HR" name="Croatian" /> + <locale code="cs_CZ" name="Czech" /> <locale code="da_DK" name="Danish" /> - <locale code="de_DE" name="German"/> - <locale code="el_GR" name="Greek"/> + <locale code="nl_NL" name="Dutch" /> <locale code="en_US" name="English"/> - <locale code="es_ES" name="Spanish"/> - <locale code="es_LA" name="Spanish (Latin American)"/> + <locale code="fa_IR" name="Farsi" /> + <locale code="fi_FI" name="Finnish"/> <locale code="fr_FR" name="French"/> - <locale code="fr_CA" name="French Canadian"/> - <locale code="hu_HU" name="Hungarian"/> - <locale code="id_ID" name="Indonesian"/> - <locale code="it_IT" name="Italian"/> - <locale code="ko_KR" name="Korean"/> + <locale code="fr_CA" name="French (Canadian)"/> + <locale code="de_DE" name="German"/> + <locale code="el_GR" name="Greek"/> + <locale code="hu_HU" name="Hungarian"/> + <locale code="id_ID" name="Indonesian"/> + <locale code="it_IT" name="Italian"/> + <locale code="ja_JP" name="Japanese"/> + <locale code="ko_KR" name="Korean"/> + <locale code="lv_LV" name="Latvian"/> <locale code="lt_LT" name="Lithuania"/> - <locale code="nb_NO" name="Norwegian"/> - <locale code="nl_NL" name="Netherland"/> + <locale code="mn_MN" name="Mongolian"/> + <locale code="ne_NE" name="Nepali"/> + <locale code="no_NO" name="Norwegian"/> <locale code="pl_PL" name="Polish"/> <locale code="pt_BR" name="Portuguese (Brazilian)"/> <locale code="pt_PT" name="Portuguese"/> <locale code="ro_RO" name="Romanian"/> <locale code="ru_RU" name="Russian"/> + <locale code="sr_SR" name="Serbian (Cyrillic)"/> + <locale code="sr_RS" name="Serbian (Latin)"/> + <locale code="sl_SL" name="Slovenian"/> + <locale code="es_ES" name="Spanish"/> + <locale code="es_LA" name="Spanish (Latin American)"/> + <locale code="sv_SE" name="Swedish"/> + <locale code="th_TH" name="Thai"/> <locale code="tr_TR" name="Turkish"/> <locale code="uk_UA" name="Ukrainian"/> <locale code="vi_VN" name="Vietnamese"/> - <locale code="zh_CN" name="Chinese (Simplified)"/> - <locale code="zh_TW" name="Chinese (Traditional)"/> </locales> diff --git a/bigbluebutton-client/src/BigBlueButton.mxml b/bigbluebutton-client/src/BigBlueButton.mxml index 2fd4696f9839d92d5627c0e6bc82a186ce62ee55..3bc9eed809565230b4251b063e14be29b2433a86 100755 --- a/bigbluebutton-client/src/BigBlueButton.mxml +++ b/bigbluebutton-client/src/BigBlueButton.mxml @@ -31,8 +31,7 @@ <mx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - + import com.asfusion.mate.events.Dispatcher; import mx.managers.HistoryManager; import org.bigbluebutton.core.EventBroadcaster; import org.bigbluebutton.core.managers.ConfigManager2; @@ -89,8 +88,6 @@ // Video test private static var didVideoStart:Boolean = false; - private var configMgr:ConfigManager2 = BBB.initConfigManager(); - public function handleLoginEvent(event:BBBEvent):void { LogUtil.debug("******************* Received loggedin event"); @@ -204,11 +201,12 @@ protected function init():void { EventBroadcaster.getInstance().addEventListener("configLoadedEvent", configLoadedEventHandler); - configMgr.loadConfig(); + BBB.initConfigManager(); } private function configLoadedEventHandler(e:Event):void { LogUtil.debug("***** Config Loaded ****"); + mainShell.initOptions(null); } ]]> @@ -217,7 +215,6 @@ <m:Melomel/> <maps:ApplicationEventMap /> - <views:MainApplicationShell id="mainShell"/> <mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/> diff --git a/bigbluebutton-client/src/SettingsModule.mxml b/bigbluebutton-client/src/SettingsModule.mxml index be4843279ec59e9e971a29417818ea88c43f6c1c..ff65a977a7777f6068f3eb9fc7936a5e663fede1 100755 --- a/bigbluebutton-client/src/SettingsModule.mxml +++ b/bigbluebutton-client/src/SettingsModule.mxml @@ -28,16 +28,13 @@ $Id: $ <![CDATA[ import com.asfusion.mate.events.Dispatcher; import mx.core.FlexGlobals; - import mx.managers.PopUpManager; - + import mx.managers.PopUpManager; import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.main.events.SettingsEvent; import org.bigbluebutton.modules.settings.SettingsPanel; import org.bigbluebutton.modules.settings.util.PersistUserPreferences; import org.bigbluebutton.modules.settings.util.Requirements; - import spark.components.Application; - private var _moduleName:String = "Settings Module"; private var _attributes:Object; diff --git a/bigbluebutton-client/src/VideodockModule.mxml b/bigbluebutton-client/src/VideodockModule.mxml index fb0f06be8db399791144e9ba8520bde58ebf198e..064007535f295168a0b5ef327f3aabbc186cfceb 100755 --- a/bigbluebutton-client/src/VideodockModule.mxml +++ b/bigbluebutton-client/src/VideodockModule.mxml @@ -6,7 +6,6 @@ import org.bigbluebutton.common.LogUtil; private var _moduleName:String = "Videodock Module"; - private var _attributes:Object; private function onCreationComplete():void { LogUtil.debug("VideodockModule initialized"); @@ -16,19 +15,9 @@ return _moduleName; } - public function get autoDock():Boolean { - return (_attributes.autoDock == "true"); - } - - public function get maximizeWindow():Boolean { - return (_attributes.maximizeWindow == "true"); - } - public function start(attributes:Object):void { LogUtil.debug("Videodock attr: " + attributes.username); - _attributes = attributes; - eventMap.module = this; eventMap.startModule(); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/APIEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/common/APIEventMap.mxml deleted file mode 100755 index 0b58ed53403c20599668210b9d0814f372aad0a7..0000000000000000000000000000000000000000 --- a/bigbluebutton-client/src/org/bigbluebutton/common/APIEventMap.mxml +++ /dev/null @@ -1,61 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<!-- - BigBlueButton open source conferencing system - http://www.bigbluebutton.org - - Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below). - - BigBlueButton is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2.1 of the License, or (at your option) any later - version. - - BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. - - $Id: $ ---> - -<EventMap xmlns="http://mate.asfusion.com/" xmlns:mx="http://www.adobe.com/2006/mxml" > - <mx:Script> - <![CDATA[ - import mx.events.FlexEvent; - - import org.bigbluebutton.main.events.ParticipantJoinEvent; - import org.bigbluebutton.main.events.PresenterStatusEvent; - import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent; - - private var userManager:UserManager = UserManager.getInstance(); - - private function participantEvent(event:ParticipantJoinEvent):void{ - if (event.join) userManager.participantJoined(event.participant); - else if (!event.join) userManager.participantLeft(event.participant); - } - - private function presenterChanged(event:PresenterStatusEvent):void{ - userManager.presenterChanged(event.userid); - } - - private function conferenceCreated(e:ConferenceCreatedEvent):void{ - userManager.conferenceCreated(e.conference); - } - ]]> - </mx:Script> - - <EventHandlers type="{ParticipantJoinEvent.PARTICIPANT_JOINED_EVENT}" > - <InlineInvoker method="participantEvent" arguments="{event}" /> - </EventHandlers> - - <EventHandlers type="{PresenterStatusEvent.PRESENTER_NAME_CHANGE}" > - <InlineInvoker method="presenterChanged" arguments="{event}" /> - </EventHandlers> - - <EventHandlers type="{ConferenceCreatedEvent.CONFERENCE_CREATED_EVENT}" > - <InlineInvoker method="conferenceCreated" arguments="{event}" /> - </EventHandlers> - -</EventMap> diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/Images.as b/bigbluebutton-client/src/org/bigbluebutton/common/Images.as index 6b4773ef7f44c44eda52805a77a51d974863394c..2213d2503c4ad8835c38958e2fe93cb531c6540d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/common/Images.as +++ b/bigbluebutton-client/src/org/bigbluebutton/common/Images.as @@ -21,6 +21,14 @@ package org.bigbluebutton.common [Bindable] public class Images { + [Embed(source="assets/images/green-circle.png")] + public var greenCircle:Class; + + [Embed(source="assets/images/blank-circle.png")] + public var blankCircle:Class; + + [Embed(source="assets/images/red-circle.png")] + public var redCircle:Class; [Embed(source="assets/images/user_gray.png")] public var user_gray:Class; diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/UserManager.as b/bigbluebutton-client/src/org/bigbluebutton/common/UserManager.as deleted file mode 100755 index c93d2989b822ee50d02d79025aee3cb50638bc12..0000000000000000000000000000000000000000 --- a/bigbluebutton-client/src/org/bigbluebutton/common/UserManager.as +++ /dev/null @@ -1,134 +0,0 @@ -/** -* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ -* -* Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below). -* -* This program is free software; you can redistribute it and/or modify it under the -* terms of the GNU Lesser General Public License as published by the Free Software -* Foundation; either version 2.1 of the License, or (at your option) any later -* version. -* -* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY -* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License along -* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. -* -*/ -package org.bigbluebutton.common -{ - import mx.collections.ArrayCollection; - - import org.bigbluebutton.main.model.User; - import org.bigbluebutton.main.model.users.Conference; - - /** - * The UserManager allows you to interact with the user data of those currently logged in to the conference. - * - */ - public class UserManager - { - private static var instance:UserManager = null; - - private var listeners:ArrayCollection; - - private var users:ArrayCollection; - - private var conference:Conference; - - /** - * This class is a singleton. Please initialize it using the getInstance() method. - * - */ - public function UserManager(enforcer:SingletonEnforcer) - { - if (enforcer == null){ - throw new Error("There can only be 1 UserManager instance"); - } - initialize(); - } - - private function initialize():void{ - listeners = new ArrayCollection(); - users = new ArrayCollection(); - } - - /** - * Return the single instance of the UserManager class - */ - public static function getInstance():UserManager{ - if (instance == null){ - instance = new UserManager(new SingletonEnforcer()); - } - return instance; - } - - /** - * Register a class to listen to updates from the UserManager - */ - public function registerListener(listener:IUserListener):void{ - listeners.addItem(listener); - } - - /** - * Returns an ArrayCollection of User objects, containing all users currently in the room. - */ - public function getUserList():ArrayCollection{ - return users; - } - - /** - * Returns the current Presenter. Returns NULL if there is currently no presenter assigned in the room - */ - public function getPresenter():User{ - var j:int = 0; - var u:User = null; - for (var i:int = 0; i<users.length; i++){ - if ((users.getItemAt(i) as User).isPresenter) u = users.getItemAt(i) as User; - } - return u; - } - - public function getConference():Conference{ - return this.conference; - } - - internal function conferenceCreated(conference:Conference):void{ - this.conference = conference; - } - - internal function participantJoined(participant:User):void{ - users.addItem(participant); - for (var i:int = 0; i<listeners.length; i++){ - (listeners.getItemAt(i) as IUserListener).userJoined(participant); - } - } - - internal function participantLeft(participant:User):void{ - var j:int = -1; - for (var i:int = 0; i<users.length; i++){ - if ((users.getItemAt(i) as User).userid == participant.userid) j = i; - } - if (j >= 0) users.removeItemAt(j); - - for (var k:int = 0; k<listeners.length; k++){ - (listeners.getItemAt(k) as IUserListener).userLeft(participant); - } - } - - internal function presenterChanged(userId:int):void{ - var user:User = null; - - for (var i:int = 0; i<users.length; i++){ - if ((users.getItemAt(i) as User).userid == userId.toString()) user = users.getItemAt(i) as User; - } - - for (var k:int = 0; k<listeners.length; k++){ - (listeners.getItemAt(k) as IUserListener).presenterChanged(user); - } - } - } -} - -class SingletonEnforcer{} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/blank-circle.png b/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/blank-circle.png new file mode 100755 index 0000000000000000000000000000000000000000..f3b2a1360a0a4dcfe3824294e268cad6918ea240 Binary files /dev/null and b/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/blank-circle.png differ diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/green-circle.png b/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/green-circle.png new file mode 100755 index 0000000000000000000000000000000000000000..08f8b8c25a23734b28abe4b90f809d770d592600 Binary files /dev/null and b/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/green-circle.png differ diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/red-circle.png b/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/red-circle.png new file mode 100755 index 0000000000000000000000000000000000000000..1c500ba34e6e023796bf329bb335390d9649c3d6 Binary files /dev/null and b/bigbluebutton-client/src/org/bigbluebutton/common/assets/images/red-circle.png differ diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as b/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as index a545537d470f4976712509944105857e91d74bed..f2adcc2809a3dadea1bee3a54c6ddb9e6f4c3fbe 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as @@ -9,20 +9,12 @@ package org.bigbluebutton.core import flash.system.Capabilities; public class BBB { - private static var userManager:UserManager = null; private static var configManager:ConfigManager2 = null; private static var streamManager:StreamManager = null; private static var connectionManager:ConnectionManager = null; private static var session:Session = null; private static var userConfigManager:UserConfigManager = null; - - public static function initUserManager():UserManager { - if (userManager == null) { - userManager = new UserManager(); - } - return userManager; - } - + public static function initUserConfigManager():UserConfigManager { if (userConfigManager == null) { userConfigManager = new UserConfigManager(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConfigManager2.as b/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConfigManager2.as index 170af3edf499bee3e59833d4d9e0287314b3eb64..ea1fb96a9fe2e122bb195554c4be6b95e0be82a2 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConfigManager2.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConfigManager2.as @@ -24,9 +24,9 @@ package org.bigbluebutton.core.managers private function handleComplete(e:Event):void{ _config = new Config(new XML(e.target.data)); EventBroadcaster.getInstance().dispatchEvent(new Event("configLoadedEvent", true)); - var dispatcher:Dispatcher = new Dispatcher(); - LogUtil.debug("*** Sending config loaded event."); - dispatcher.dispatchEvent(new Event("configLoadedEvent", true)); + // var dispatcher:Dispatcher = new Dispatcher(); + // LogUtil.debug("*** Sending config loaded event."); + // dispatcher.dispatchEvent(new Event("configLoadedEvent", true)); } public function get config():Config { diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserManager.as b/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserManager.as index bc50e691705c84c305b90e071442ad6afaab034f..a9c503975bc2666b29e6f9c2c81e2813e3c85b83 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserManager.as @@ -1,10 +1,106 @@ -package org.bigbluebutton.core.managers -{ - public class UserManager - { - public function UserManager() - { - } +/** +* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ +* +* Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below). +* +* This program is free software; you can redistribute it and/or modify it under the +* terms of the GNU Lesser General Public License as published by the Free Software +* Foundation; either version 2.1 of the License, or (at your option) any later +* version. +* +* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY +* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License along +* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. +* +*/ +package org.bigbluebutton.core.managers { + import mx.collections.ArrayCollection; + + import org.bigbluebutton.common.IUserListener; + import org.bigbluebutton.main.model.User; + import org.bigbluebutton.main.model.users.Conference; + /** + * The UserManager allows you to interact with the user data of those currently logged in to the conference. + * + */ + public class UserManager { + private static var instance:UserManager = null; + private var listeners:ArrayCollection; + private var users:ArrayCollection; + private var conference:Conference = new Conference(); + + /** + * This class is a singleton. Please initialize it using the getInstance() method. + * + */ + public function UserManager(enforcer:SingletonEnforcer) { + if (enforcer == null){ + throw new Error("There can only be 1 UserManager instance"); + } + initialize(); + } + + private function initialize():void{ + listeners = new ArrayCollection(); + users = new ArrayCollection(); + } + + /** + * Return the single instance of the UserManager class + */ + public static function getInstance():UserManager{ + if (instance == null){ + instance = new UserManager(new SingletonEnforcer()); + } + return instance; + } + + /** + * Register a class to listen to updates from the UserManager + */ + public function registerListener(listener:IUserListener):void{ + listeners.addItem(listener); + } + + public function getConference():Conference{ + return this.conference; + } + + public function participantJoined(participant:User):void{ + users.addItem(participant); + for (var i:int = 0; i < listeners.length; i++){ + (listeners.getItemAt(i) as IUserListener).userJoined(participant); + } + } + + public function participantLeft(participant:User):void{ + var j:int = -1; + for (var i:int = 0; i<users.length; i++){ + if ((users.getItemAt(i) as User).userid == participant.userid) j = i; + } + if (j >= 0) users.removeItemAt(j); + + for (var k:int = 0; k<listeners.length; k++){ + (listeners.getItemAt(k) as IUserListener).userLeft(participant); + } + } + + public function presenterChanged(userId:int):void{ + var user:User = null; + + for (var i:int = 0; i<users.length; i++){ + if ((users.getItemAt(i) as User).userid == userId.toString()) user = users.getItemAt(i) as User; + } + + for (var k:int = 0; k<listeners.length; k++){ + (listeners.getItemAt(k) as IUserListener).presenterChanged(user); + } + } } -} \ No newline at end of file +} + +class SingletonEnforcer{} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Config.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Config.as index 0d228b631a6cc88f861a4f840a5d0410e407632b..f8faad2bf464c0613b53d93ea81ce8c9c1d19a9d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Config.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Config.as @@ -54,15 +54,8 @@ package org.bigbluebutton.core.model return a } - public function get layout():Object { - var a:Object = new Object(); - a.showDebugWindow = ((config.layout.@showDebugWindow).toUpperCase() == "TRUE") ? true : false; - a.showVideoLayout = ((config.layout.@showVideoLayout).toUpperCase() == "TRUE") ? true : false; - a.showResetLayout = ((config.layout.@showResetLayout).toUpperCase() == "TRUE") ? true : false; - a.showToolbar = ((config.layout.@showToolbar).toUpperCase() == "TRUE") ? true : false; - a.showLogoutWindow = ((config.layout.@showLogoutWindow).toUpperCase() == "TRUE") ? true : false; - a.showHelpButton = ((config.layout.@showHelpButton).toUpperCase() == "TRUE") ? true : false; - return a + public function get layout():XML { + return new XML(config.layout.toXMLString()); } public function isModulePresent(name:String):Boolean { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConfigParameters.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/ConfigParameters.as index e6de0e856d08443cf101b7e17458aeb718ea66c6..1181fc520841bc204a76d199aedd059e9098fc0c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConfigParameters.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/ConfigParameters.as @@ -28,8 +28,7 @@ package org.bigbluebutton.main.model import org.bigbluebutton.main.events.AppVersionEvent; import org.bigbluebutton.main.model.modules.ModuleDescriptor; - public class ConfigParameters - { + public class ConfigParameters { public static const FILE_PATH:String = "conf/config.xml"; private var _urlLoader:URLLoader; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/LayoutOptions.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/LayoutOptions.as index 11d54e766807f6193e88407df7df5d0d4107af7e..a18cf97f27cdc333b37de3446e40a80faa5d960a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/LayoutOptions.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/LayoutOptions.as @@ -1,24 +1,49 @@ package org.bigbluebutton.main.model { + import org.bigbluebutton.core.BBB; + public class LayoutOptions { - [Bindable] - public var showLogButton:Boolean = true; - - [Bindable] - public var showVideoLayout:Boolean = true; + [Bindable] public var showDebugWindow:Boolean = true; + [Bindable] public var showLogButton:Boolean = true; + [Bindable] public var showVideoLayout:Boolean = true; + [Bindable] public var showResetLayout:Boolean = true; + [Bindable] public var showToolbar:Boolean = true; + [Bindable] public var showHelpButton:Boolean = true; + [Bindable] public var showLogoutWindow:Boolean = true; - [Bindable] - public var showResetLayout:Boolean = true; + public function parseOptions():void { + var vxml:XML = BBB.initConfigManager().config.layout; + if (vxml != null) { + if (vxml.@showDebugWindow != undefined) { + showDebugWindow = (vxml.@showDebugWindow.toString().toUpperCase() == "TRUE") ? true : false; + } - [Bindable] - public var showToolbar:Boolean = true; - - [Bindable] - public var showHelpButton:Boolean = true; - - [Bindable] - public var showLogoutWindow:Boolean = true; + if (vxml.@showLogButton != undefined) { + showLogButton = (vxml.@showLogButton.toString().toUpperCase() == "TRUE") ? true : false; + } + + if (vxml.@showVideoLayout != undefined) { + showVideoLayout = (vxml.@showVideoLayout.toString().toUpperCase() == "TRUE") ? true : false; + } + + if (vxml.@showResetLayout != undefined) { + showResetLayout = (vxml.@showResetLayout.toString().toUpperCase() == "TRUE") ? true : false; + } + + if (vxml.@showToolbar != undefined) { + showToolbar = (vxml.@showToolbar.toString().toUpperCase() == "TRUE") ? true : false; + } + + if (vxml.@showHelpButton != undefined) { + showHelpButton = (vxml.@showHelpButton.toString().toUpperCase() == "TRUE") ? true : false; + } + + if (vxml.@showLogoutWindow != undefined) { + showLogoutWindow = (vxml.@showLogoutWindow.toString().toUpperCase() == "TRUE") ? true : false; + } + } + } } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTestProxy.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTestProxy.as index 4457ce5fd207381c620377d4837322e56fcb135a..c8697d4e611a6b3fd9febb068e850c0a227c48f6 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTestProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTestProxy.as @@ -16,20 +16,15 @@ * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. * */ -package org.bigbluebutton.main.model -{ +package org.bigbluebutton.main.model { import com.asfusion.mate.events.Dispatcher; - import flash.events.NetStatusEvent; import flash.net.NetConnection; - import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.main.events.PortTestEvent; import org.bigbluebutton.main.model.modules.ModulesDispatcher; - public class PortTestProxy - { - + public class PortTestProxy { private var nc:NetConnection; private var protocol:String; private var port:String; @@ -38,16 +33,11 @@ package org.bigbluebutton.main.model private var uri:String; private var modulesDispatcher:ModulesDispatcher; - public function PortTestProxy() - { + public function PortTestProxy() { modulesDispatcher = new ModulesDispatcher(); } - public function connect(protocol:String = "", - hostname:String = "", - port:String = "", - application:String = ""):void - { + public function connect(protocol:String = "", hostname:String = "", port:String = "", application:String = ""):void { var portTest:PortTest = new PortTest(protocol,hostname,port,application); portTest.addConnectionSuccessListener(connectionListener); portTest.connect(); @@ -65,59 +55,24 @@ package org.bigbluebutton.main.model modulesDispatcher.sendPortTestFailedEvent(port, hostname, protocol, application); } } - - public function connect1(protocol:String = "", - hostname:String = "", - port:String = "", - application:String = ""):void - { - this.protocol = protocol; - this.hostname = hostname; - this.port = port; - this.application = application; - - nc = new NetConnection(); - nc.client = this; - nc.addEventListener( NetStatusEvent.NET_STATUS, netStatusEventHandler ); - - uri = protocol + "://" + hostname + "/" + application; - LogUtil.debug("Testing connection to " + uri); - try - { - nc.connect( uri ); - } - catch(e:ArgumentError) - { - LogUtil.error("Incorrect arguments on connecting wiht port testing"); - //facade.sendNotification(MainApplicationConstants.PORT_TEST_FAILED, - // {protocol:protocol, hostname:hostname, port:port, application:application}); - } - } - - public function close() : void - { + + public function close():void { nc.removeEventListener(NetStatusEvent.NET_STATUS, netStatusEventHandler); nc.close(); } - protected function netStatusEventHandler(event:NetStatusEvent):void - { + protected function netStatusEventHandler(event:NetStatusEvent):void { var info:Object = event.info; var statusCode : String = info.code; - if ( statusCode == "NetConnection.Connect.Success" ) - { + if (statusCode == "NetConnection.Connect.Success") { LogUtil.debug("Successfully connected to " + uri); modulesDispatcher.sendPortTestSuccessEvent(port, hostname, protocol, application); - } - else if ( statusCode == "NetConnection.Connect.Rejected" || + } else if (statusCode == "NetConnection.Connect.Rejected" || statusCode == "NetConnection.Connect.Failed" || - statusCode == "NetConnection.Connect.Closed" ) - { + statusCode == "NetConnection.Connect.Closed" ) { LogUtil.error("Failed to connect to " + uri); - modulesDispatcher.sendPortTestFailedEvent(port, hostname, protocol, application); - } else { LogUtil.error("Failed to connect to " + uri + " due to " + statusCode); } @@ -129,7 +84,5 @@ package org.bigbluebutton.main.model * The Red5 oflaDemo returns bandwidth stats. */ public function onBWDone() : void { } - - } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as index ae60c170fba29e5dde133f2b82e760326dbc3663..c2ad2cd461c58eea96d9ff5492578c34c4b21f71 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as @@ -26,8 +26,7 @@ package org.bigbluebutton.main.model.users import org.bigbluebutton.common.Role; import org.bigbluebutton.main.model.users.events.StreamStartedEvent; - public class BBBUser - { + public class BBBUser { public static const MODERATOR:String = "MODERATOR"; public static const VIEWER:String = "VIEWER"; public static const PRESENTER:String = "PRESENTER"; @@ -43,6 +42,10 @@ package org.bigbluebutton.main.model.users [Bindable] public var room:String = ""; [Bindable] public var authToken:String = ""; [Bindable] public var selected:Boolean = false; + [Bindable] public var voiceUserid:Number; + [Bindable] public var voiceMuted:Boolean = false; + [Bindable] public var voiceJoined:Boolean = false; + [Bindable] public var voiceLocked:Boolean = false; private var _status:StatusCollection = new StatusCollection(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as index 6bd2ad94e7ab47d873a65a18fe536b4bb53c03ca..8e71d8f920ed99a60de969443b04086363f359dd 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as @@ -16,17 +16,16 @@ * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. * */ -package org.bigbluebutton.main.model.users -{ +package org.bigbluebutton.main.model.users { import mx.collections.ArrayCollection; - import org.bigbluebutton.core.BBB; + import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.common.Role; + import org.bigbluebutton.core.BBB; public class Conference { - private var _myUserid : Number; - - [Bindable] public var me:BBBUser = null; + private var _myUserid:Number; + [Bindable] private var me:BBBUser = null; [Bindable] public var users:ArrayCollection = null; public function Conference():void { @@ -34,14 +33,8 @@ package org.bigbluebutton.main.model.users users = new ArrayCollection(); } - /** - * Adds a user to this conference - * @param newuser - * - */ public function addUser(newuser:BBBUser):void { - if (! hasParticipant(newuser.userid)) { - + if (! hasParticipant(newuser.userid)) { if (newuser.userid == me.userid) { newuser.me = true; } @@ -51,14 +44,7 @@ package org.bigbluebutton.main.model.users } } - /** - * Check if the user with the specified id exists - * @param id - * @return - * - */ - public function hasParticipant(userid:Number) : Boolean - { + public function hasParticipant(userid:Number):Boolean { var p:Object = getParticipantIndex(userid); if (p != null) { return true; @@ -71,8 +57,7 @@ package org.bigbluebutton.main.model.users var p:BBBUser; var moderatorCount:int = 0; - for (var i:int = 0; i < users.length; i++) - { + for (var i:int = 0; i < users.length; i++) { p = users.getItemAt(i) as BBBUser; if (p.role == Role.MODERATOR) { moderatorCount++; @@ -85,8 +70,7 @@ package org.bigbluebutton.main.model.users public function getTheOnlyModerator():BBBUser { var p:BBBUser; - for (var i:int = 0; i < users.length; i++) - { + for (var i:int = 0; i < users.length; i++) { p = users.getItemAt(i) as BBBUser; if (p.role == Role.MODERATOR) { return BBBUser.copy(p); @@ -95,15 +79,8 @@ package org.bigbluebutton.main.model.users return null; } - - /** - * Get the user with the specific id - * @param id - * @return - * - */ - public function getParticipant(userid:Number) : BBBUser - { + + public function getParticipant(userid:Number):BBBUser { var p:Object = getParticipantIndex(userid); if (p != null) { return p.participant as BBBUser; @@ -121,14 +98,8 @@ package org.bigbluebutton.main.model.users var a:BBBUser = user.participant as BBBUser; return a.presenter; } - - /** - * Remove participant with the specified id number - * @param userid - * - */ - public function removeParticipant(userid:Number) : void - { + + public function removeParticipant(userid:Number):void { var p:Object = getParticipantIndex(userid); if (p != null) { LogUtil.debug("removing user[" + p.participant.name + "," + p.participant.userid + "]"); @@ -143,12 +114,10 @@ package org.bigbluebutton.main.model.users * @return -1 if participant not found * */ - private function getParticipantIndex(userid:Number):Object - { + private function getParticipantIndex(userid:Number):Object { var aUser : BBBUser; - for (var i:int = 0; i < users.length; i++) - { + for (var i:int = 0; i < users.length; i++) { aUser = users.getItemAt(i) as BBBUser; if (aUser.userid == userid) { @@ -159,20 +128,108 @@ package org.bigbluebutton.main.model.users // Participant not found. return null; } + + public function amIPresenter():Boolean { + return me.presenter; + } + + public function setMePresenter(presenter:Boolean):void { + me.presenter = presenter; + } + + public function amIThisUser(userid:int):Boolean { + return me.userid == userid; + } + + public function amIModerator():Boolean { + return me.role == Role.MODERATOR; + } - /** - * Removes all the participants from the conference - * - */ - public function removeAllParticipants() : void - { + public function muteMyVoice(mute:Boolean):void { + voiceMuted = mute; + } + + public function isMyVoiceMuted():Boolean { + return me.voiceMuted; + } + + [Bindable] + public function set voiceMuted(m:Boolean):void { + me.voiceMuted = m; + } + + public function get voiceMuted():Boolean { + return me.voiceMuted; + } + + public function setMyVoiceUserId(userid:int):void { + me.voiceUserid = userid; + } + + public function getMyVoiceUserId():Number { + return me.voiceUserid; + } + + public function amIThisVoiceUser(userid:int):Boolean { + return me.voiceUserid == userid; + } + + public function setMyVoiceJoined(joined:Boolean):void { + voiceJoined = joined; + } + + public function amIVoiceJoined():Boolean { + return me.voiceJoined; + } + + /** Hook to make the property Bindable **/ + [Bindable] + public function set voiceJoined(j:Boolean):void { + me.voiceJoined = j; + } + + public function get voiceJoined():Boolean { + return me.voiceJoined; + } + + [Bindable] + public function set voiceLocked(locked:Boolean):void { + me.voiceLocked = locked; + } + + public function get voiceLocked():Boolean { + return me.voiceLocked; + } + + public function getMyUserId():Number { + return me.userid; + } + public function setMyUserid(userid:int):void { + me.userid = userid; + } + + public function setMyName(name:String):void { + me.name = name; + } + + public function setMyRole(role:String):void { + me.role = role; + } + + public function setMyRoom(room:String):void { + me.room = room; + } + + public function setMyAuthToken(token:String):void { + me.authToken = token; + } + + public function removeAllParticipants():void { users.removeAll(); } - public function newUserStatus(id:Number, status:String, value:Object):void - { - var aUser:BBBUser = getParticipant(id); - + public function newUserStatus(id:Number, status:String, value:Object):void { + var aUser:BBBUser = getParticipant(id); if (aUser != null) { var s:Status = new Status(status, value); aUser.changeStatus(s); @@ -185,8 +242,7 @@ package org.bigbluebutton.main.model.users * Sorts the users by name * */ - private function sort():void - { + private function sort():void { users.source.sortOn("name", Array.CASEINSENSITIVE); users.refresh(); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as index de27aa3e84bccded9323ae97334ff7607dd28028..bbdf305a2cee5bee336e91af6c6cb2477cc7ae65 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as @@ -26,6 +26,7 @@ package org.bigbluebutton.main.model.users import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.managers.UserConfigManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.SuccessfulLoginEvent; import org.bigbluebutton.main.events.UserServicesEvent; import org.bigbluebutton.main.model.ConferenceParameters; @@ -39,16 +40,11 @@ package org.bigbluebutton.main.model.users public class UserService { private var joinService:JoinService; - private var _conference:Conference; private var _userSOService:UsersSOService; - private var _conferenceParameters:ConferenceParameters; - + private var _conferenceParameters:ConferenceParameters; private var applicationURI:String; - private var hostURI:String; - + private var hostURI:String; private var connection:NetConnection; - private var userId:Number; - private var dispatcher:Dispatcher; public function UserService() { @@ -66,17 +62,16 @@ package org.bigbluebutton.main.model.users private function joinListener(success:Boolean, result:Object):void{ if (success) { - _conference = new Conference(); - _conference.me.name = result.username; - _conference.me.role = result.role; - _conference.me.room = result.room; - _conference.me.authToken = result.authToken; + UserManager.getInstance().getConference().setMyName(result.username); + UserManager.getInstance().getConference().setMyRole(result.role); + UserManager.getInstance().getConference().setMyRoom(result.room); + UserManager.getInstance().getConference().setMyAuthToken(result.authToken); _conferenceParameters = new ConferenceParameters(); _conferenceParameters.conference = result.conference; - _conferenceParameters.username = _conference.me.name; - _conferenceParameters.role = _conference.me.role; - _conferenceParameters.room = _conference.me.room; + _conferenceParameters.username = result.username; + _conferenceParameters.role = result.role; + _conferenceParameters.room = result.room; _conferenceParameters.webvoiceconf = result.webvoiceconf; _conferenceParameters.voicebridge = result.voicebridge; _conferenceParameters.welcome = result.welcome; @@ -94,9 +89,8 @@ package org.bigbluebutton.main.model.users */ var ucm:UserConfigManager = BBB.initUserConfigManager(); ucm.setConferenceParameters(_conferenceParameters); - var e:ConferenceCreatedEvent = new ConferenceCreatedEvent(ConferenceCreatedEvent.CONFERENCE_CREATED_EVENT); - e.conference = _conference; + e.conference = UserManager.getInstance().getConference(); dispatcher.dispatchEvent(e); connect(); @@ -104,12 +98,12 @@ package org.bigbluebutton.main.model.users } private function connect():void{ - _userSOService = new UsersSOService(applicationURI, _conference); + _userSOService = new UsersSOService(applicationURI); _userSOService.connect(_conferenceParameters); } public function userLoggedIn(e:UsersConnectionEvent):void{ - _conference.me.userid = e.userid; + UserManager.getInstance().getConference().setMyUserid(e.userid); _conferenceParameters.connection = e.connection; _conferenceParameters.userid = e.userid; @@ -127,25 +121,17 @@ package org.bigbluebutton.main.model.users public function disconnectTest():void{ _userSOService.disconnect(false); } - - public function get me():BBBUser { - return _conference.me; - } - + public function isModerator():Boolean { - if (me.role == "MODERATOR") { - return true; - } - - return false; + return UserManager.getInstance().getConference().amIModerator(); } public function get participants():ArrayCollection { - return _conference.users; + return UserManager.getInstance().getConference().users; } public function assignPresenter(assignTo:Number):void { - _userSOService.assignPresenter(assignTo, me.userid); + _userSOService.assignPresenter(assignTo, UserManager.getInstance().getConference().getMyUserId()); } public function addStream(e:BroadcastStartedEvent):void { @@ -157,8 +143,7 @@ package org.bigbluebutton.main.model.users } public function raiseHand(e:RaiseHandEvent):void { - var userid:Number = _conference.me.userid; - _userSOService.raiseHand(userid, e.raised); + _userSOService.raiseHand(UserManager.getInstance().getConference().getMyUserId(), e.raised); } public function lowerHand(e:LowerHandEvent):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UsersSOService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UsersSOService.as index 95e8f5572f13fbbf123f485af6b448775263d2b5..bfcc651e5b16fb08faccc740e85660b992ea806d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UsersSOService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UsersSOService.as @@ -16,8 +16,7 @@ * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. * */ -package org.bigbluebutton.main.model.users -{ +package org.bigbluebutton.main.model.users { import com.asfusion.mate.events.Dispatcher; import flash.events.AsyncErrorEvent; @@ -26,9 +25,8 @@ package org.bigbluebutton.main.model.users import flash.net.Responder; import flash.net.SharedObject; - import mx.controls.Alert; - import org.bigbluebutton.common.LogUtil; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.LogoutEvent; import org.bigbluebutton.main.events.ParticipantJoinEvent; @@ -37,8 +35,7 @@ package org.bigbluebutton.main.model.users import org.bigbluebutton.main.model.User; import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; - public class UsersSOService - { + public class UsersSOService { public static const NAME:String = "ViewersSOService"; public static const LOGNAME:String = "[ViewersSOService]"; @@ -46,18 +43,14 @@ package org.bigbluebutton.main.model.users private static const SO_NAME : String = "participantsSO"; private static const STATUS:String = "_STATUS"; - private var netConnectionDelegate: NetConnectionDelegate; - - private var _participants:Conference; + private var netConnectionDelegate: NetConnectionDelegate; private var _room:String; private var _applicationURI:String; private var dispatcher:Dispatcher; - public function UsersSOService(uri:String, participants:Conference) - { + public function UsersSOService(uri:String) { _applicationURI = uri; - _participants = participants; netConnectionDelegate = new NetConnectionDelegate(uri); dispatcher = new Dispatcher(); } @@ -72,17 +65,14 @@ package org.bigbluebutton.main.model.users netConnectionDelegate.disconnect(onUserAction); } - public function join(userid:Number, room:String) : void - { + public function join(userid:Number, room:String):void { _participantsSO = SharedObject.getRemote(SO_NAME, _applicationURI + "/" + room, false); _participantsSO.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); _participantsSO.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); _participantsSO.client = this; _participantsSO.connect(netConnectionDelegate.connection); - - queryForParticipants(); - - _participants.me.userid = userid; + queryForParticipants(); + UserManager.getInstance().getConference().setMyUserid(userid); } private function queryForParticipants():void { @@ -94,19 +84,17 @@ package org.bigbluebutton.main.model.users function(result:Object):void { LogUtil.debug("Successfully queried participants: " + result.count); if (result.count > 0) { - for(var p:Object in result.participants) - { + for(var p:Object in result.participants) { participantJoined(result.participants[p]); } - } - + } }, // status - On error occurred function(status:Object):void { LogUtil.error("Error occurred:"); for (var x:Object in status) { LogUtil.error(x + " : " + status[x]); - } + } sendConnectionFailedEvent(ConnectionFailedEvent.UNKNOWN_REASON); } )//new Responder @@ -118,25 +106,28 @@ package org.bigbluebutton.main.model.users } public function kickUserCallback(userid:Number):void{ - if (userid == _participants.me.userid){ + if (UserManager.getInstance().getConference().amIThisUser(userid)){ dispatcher.dispatchEvent(new LogoutEvent(LogoutEvent.USER_LOGGED_OUT)); } } public function participantLeft(user:Object):void { - var participant:BBBUser = _participants.getParticipant(Number(user)); + var participant:BBBUser = UserManager.getInstance().getConference().getParticipant(Number(user)); var p:User = new User(); p.userid = String(participant.userid); p.name = participant.name; + UserManager.getInstance().participantLeft(p); + UserManager.getInstance().getConference().removeParticipant(Number(user)); + var dispatcher:Dispatcher = new Dispatcher(); var joinEvent:ParticipantJoinEvent = new ParticipantJoinEvent(ParticipantJoinEvent.PARTICIPANT_JOINED_EVENT); joinEvent.participant = p; joinEvent.join = false; dispatcher.dispatchEvent(joinEvent); - _participants.removeParticipant(Number(user)); + } public function participantJoined(joinedUser:Object):void { @@ -148,7 +139,7 @@ package org.bigbluebutton.main.model.users LogUtil.debug("User status: " + joinedUser.status.hasStream); LogUtil.info("Joined as [" + user.userid + "," + user.name + "," + user.role + "]"); - _participants.addUser(user); + UserManager.getInstance().getConference().addUser(user); participantStatusChange(user.userid, "hasStream", joinedUser.status.hasStream); participantStatusChange(user.userid, "presenter", joinedUser.status.presenter); participantStatusChange(user.userid, "raiseHand", joinedUser.status.raiseHand); @@ -158,12 +149,14 @@ package org.bigbluebutton.main.model.users participant.name = user.name; participant.isPresenter = joinedUser.status.presenter; participant.role = user.role; + UserManager.getInstance().participantJoined(participant); var dispatcher:Dispatcher = new Dispatcher(); var joinEvent:ParticipantJoinEvent = new ParticipantJoinEvent(ParticipantJoinEvent.PARTICIPANT_JOINED_EVENT); joinEvent.participant = participant; joinEvent.join = true; - dispatcher.dispatchEvent(joinEvent); + dispatcher.dispatchEvent(joinEvent); + } /** @@ -180,21 +173,18 @@ package org.bigbluebutton.main.model.users * Callback from the server from many of the bellow nc.call methods */ public function participantStatusChange(userid:Number, status:String, value:Object):void { - LogUtil.debug("Received status change [" + userid + "," + status + "," + value + "]") - - _participants.newUserStatus(userid, status, value); + LogUtil.debug("Received status change [" + userid + "," + status + "," + value + "]") + UserManager.getInstance().getConference().newUserStatus(userid, status, value); if (status == "presenter"){ var e:PresenterStatusEvent = new PresenterStatusEvent(PresenterStatusEvent.PRESENTER_NAME_CHANGE); e.userid = userid; var dispatcher:Dispatcher = new Dispatcher(); dispatcher.dispatchEvent(e); - } - + } } - public function assignPresenter(userid:Number, assignedBy:Number):void { - + public function assignPresenter(userid:Number, assignedBy:Number):void { var nc:NetConnection = netConnectionDelegate.connection; nc.call( "participants.assignPresenter",// Remote function name @@ -237,12 +227,10 @@ package org.bigbluebutton.main.model.users ); //_netConnection.call } - private function netStatusHandler ( event : NetStatusEvent ) : void - { + private function netStatusHandler ( event : NetStatusEvent ):void { var statusCode : String = event.info.code; - switch ( statusCode ) - { + switch (statusCode) { case "NetConnection.Connect.Success" : LogUtil.debug(LOGNAME + ":Connection Success"); sendConnectionSuccessEvent(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml index 1871aaa1ef5be348cb7523783e07b6c273bb5699..348676283b82febfce6f5b42a92c1e7ed8216413 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LanguageSelector.mxml @@ -20,98 +20,15 @@ $Id: $ --> -<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataProvider="{this.langNames}" - selectedIndex="10" change="changeLanguage()" rowCount="15" width="120"> +<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataProvider="{ResourceUtil.getInstance().localeNames}" + selectedIndex="{ResourceUtil.getInstance().localeIndex}" + change="changeLanguage()" rowCount="15" width="120"> <mx:Script> <![CDATA[ - import mx.controls.Alert; - import org.bigbluebutton.util.i18n.ResourceUtil; - [Bindable] private var langNames:Array=[ - 'Azeri' , - 'Basque' , - 'Bengali' , - 'Bulgarian', - 'Czech', - 'Chinese Simplified', - 'Chinese Traditional' , - 'Croatian', - 'Danish' , - 'Dutch', - 'English' , - 'Farsi', - 'French', - 'French Canadian', - 'German', - 'Greek', - 'Indonesian', - 'Italian', - 'Japanese', - 'Korean', - 'Latvian', - 'Lithuanian', - 'Mongolian', - 'Nepali', - 'Norwegian', - 'Portugese', - 'Portugese (Brazil)', - 'Polish', - 'Romanian', - 'Russian', - 'Spanish', - 'Spanish (Latin)', - 'Swedish', - 'Serbian (Cyrillic)', - 'Serbian (Latin)', - 'Thai', - 'Turkish', - 'Ukrainian', - 'Vietnamese',] ; - - private var langCodes:Array=[ - 'az_AZ', - 'eu_EU', - 'bn_BN', - 'bg_BG', - 'cs_CZ', - 'zh_CN', - 'zh_TW', - 'hr_HR', - 'da_DK', - 'nl_NL', - 'en_US', - 'fa_IR', - 'fr_FR', - 'fr_CA', - 'de_DE', - 'el_GR', - 'id_ID', - 'it_IT', - 'ja_JP', - 'ko_KR', - 'lv_LV', - 'lt_LT', - 'mn_MN', - 'nl_NL', - 'nb_NO', - 'pt_PT', - 'pt_BR', - 'pl_PL', - 'ro_RO', - 'ru_RU', - 'es_ES', - 'es_LA', - 'sv_SE', - 'sr_SR', - 'sr_RS', - 'th_TH', - 'tr_TR', - 'uk_UA', - 'vi_VN'] ; - private function changeLanguage():void{ - var lang:String = this.langCodes[this.selectedIndex]; - ResourceUtil.getInstance().changeLocale(lang); + private function changeLanguage():void { + ResourceUtil.getInstance().setPreferredLocale(ResourceUtil.getInstance().getLocaleCodeForIndex(selectedIndex)); } ]]> </mx:Script> diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml index d9eea7a54998802a85a8a3a0099086c63e50f2e7..19917ffa958b8ed22e73172f6c9f45d46a391fce 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml @@ -42,24 +42,19 @@ <mate:Listener type="{ConnectionFailedEvent.CONNECTION_REJECTED}" method="attemptReconnect" /> <mate:Listener type="configLoadedEvent" method="initOptions" /> <mate:Listener type="SHOW_MIC_SETTINGS" method="showMicSettings" /> - <common:APIEventMap /> <mx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import flash.events.MouseEvent; - + import com.asfusion.mate.events.Dispatcher; + import flash.events.MouseEvent; import flexlib.mdi.containers.MDIWindow; - import flexlib.mdi.effects.effectsLib.MDIVistaEffects; - + import flexlib.mdi.effects.effectsLib.MDIVistaEffects; import mx.collections.ArrayCollection; import mx.containers.TitleWindow; import mx.controls.Alert; import mx.core.FlexGlobals; import mx.events.CloseEvent; import mx.managers.PopUpManager; - import org.bigbluebutton.common.IBbbModuleWindow; import org.bigbluebutton.common.Images; import org.bigbluebutton.common.LogUtil; @@ -79,15 +74,12 @@ import org.bigbluebutton.util.i18n.ResourceUtil; import org.bigbluebutton.util.logging.Logger; - private var globalDispatcher:Dispatcher; - + private var globalDispatcher:Dispatcher; private var dispState:String; //full-screen? private var images:Images = new Images(); - private var stoppedModules:ArrayCollection; - + private var stoppedModules:ArrayCollection; private var logs:Logger = new Logger(); - private var logWindow:LogWindow; - + private var logWindow:LogWindow; private var logoutWindow:LoggedOutWindow; private var connectionLostWindow:ConnectionLostWindow; @@ -105,16 +97,13 @@ return _mode; } - [Bindable] - private var layoutOptions:LayoutOptions = new LayoutOptions(); + [Bindable] private var layoutOptions:LayoutOptions; - private function initOptions(e:Event):void { - layoutOptions.showLogButton = BBB.initConfigManager().config.layout.showDebugWindow; - layoutOptions.showResetLayout = BBB.initConfigManager().config.layout.showResetLayout; - layoutOptions.showVideoLayout = BBB.initConfigManager().config.layout.showVideoLayout; - layoutOptions.showToolbar = BBB.initConfigManager().config.layout.showToolbar; - layoutOptions.showLogoutWindow = BBB.initConfigManager().config.layout.showLogoutWindow; - layoutOptions.showHelpButton = BBB.initConfigManager().config.layout.showHelpButton; + public function initOptions(e:Event):void { + LogUtil.debug("**** Init layout options ***"); + layoutOptions = new LayoutOptions(); + layoutOptions.parseOptions(); + LogUtil.debug("*** show toolbar = " + layoutOptions.showToolbar); } protected function initializeShell():void { @@ -248,17 +237,20 @@ mdiCanvas.removeAllWindows(); } else { mdiCanvas.removeAllWindows(); - redirect(); + var pageHost:String = FlexGlobals.topLevelApplication.url.split("/")[0]; + var pageURL:String = FlexGlobals.topLevelApplication.url.split("/")[2]; + var request:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut"); + var urlLoader:URLLoader = new URLLoader(); + urlLoader.addEventListener(Event.COMPLETE, handleLogoutComplete); + urlLoader.load(request); } } - private function redirect():void { - var pageHost:String = FlexGlobals.topLevelApplication.url.split("/")[0]; - var pageURL:String = FlexGlobals.topLevelApplication.url.split("/")[2]; - var url:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut"); - LogUtil.debug("Log out url: " + pageURL); - navigateToURL(url, '_self'); - } + private function handleLogoutComplete(e:Event):void { + var request:URLRequest = new URLRequest(BBB.initUserConfigManager().getLogoutUrl()); + LogUtil.debug("Logging out to: " + BBB.initUserConfigManager().getLogoutUrl()); + navigateToURL(request, '_self'); + } private function attemptReconnect(e:ConnectionFailedEvent):void{ /*if (connectionLostWindow != null) return; @@ -297,7 +289,7 @@ ]]> </mx:Script> - <views:MainToolbar id="toolbar" dock="true" width="100%" height="30" visible="true" verticalAlign="middle" layoutOptions="{layoutOptions}"/> + <views:MainToolbar id="toolbar" dock="true" width="100%" height="30" visible="{layoutOptions.showToolbar}" verticalAlign="middle" toolbarOptions="{layoutOptions}"/> <views:MainCanvas id="mdiCanvas" horizontalScrollPolicy="off" verticalScrollPolicy="off" effectsLib="{flexlib.mdi.effects.effectsLib.MDIVistaEffects}" width="100%" height="100%"> <views:LoadingBar id="progressBar" x="{this.width/2 - progressBar.width/2}" y="{this.height/2 - progressBar.height/2}" width="{this.width/2}" /> <views:BrandingLogo x="{this.width - 300}" y="{this.height - 300}" /> diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainCanvas.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainCanvas.mxml index c53f398b5f4bc87a69e3061d417afcd36734c18c..baa2947719445d1ca490a5ec73c53b30f4e4b8f6 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainCanvas.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainCanvas.mxml @@ -31,14 +31,16 @@ import org.bigbluebutton.common.IBbbModuleWindow; import org.bigbluebutton.common.LogUtil; - public static const TOP_LEFT:String = "TOP_LEFT_WINDOW"; - public static const BOTTOM_LEFT:String = "BOTTOM_LEFT_WINDOW"; - public static const MIDDLE:String = "MIDDLE_WINDOW"; - public static const BOTTOM:String = "BOTTOM_WINDOW"; - public static const TOP_RIGHT:String = "TOP_RIGHT_WINDOW"; - public static const BOTTOM_RIGHT:String = "BOTTOM_RIGHT_WINDOW"; - public static const POPUP:String = "POP_UP_WINDOW"; - public static const UNTOUCHED:String = "UNTOUCHED_WINDOW"; + public static const TOP_2_3:String = "top-two-thirds"; + public static const BOTTOM_1_3:String = "bottom-one-third"; + public static const TOP_LEFT:String = "top-left"; + public static const BOTTOM_LEFT:String = "bottom-left"; + public static const MIDDLE:String = "middle"; + public static const BOTTOM:String = "bottom"; + public static const TOP_RIGHT:String = "top-right"; + public static const BOTTOM_RIGHT:String = "bottom-right"; + public static const POPUP:String = "popup"; + public static const ABSOLUTE:String = "absolute"; public static const DESKTOP_SHARING_VIEW:String = "POP_UP_DESKSHARE_VIEW"; public static const DESKTOP_SHARING_PUBLISH:String = "POP_UP_DESKSHARE_PUBLISH"; @@ -98,6 +100,18 @@ var x:Number; var y:Number; switch(position){ + case TOP_2_3: + x = 1; + y = 1; + win.width = this.width; + win.height = ((this.height/3) * 2) - 2; + break; + case BOTTOM_1_3: + x = 1; + y = (this.height/3) * 2 + 2; + win.width = this.width; + win.height = (this.height/3) - 2; + break case TOP_LEFT: x = 1; y = 1; @@ -148,7 +162,7 @@ x = 1; y = 1; break; - case UNTOUCHED: + case ABSOLUTE: // don't reposition the window x = win.x; y = win.y; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml index bd4bc66e6e18621666e3b4597892779416bcf230..df9d0d8cd87972bc213f9e12daa345cbc239b38d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml @@ -36,10 +36,7 @@ <![CDATA[ import org.bigbluebutton.main.model.LayoutOptions; import com.asfusion.mate.events.Dispatcher; - - import mx.controls.Alert; - import mx.core.UIComponent; - + import mx.core.UIComponent; import org.bigbluebutton.common.IBbbToolbarComponent; import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.common.events.CloseWindowEvent; @@ -58,16 +55,16 @@ public static const ALIGN_LEFT:String = "ALIGN_LEFT"; [Bindable] - public var layoutOptions:LayoutOptions = new LayoutOptions(); + public var toolbarOptions:LayoutOptions = new LayoutOptions(); public function loggedIn(name:String, room:String, role:String):void{ - if (layoutOptions.showToolbar) { - this.visible = false; - } else { + if (toolbarOptions.showToolbar) { this.visible = true; + } else { + this.visible = false; } - if (layoutOptions.showHelpButton) { + if (toolbarOptions.showHelpButton) { helpBtn.visible = true; } else { helpBtn.visible = false; @@ -99,7 +96,7 @@ } private function hideToolbar(e:ConnectionFailedEvent):void{ - if (layoutOptions.showToolbar) { + if (toolbarOptions.showToolbar) { this.visible = false; } else { this.visible = true; @@ -125,7 +122,7 @@ private function loginSuccess(e:SuccessfulLoginEvent):void{ loggedIn(e.conferenceParameters.username, e.conferenceParameters.room, e.conferenceParameters.role); - if (layoutOptions.showToolbar) + if (toolbarOptions.showToolbar) visible = true; } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/OldLocaleWarnWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/OldLocaleWarnWindow.mxml index 804ae73d2e3bca0b7af73113a39cf4a47a42f024..48d5b90d7830e3f266bc19f438beab27abf8dc22 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/OldLocaleWarnWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/OldLocaleWarnWindow.mxml @@ -30,7 +30,9 @@ import mx.managers.PopUpManager; import org.bigbluebutton.common.LogUtil; + import org.bigbluebutton.core.BBB; import org.bigbluebutton.util.i18n.ResourceUtil; + private const windowTitleDefault:String = "Warning: Old Language Version"; private const reminder1Default:String = "You have an old language translation of BigBlueButton."; private const reminder2Default:String = "Please clear your browser cache and try again."; @@ -57,12 +59,21 @@ private function redirect():void { var pageHost:String = FlexGlobals.topLevelApplication.url.split("/")[0]; var pageURL:String = FlexGlobals.topLevelApplication.url.split("/")[2]; - var url:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut"); - LogUtil.debug("Log out url: " + pageURL); - navigateToURL(url, '_self'); - PopUpManager.removePopUp(this); + var request:URLRequest = new URLRequest(pageHost + "//" + pageURL + "/bigbluebutton/api/signOut"); + LogUtil.debug("Log out url: " + pageHost + "//" + pageURL + "/bigbluebutton/api/signOut"); + request.method = URLRequestMethod.GET; + var urlLoader:URLLoader = new URLLoader(); + urlLoader.addEventListener(Event.COMPLETE, handleComplete); + urlLoader.load(request); } + private function handleComplete(e:Event):void { + var request:URLRequest = new URLRequest(BBB.initUserConfigManager().getLogoutUrl()); + LogUtil.debug("Logging out to: " + BBB.initUserConfigManager().getLogoutUrl()); + navigateToURL(request, '_self'); + PopUpManager.removePopUp(this); + } + private function onUserLoggedOutWindowClose(e:Event):void { PopUpManager.removePopUp(this); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/business/BreakoutProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/business/BreakoutProxy.as old mode 100644 new mode 100755 index 27a89a43c393f11e9b0d7a919b5f032a57b379e3..fe6558cba52ebbde81f790de89f98bc2f445658b --- a/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/business/BreakoutProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/business/BreakoutProxy.as @@ -34,7 +34,7 @@ package org.bigbluebutton.modules.breakout.business import mx.controls.Alert; import mx.events.CloseEvent; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.model.users.BBBUser; import org.bigbluebutton.main.model.users.Conference; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/views/BreakoutWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/views/BreakoutWindow.mxml index 11eb4f33f27122aac489d09cf986579134aca703..42db1d12f2ff373a48755c9c6a3842c1152b02bd 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/views/BreakoutWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/breakout/views/BreakoutWindow.mxml @@ -32,7 +32,7 @@ import mx.controls.Alert; import mx.events.CloseEvent; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.model.users.Conference; import org.bigbluebutton.modules.breakout.events.CreateRoomEvent; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMapDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMapDelegate.as index 4cbbd8c236956f3661d9f5050fd48dc85ab6dfb4..a06b67b3008a180ba9499cf48d4a7c5b7d8e1629 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMapDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/maps/ChatEventMapDelegate.as @@ -40,7 +40,7 @@ package org.bigbluebutton.modules.chat.maps { private var translationEnabled:Boolean; private var translationOn:Boolean; - private var chatOptions:ChatOptions = new ChatOptions(); + private var chatOptions:ChatOptions; public function ChatEventMapDelegate() { this.dispatcher = dispatcher; @@ -49,10 +49,7 @@ package org.bigbluebutton.modules.chat.maps { } private function getChatOptions():void { - var cxml:XML = BBB.getConfigForModule("ChatModule"); - if (cxml != null) { - chatOptions.privateEnabled = (cxml.@privateEnabled.toString().toUpperCase() == "TRUE") ? true : false; - } + chatOptions = new ChatOptions(); } public function openChatWindow():void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/model/ChatOptions.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/model/ChatOptions.as index 9a098960b5fee09ff25ab71e0d4a1d5769034106..37f632730968382d3e6a78a91e9c3a2ac8c8236d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/model/ChatOptions.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/model/ChatOptions.as @@ -1,5 +1,7 @@ package org.bigbluebutton.modules.chat.model { + import org.bigbluebutton.core.BBB; + public class ChatOptions { [Bindable] @@ -10,5 +12,20 @@ package org.bigbluebutton.modules.chat.model [Bindable] public var privateEnabled:Boolean = true; + + [Bindable] + public var position:String = "top-right"; + + public function ChatOptions() { + var cxml:XML = BBB.getConfigForModule("ChatModule"); + if (cxml != null) { + if (cxml.@privateEnabled != undefined) { + privateEnabled = (cxml.@privateEnabled.toString().toUpperCase() == "TRUE") ? true : false; + } + if (cxml.@position != undefined) { + position = cxml.@position.toString(); + } + } + } } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatSharedObjectService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatSharedObjectService.as index b8ef4fc244e8a5241c09cda277e88c174aee2f72..0808a8a0cb931411d788e2af76838ca921e7e3b3 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatSharedObjectService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PrivateChatSharedObjectService.as @@ -26,11 +26,12 @@ package org.bigbluebutton.modules.chat.services import flash.net.Responder; import flash.net.SharedObject; + import org.bigbluebutton.common.LogUtil; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.ParticipantJoinEvent; import org.bigbluebutton.main.model.User; import org.bigbluebutton.modules.chat.events.PrivateChatMessageEvent; - import org.bigbluebutton.modules.chat.model.MessageVO; - import org.bigbluebutton.common.LogUtil; + import org.bigbluebutton.modules.chat.model.MessageVO; public class PrivateChatSharedObjectService { @@ -65,8 +66,7 @@ package org.bigbluebutton.modules.chat.services function(result:Object):void { trace("Successfully queried participants: " + result.count); if (result.count > 0) { - for(var p:Object in result.participants) - { + for(var p:Object in result.participants) { participantJoined(result.participants[p]); } } @@ -82,18 +82,15 @@ package org.bigbluebutton.modules.chat.services ); } - public function join(userid:String, uri:String):void - { + public function join(userid:String, uri:String):void { this.userid = userid; chatSO = SharedObject.getRemote(userid, uri, false); chatSO.addEventListener(SyncEvent.SYNC, sharedObjectSyncHandler); chatSO.client = this; - chatSO.connect(connection); - + chatSO.connect(connection); } - public function leave():void - { + public function leave():void { if (chatSO != null) { chatSO.close(); } @@ -126,10 +123,14 @@ package org.bigbluebutton.modules.chat.services var participant:User = new User(); participant.userid = joinedUser.userid; participant.name = joinedUser.name; + participant.role = joinedUser.role; + trace("ParticipantJoined " + joinedUser.name + "[" + joinedUser.userid + "]"); if (joinedUser.userid == userid) return; + UserManager.getInstance().participantJoined(participant); + var globalDispatcher:Dispatcher = new Dispatcher(); var joinEvent:ParticipantJoinEvent = new ParticipantJoinEvent(ParticipantJoinEvent.PARTICIPANT_JOINED_EVENT); joinEvent.participant = participant; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatSharedObjectService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatSharedObjectService.as index ccba90820001edbd91ea5efe60ac8964de4670db..12b542edf64d3e9828fbcb74255c733b08b9ce27 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatSharedObjectService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/PublicChatSharedObjectService.as @@ -157,13 +157,11 @@ package org.bigbluebutton.modules.chat.services sendTranscriptLoadedEvent(); } - private function asyncErrorHandler(event:AsyncErrorEvent):void - { + private function asyncErrorHandler(event:AsyncErrorEvent):void { trace("PresentSO asynchronous error."); } - private function sharedObjectSyncHandler(event:SyncEvent) : void - { + private function sharedObjectSyncHandler(event:SyncEvent):void { var connEvent:ConnectionEvent = new ConnectionEvent(ConnectionEvent.CONNECT_EVENT); connEvent.success = true; trace("Dispatching NET CONNECTION SUCCESS"); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml index f4e55b429df064826ed29d929621b18bca813336..8ee557ad7e803e4f01a491fc42e9a2444e1856c5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml @@ -27,13 +27,10 @@ <mx:Script> <![CDATA[ import org.bigbluebutton.modules.chat.model.ChatOptions; - import com.adobe.utils.StringUtil; - + import com.adobe.utils.StringUtil; import mx.collections.ArrayCollection; - import mx.controls.Alert; import mx.events.ListEvent; - import mx.utils.StringUtil; - + import mx.utils.StringUtil; import org.bigbluebutton.modules.chat.events.ChatOptionsEvent; import org.bigbluebutton.util.i18n.ResourceUtil; @@ -41,130 +38,14 @@ [Bindable] public var chatView:ChatView; [Bindable] private var fontSizes:Array = ['8', '10', '12', '14', '16', '18']; - [Bindable] public var chatOptions:ChatOptions = new ChatOptions(); - - [Bindable] private var langNames:Array=[ - 'AFRIKAANS' , - 'ALBANIAN' , - 'ARABIC' , - 'BELARUSIAN' , - 'BULGARIAN' , - 'CATALAN' , - 'CHINESE' , - 'CHINESE_SIMPLIFIED' , - 'CHINESE_TRADITIONAL' , - 'CZECH' , - 'DANISH' , - 'DUTCH', - 'ENGLISH' , - 'ESTONIAN' , - 'FILIPINO' , - 'FINNISH' , - 'FRENCH' , - 'GALICIAN' , - 'GERMAN' , - 'GREEK' , - 'HEBREW' , - 'HINDI' , - 'HUNGARIAN' , - 'ICELANDIC' , - 'INDONESIAN' , - 'IRISH' , - 'ITALIAN' , - 'JAPANESE' , - 'KOREAN' , - 'LATVIAN' , - 'LITHUANIAN' , - 'MACEDONIAN' , - 'MALAY' , - 'MALTESE' , - 'NORWEGIAN' , - 'PERSIAN' , - 'POLISH' , - 'PORTUGUESE' , - 'ROMANIAN' , - 'RUSSIAN' , - 'SERBIAN' , - 'SLOVAK' , - 'SLOVENIAN' , - 'SPANISH' , - 'SWAHILI' , - 'SWEDISH' , - 'THAI' , - 'TURKISH' , - 'UKRAINIAN' , - 'VIETNAMESE' , - 'WELSH' , - 'YIDDISH' ] ; - - private var langCodes:Array=[ - 'af', - 'sq', - 'ar', - 'be', - 'bg', - 'ca', - 'zh', - 'zh-CN', - 'zh-TW', - 'cs', - 'da', - 'nl', - 'en', - 'et', - 'tl', - 'fi', - 'fr', - 'gl', - 'de', - 'el', - 'iw', - 'hi', - 'hu', - 'is', - 'id', - 'ga', - 'it', - 'ja', - 'ko', - 'lv', - 'lt', - 'mk', - 'ms', - 'mt', - 'no', - 'fa', - 'pl', - 'pt', - 'ro', - 'ru', - 'sr', - 'sk', - 'sl', - 'es', - 'sw', - 'sv', - 'th', - 'tr', - 'uk', - 'vi', - 'cy', - 'yi'] ; + [Bindable] public var chatOptions:ChatOptions = new ChatOptions(); + [Bindable] private var langNames:Array = ResourceUtil.getInstance().localeNames; + [Bindable] private var langCodes:Array = ResourceUtil.getInstance().localeCodes; private function init():void{ participants = new ArrayCollection(); - - var langCode:String = (ExternalInterface.call('getLanguage') as String); - if (langCode == null) return; - - var language:String = langCode.split("_")[0]; - if (langCodes.indexOf(language) != -1){ - langComboBox.selectedIndex = langCodes.indexOf(language); - changeLanguage(); - } } - protected function openPrivateChat(event:ListEvent):void{ if (participantsList.selectedIndex == -1) return; var id:String = participantsList.selectedItem.userid; @@ -172,23 +53,18 @@ chatView.openChatBoxFor(id); } - private function changeFontSize():void{ + private function changeFontSize():void { var e:ChatOptionsEvent = new ChatOptionsEvent(ChatOptionsEvent.CHANGE_FONT_SIZE); e.fontSize = int(cmbFontSize.selectedItem); dispatchEvent(e); } - private function changeLanguage():void - { - var lang:String = this.langCodes[this.langComboBox.selectedIndex]; - var e:ChatOptionsEvent = new ChatOptionsEvent(ChatOptionsEvent.CHANGE_LANGUAGE); - e.language= lang; - dispatchEvent(e); + private function changeLanguage():void { + ResourceUtil.getInstance().setPreferredLocale(ResourceUtil.getInstance().getLocaleCodeForIndex(this.langComboBox.selectedIndex)); } - private function toggleTranslation():void - { - var e:ChatOptionsEvent=new ChatOptionsEvent(ChatOptionsEvent.TOGGLE_TRANSLATE); + private function toggleTranslation():void { + var e:ChatOptionsEvent = new ChatOptionsEvent(ChatOptionsEvent.TOGGLE_TRANSLATE); e.translateOn = autoTransCheckBox.selected; dispatchEvent(e); } @@ -204,23 +80,7 @@ autoTransCheckBox.selected = e.translateOn; toggleTranslation(); } - - override protected function resourcesChanged():void{ - super.resourcesChanged(); - - var language:String = overrideNorwegian(ResourceUtil.getInstance().getCurrentLanguageCode().split("_")[0]); - if ((langCodes.indexOf(language) != -1) && (langComboBox != null)){ - langComboBox.selectedIndex = langCodes.indexOf(language); - changeLanguage(); - } - } - - private function overrideNorwegian(lang:String):String{ - var code:String = lang; - if (lang == "nb") code = "no"; //Code for norwegian in the google api is different than in bbb localization (ours is nb, google is no) - return code; - } - + ]]> </mx:Script> @@ -236,7 +96,7 @@ <mx:Label text="{ResourceUtil.getInstance().getString('bbb.chat.fontSize')}" /> <mx:ComboBox width="60" id="cmbFontSize" dataProvider="{fontSizes}" close="changeFontSize()" selectedIndex="1" /> </mx:HBox> - <mx:ComboBox id="langComboBox" dataProvider="{this.langNames}" selectedIndex="12" change="changeLanguage()" rowCount="15" /> + <mx:ComboBox id="langComboBox" dataProvider="{this.langNames}" selectedIndex="{ResourceUtil.getInstance().localeIndex}" change="changeLanguage()" rowCount="15" /> <mx:CheckBox id="autoTransCheckBox" selected="false" label="AutoTranslate" toolTip="Auto detect language and translate" change="toggleTranslation()"/> </mx:VBox> </mx:HBox> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml index 5379a9ef7787f5f87e7efc3af48ddaa63940937b..3f2a6e74e9ad1674d4309c8fdd8aa178bcc11560 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml @@ -32,8 +32,7 @@ import org.bigbluebutton.modules.chat.model.ChatMessage; import mx.collections.ArrayCollection; import mx.controls.Button; - import mx.core.ScrollPolicy; - + import mx.core.ScrollPolicy; import org.bigbluebutton.modules.chat.events.ChatOptionsEvent; import org.bigbluebutton.modules.chat.views.ChatMessageRenderer; @@ -48,10 +47,8 @@ private var lastTime:String = ""; [Bindable] private var messages:ArrayCollection = new ArrayCollection(); - private var lastCount:Number = 0; - - private var scrollTimer:Timer; - + private var lastCount:Number = 0; + private var scrollTimer:Timer; private var scrollBarWorkaround:Boolean = false; private function onCreationComplete():void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatView.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatView.mxml index 10fbc5790b7d5d24f2116e2b37efdf9caef639f1..e8cd0f95ae0698aff26a67c5e8cc42d83ca3f81f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatView.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatView.mxml @@ -32,7 +32,6 @@ <mate:Listener type="{PublicChatMessageEvent.PUBLIC_CHAT_MESSAGE_EVENT}" method="handlePublicChatMessageEvent"/> <mate:Listener type="{BBBEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT}" method="sendMessageReceivedFromBBBEvent"/> <mate:Listener type="{ChatOptionsEvent.CHANGE_FONT_SIZE}" method="changeFontSize" /> - <mate:Listener type="{ChatOptionsEvent.CHANGE_LANGUAGE}" method="changeLanguage" /> <mate:Listener type="{ChatOptionsEvent.TOGGLE_TRANSLATE}" method="toggleTranslation" /> <mx:Style> @@ -58,23 +57,18 @@ <![CDATA[ import org.bigbluebutton.modules.chat.model.ChatOptions; import be.boulevart.google.ajaxapi.translation.GoogleTranslation; - import be.boulevart.google.events.GoogleApiEvent; - - import com.asfusion.mate.events.Dispatcher; - - import flash.external.ExternalInterface; - + import be.boulevart.google.events.GoogleApiEvent; + import com.asfusion.mate.events.Dispatcher; + import flash.external.ExternalInterface; import flexlib.controls.tabBarClasses.SuperTab; - import flexlib.events.SuperTabEvent; - + import flexlib.events.SuperTabEvent; import mx.collections.ArrayCollection; import mx.core.Container; import mx.core.UIComponent; - import mx.events.IndexChangedEvent; - + import mx.events.IndexChangedEvent; import org.bigbluebutton.common.IUserListener; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.ParticipantJoinEvent; import org.bigbluebutton.main.model.User; @@ -93,17 +87,12 @@ '0x0088FF', '0x0000FF', '0x8800FF', '0xFF00FF']; private static const PUBLIC_CHAT_USERID:String = '0'; - private static const PUBLIC_CHAT_USERNAME:String = ResourceUtil.getInstance().getString("bbb.chat.publicChatUsername"); - + private static const PUBLIC_CHAT_USERNAME:String = ResourceUtil.getInstance().getString("bbb.chat.publicChatUsername"); private static const TAB_BOX_ID:String = '+'; - private var tabBox:AddChatTabBox; - - private var focus:Boolean = true; - - private var globalDispatcher:Dispatcher = new Dispatcher(); - + private var tabBox:AddChatTabBox; + private var focus:Boolean = true; + private var globalDispatcher:Dispatcher = new Dispatcher(); private var autoTranslation:Boolean=false; - private var currentLangCode:String="en"; [Bindable] public var chatOptions:ChatOptions; [Bindable] @@ -235,7 +224,7 @@ publicEvent.message = parseURLs(cleanup(message)); publicEvent.color = cmpColorPicker.selectedColor.toString(); publicEvent.time = currentTime(); - publicEvent.language = currentLangCode; + publicEvent.language = ResourceUtil.getInstance().getCurrentLanguageCode().split("_")[0]; globalDispatcher.dispatchEvent(publicEvent); } @@ -250,7 +239,7 @@ privateEvent.toUser = chatTabs.selectedChild.name; privateEvent.color = cmpColorPicker.selectedColor.toString(); privateEvent.time = currentTime(); - privateEvent.language = currentLangCode; + privateEvent.language = ResourceUtil.getInstance().getCurrentLanguageCode().split("_")[0]; globalDispatcher.dispatchEvent(privateEvent); } @@ -338,8 +327,7 @@ chatBox = getChatBoxForParticipant(userid); } else { chatBox = createChatBoxFor(userid); - } - + } } private function createChatBoxFor(userid:String):ChatBox { @@ -397,7 +385,7 @@ } chatBox = getChatBoxForParticipant(sender); - chatBox.showNewMessage(message, translate, currentLangCode); + chatBox.showNewMessage(message, translate, ResourceUtil.getInstance().getCurrentLanguageCode().split("_")[0]); if (! isChatBoxCurrentlySelected(sender)) { notifyParticipantOfUnreadMessageFrom(sender); @@ -435,7 +423,6 @@ public function userLeft(user:User):void{ removeParticipantFromList(user.userid); - //showMessage(PUBLIC_CHAT_USERID, "<b>" + event.participant.name + " has left the conference </b>"); } /** end IUserListener methods */ @@ -443,12 +430,7 @@ { this.autoTranslation = e.translateOn; } - - private function changeLanguage(e:ChatOptionsEvent):void - { - this.currentLangCode= e.language; - } - + ]]> </mx:Script> <containers:SuperTabNavigator id="chatTabs" width="100%" height="100%" change="onTabNavChange()" tabClose="onTabClose(event)" minTabWidth="20" diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatWindow.mxml index f247bca29aaa1d89bcb3dff753f9ae72737ae674..388779ad307eabb5bc75ab409ed370a825c8e47c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatWindow.mxml @@ -26,21 +26,20 @@ showCloseButton="false" implements="org.bigbluebutton.common.IBbbModuleWindow" creationComplete="onCreationComplete()" - xmlns:components="org.bigbluebutton.modules.chat.view.components.*" xmlns:mate="http://mate.asfusion.com/" xmlns:views="org.bigbluebutton.modules.chat.views.*"> + xmlns:components="org.bigbluebutton.modules.chat.view.components.*" + xmlns:mate="http://mate.asfusion.com/" + xmlns:views="org.bigbluebutton.modules.chat.views.*"> <mx:Script> <![CDATA[ import org.bigbluebutton.modules.chat.model.ChatOptions; - import com.asfusion.mate.events.Dispatcher; - - import flexlib.mdi.events.MDIWindowEvent; - + import com.asfusion.mate.events.Dispatcher; + import flexlib.mdi.events.MDIWindowEvent; import mx.controls.Alert; import mx.core.Application; import mx.core.FlexGlobals; import mx.resources.ResourceBundle; - import mx.resources.ResourceManager; - + import mx.resources.ResourceManager; import org.bigbluebutton.common.events.LocaleChangeEvent; import org.bigbluebutton.main.views.MainCanvas; import org.bigbluebutton.modules.chat.events.TranscriptEvent; @@ -53,7 +52,8 @@ [Bindable] public var chatOptions:ChatOptions; public function getPrefferedPosition():String{ - return MainCanvas.TOP_RIGHT; + //return MainCanvas.TOP_RIGHT; + return chatOptions.position; } private function onCreationComplete():void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/ClassyAudioManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/ClassyAudioManager.as index 6b88ab6c957eabea9b898f163792127c1f4ea539..4de54c13ba435567aa4b41bb359482bf53969950 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/ClassyAudioManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/ClassyAudioManager.as @@ -7,7 +7,7 @@ package org.bigbluebutton.modules.classyaudio.managers import flash.utils.Timer; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.common.events.ToolbarButtonEvent; import org.bigbluebutton.main.events.MadePresenterEvent; import org.bigbluebutton.main.model.User; @@ -108,13 +108,10 @@ package org.bigbluebutton.modules.classyaudio.managers } private function muteIfNotPresenter(e:Event = null):void{ - var presenter:User = UserManager.getInstance().getPresenter(); - if (presenter != null){ - if (presenter.userid != attributes.userid){ - streamManager.mute(); - } else if (presenter.userid == attributes.userid){ - streamManager.unmute(); - } + if (UserManager.getInstance().getConference().amIPresenter()){ + streamManager.unmute(); + } else { + streamManager.mute(); } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/StreamManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/StreamManager.as index dad2c356e790a5e4b3507c115369781ca7a078c8..788ad4cdedb9f8a1125eda61be4484deb204102b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/StreamManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/classyaudio/managers/StreamManager.as @@ -35,7 +35,7 @@ package org.bigbluebutton.modules.classyaudio.managers import mx.controls.Alert; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.model.User; import org.bigbluebutton.modules.classyaudio.events.MicMutedEvent; import org.bigbluebutton.modules.classyaudio.events.PlayStreamStatusEvent; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/deskshare/view/components/DesktopViewWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/deskshare/view/components/DesktopViewWindow.mxml index 2a5fd1a7a05f55872f81293ba2804962a253bb84..be191e6021858c72150856fc10bfbc5404914e87 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/deskshare/view/components/DesktopViewWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/deskshare/view/components/DesktopViewWindow.mxml @@ -48,7 +48,7 @@ import org.bigbluebutton.common.IUserListener; import org.bigbluebutton.common.Images; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.common.events.LocaleChangeEvent; import org.bigbluebutton.main.model.User; import org.bigbluebutton.main.views.MainCanvas; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/business/ListenersSOService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/business/ListenersSOService.as index 81f957c216c90629b9f0c5825284b542ec5a140a..44f062a6b7bc1bfb2eda881182cc75ccd8ca65c8 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/business/ListenersSOService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/business/ListenersSOService.as @@ -26,11 +26,12 @@ package org.bigbluebutton.modules.listeners.business import flash.net.Responder; import flash.net.SharedObject; + import org.bigbluebutton.common.LogUtil; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.modules.listeners.business.vo.Listener; import org.bigbluebutton.modules.listeners.business.vo.Listeners; import org.bigbluebutton.modules.listeners.events.ListenersEvent; - import org.bigbluebutton.common.LogUtil; public class ListenersSOService { @@ -106,32 +107,37 @@ package org.bigbluebutton.modules.listeners.business public function addConnectionStatusListener(connectionListener:Function):void { _connectionListener = connectionListener; } - - public function userJoin(userId:Number, cidName:String, cidNum:String, - muted:Boolean, talking:Boolean, locked:Boolean):void - { + + public function userJoin(userId:Number, cidName:String, cidNum:String, muted:Boolean, talking:Boolean, locked:Boolean):void { if (! _listeners.hasListener(userId)) { var n:Listener = new Listener(); - n.callerName = (cidName != null) ? cidName : "<Unknown Caller>"; + n.callerName = cidName != null ? cidName : "<Unknown Caller>"; n.callerNumber = cidNum; n.muted = muted; n.userid = userId; n.talking = talking; n.locked = locked; n.moderator = _module.isModerator(); - - LogUtil.info(LOGNAME + "Adding listener [" + n.callerName + "," + userId + "]"); - _listeners.addListener(n); + /** - * Let's send an event that the first user has joined the voice conference. - * We use this as a trigger to playback the recorded audio. - * NOTE: THis is just a hack...need to do this properly. (ralam - march 26, 2009) + * Let's store the voice userid so we can do push to talk. */ - if (_module.mode == 'PLAYBACK') { - if (_listeners.listeners.length == 1) { - dispatcher.dispatchEvent(new ListenersEvent(ListenersEvent.FIRST_LISTENER_JOINED_EVENT)); - } + var pattern:RegExp = /(\d*)-(.*)$/; + var result:Object = pattern.exec(n.callerName); + if (result != null) { + /** + * The first item is the userid and the second is the username. + */ + if (UserManager.getInstance().getConference().amIThisUser(result[1])) { + UserManager.getInstance().getConference().setMyVoiceUserId(n.userid); + UserManager.getInstance().getConference().muteMyVoice(n.muted); + UserManager.getInstance().getConference().setMyVoiceJoined(true); + } + n.callerName = result[2]; /* Store the username */ } + + LogUtil.info(LOGNAME + "Adding listener [" + n.callerName + "," + userId + "]"); + _listeners.addListener(n); globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.ADDED_LISTENER, n.callerName)); } else { @@ -139,21 +145,30 @@ package org.bigbluebutton.modules.listeners.business } } - public function userMute(userId:Number, mute:Boolean):void - { + public function userMute(userId:Number, mute:Boolean):void { var l:Listener = _listeners.getListener(userId); if (l != null) { l.muted = mute; -// LogUtil.debug(LOGNAME + 'Un/Muting user ' + userId + " mute=" + mute); + /** + * Let's store the voice userid so we can do push to talk. + */ + if (UserManager.getInstance().getConference().amIThisVoiceUser(userId)) { + UserManager.getInstance().getConference().muteMyVoice(l.muted); + } } } - public function userLockedMute(userId:Number, locked:Boolean):void - { + public function userLockedMute(userId:Number, locked:Boolean):void { var l:Listener = _listeners.getListener(userId); if (l != null) { l.locked = locked; LogUtil.debug(LOGNAME + 'Lock Un/Muting user ' + userId + " locked=" + locked); + /** + * Let's store the voice userid so we can do push to talk. + */ + if (UserManager.getInstance().getConference().amIThisVoiceUser(userId)) { + UserManager.getInstance().getConference().voiceLocked = l.locked; + } } } @@ -168,6 +183,14 @@ package org.bigbluebutton.modules.listeners.business public function userLeft(userId:Number):void { _listeners.removeListener(userId); + /** + * Let's store the voice userid so we can do push to talk. + */ + if (UserManager.getInstance().getConference().amIThisVoiceUser(userId)) { + UserManager.getInstance().getConference().setMyVoiceJoined(false); + UserManager.getInstance().getConference().setMyVoiceUserId(0); + UserManager.getInstance().getConference().setMyVoiceJoined(false); + } } public function ping(message:String):void { @@ -181,8 +204,7 @@ package org.bigbluebutton.modules.listeners.business } } - public function lockMuteUser(userid:Number, lock:Boolean):void - { + public function lockMuteUser(userid:Number, lock:Boolean):void { var nc:NetConnection = _module.connection; nc.call( "voice.lockMuteUser",// Remote function name @@ -219,7 +241,7 @@ package org.bigbluebutton.modules.listeners.business LogUtil.error("Error occurred:"); for (var x:Object in status) { LogUtil.error(x + " : " + status[x]); - } + } } ),//new Responder userid, diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenerItem.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenerItem.mxml index 40909fed6dc98956cc407a981a31f16bc613b561..d6d81d4f84d4eec7ec10b0673d32895526d95e44 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenerItem.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenerItem.mxml @@ -26,13 +26,10 @@ <mx:Script> <![CDATA[ - import flash.events.MouseEvent; - - import mx.collections.ArrayCollection; + import flash.events.MouseEvent; import mx.controls.Image; import mx.controls.Label; - import mx.controls.TileList; - + import mx.controls.TileList; import org.bigbluebutton.common.Images; import org.bigbluebutton.modules.listeners.events.ListenersCommand; import org.bigbluebutton.util.i18n.ResourceUtil; @@ -47,7 +44,6 @@ [Bindable] private var ejectIcon:Class = images.delete_icon; [Bindable] private var statusTooltip : String = ""; [Bindable] private var ejectTooltip : String = ResourceUtil.getInstance().getString('bbb.listeners.ejectTooltip'); - [Bindable] private var moderator:Boolean = false; public function onRollOver():void{ @@ -103,17 +99,7 @@ } ]]> </mx:Script> - - <!--<mx:states> - <mx:State name="dispMuteCheckBox"> - <mx:AddChild relativeTo="{talkImg}" position="before"> - <mx:Button id="muteCB" width="20" height="20" visible="true" enabled="{data.moderator}" - toolTip="{ResourceUtil.getInstance().getString('bbb.listenerItem.lockImg.toolTip')}" - icon="{data.locked ? lockedIcon : unlockedIcon}" click="lockMuteUser()"/> - </mx:AddChild> - </mx:State> - </mx:states>--> - + <mx:Button id="muteBtn" width="20" height="20" visible="true" enabled="{data.moderator}" toolTip="{data.moderator ? ResourceUtil.getInstance().getString('bbb.listenerItem.muteUnmute.toolTip') : ''}" icon="{data.muted ? muteIcon : unmuteIcon}" click="muteUser()"/> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenersWindow.mxml index d9c2dec4657b3ab7ede800704f8d47a0ee4218f0..666098ba0b04e8fdefd3dc4785563c7c28eb2d73 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/listeners/views/ListenersWindow.mxml @@ -22,9 +22,10 @@ <MDIWindow xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="flexlib.mdi.containers.*" + xmlns:flc="flexlib.controls.*" implements="org.bigbluebutton.common.IBbbModuleWindow" title="{windowTitle}" - creationComplete="onCreationComplete()" xmlns:mate="http://mate.asfusion.com/"> + creationComplete="onCreationComplete()" xmlns:mate="http://mate.asfusion.com/" xmlns:controls="flexlib.controls.*"> <mate:Listener type="{ListenersEvent.ROOM_MUTE_STATE}" method="roomMuteStateChange" /> <mate:Listener type="{ListenersEvent.REGISTER_LISTENERS}" method="registerListeners" /> @@ -33,8 +34,8 @@ <mx:Script> <![CDATA[ - import org.bigbluebutton.modules.listeners.model.ListenerOptions; import flash.events.MouseEvent; + import flash.sampler.getInvocationCount; import flexlib.mdi.events.MDIWindowEvent; @@ -44,34 +45,44 @@ import mx.controls.Image; import mx.controls.Label; import mx.events.ListEvent; + import mx.messaging.channels.AMFChannel; import org.bigbluebutton.common.Images; import org.bigbluebutton.common.events.LocaleChangeEvent; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.views.MainCanvas; import org.bigbluebutton.modules.listeners.events.ListenersCommand; import org.bigbluebutton.modules.listeners.events.ListenersEvent; + import org.bigbluebutton.modules.listeners.model.ListenerOptions; import org.bigbluebutton.util.i18n.ResourceUtil; - private var images:Images= new Images(); - + private var images:Images= new Images(); private var _xPosition:int; private var _yPosition:int; - + [Bindable] private var muteAllIcon:Class = images.sound_mute; [Bindable] private var unmuteAllIcon:Class = images.sound_none; [Bindable] private var kickIcon:Class = images.eject_user; [Bindable] public var listeners:ArrayCollection = new ArrayCollection(); [Bindable] public var moderator:Boolean; - [Bindable] private var windowTitle:String = ResourceUtil.getInstance().getString('bbb.listeners.title', ["",""]); - + [Bindable] private var windowTitle:String = ResourceUtil.getInstance().getString('bbb.listeners.title', ["",""]); [Bindable] public var listenerOptions:ListenerOptions; + [Bindable] private var showPushToTalkBtn:Boolean = UserManager.getInstance().getConference().voiceLocked && + UserManager.getInstance().getConference().voiceJoined; private function onCreationComplete():void { BindingUtils.bindSetter(updateNumberOfListeners, listeners, "length"); - + BindingUtils.bindSetter(updateShowPushToTalkBtn, UserManager.getInstance().getConference(), "voiceLocked"); + BindingUtils.bindSetter(updateShowPushToTalkBtn, UserManager.getInstance().getConference(), "voiceJoined"); this.visible = listenerOptions.windowVisible; } + private function updateShowPushToTalkBtn(show:Boolean):void { + showPushToTalkBtn = UserManager.getInstance().getConference().voiceJoined && + (UserManager.getInstance().getConference().amIModerator() || + !UserManager.getInstance().getConference().voiceLocked); + } + private function updateNumberOfListeners(numListeners:int):void { if (numListeners > 4) windowTitle = ResourceUtil.getInstance().getString('bbb.listeners.title', [":", numListeners]) ; @@ -123,6 +134,15 @@ setMuteState(muteAllBtn.selected); } + private function toggleMuteMeState():void{ + if (UserManager.getInstance().getConference().voiceLocked && ! UserManager.getInstance().getConference().amIModerator()) return; + + var e:ListenersCommand = new ListenersCommand(ListenersCommand.MUTE_USER); + e.userid = UserManager.getInstance().getConference().getMyVoiceUserId(); + e.mute = !UserManager.getInstance().getConference().isMyVoiceMuted(); + dispatchEvent(e); + } + private function muteAllListeners():void{ var muteCommand:ListenersCommand = new ListenersCommand(ListenersCommand.MUTE_ALL); dispatchEvent(muteCommand); @@ -182,10 +202,18 @@ </mx:List> <mx:ControlBar width="100%"> - <mx:Button id="muteAllBtn" icon="{muteAllIcon}" visible="{moderator}" toggle="true" selected="false" - toolTip="{ResourceUtil.getInstance().getString('bbb.listeners.muteAllBtn.toolTip')}" - click="toggleMuteState()" width="18" height="18"/> - <mx:Spacer width="100%"/> + <flc:CanvasButton id="pushToTalkBtn" visible="{showPushToTalkBtn}" + toolTip="{UserManager.getInstance().getConference().voiceMuted ? ResourceUtil.getInstance().getString('bbb.listeners.pushToTalk.toolTip') : ResourceUtil.getInstance().getString('bbb.listeners.pushToMute.toolTip')}" + click="toggleMuteMeState()" width="60" height="30"> + <mx:HBox verticalAlign="middle" horizontalGap="0" paddingLeft="5" paddingTop="5" paddingRight="5" paddingBottom="5"> + <mx:Image source="{UserManager.getInstance().getConference().voiceMuted ? images.sound_mute : images.sound_none}" /> + <mx:Label text="{UserManager.getInstance().getConference().voiceMuted ? ResourceUtil.getInstance().getString('bbb.listeners.talk') : ResourceUtil.getInstance().getString('bbb.listeners.mute')}" /> + </mx:HBox> + </flc:CanvasButton> + <mx:Spacer width="100%"/> + <mx:Button id="muteAllBtn" icon="{muteAllIcon}" visible="{moderator}" toggle="true" selected="false" + toolTip="{ResourceUtil.getInstance().getString('bbb.listeners.muteAllBtn.toolTip')}" + click="toggleMuteState()" width="18" height="18"/> </mx:ControlBar> </MDIWindow> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/PhoneManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/PhoneManager.as index 6e69509702fde5d84b5e28a5e6812e3ff006d4d0..4f60d69cc2e19d49e19c05369d0849b5bd13aaba 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/PhoneManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/PhoneManager.as @@ -21,6 +21,7 @@ package org.bigbluebutton.modules.phone.managers { import com.asfusion.mate.events.Dispatcher; import org.bigbluebutton.common.LogUtil; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.core.BBB; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.modules.phone.PhoneOptions; @@ -72,7 +73,7 @@ package org.bigbluebutton.modules.phone.managers { public function joinVoice(autoJoin:Boolean):void { setupMic(autoJoin); var uid:String = String(Math.floor(new Date().getTime())); - connectionManager.connect(uid, attributes.externUserID, attributes.username, attributes.room, attributes.uri); + connectionManager.connect(uid, attributes.externUserID, UserManager.getInstance().getConference().getMyUserId() + "-" + attributes.username, attributes.room, attributes.uri); } public function dialConference():void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentSOService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentSOService.as index 306696aaeae9e3cc96ddb805005afe9b5645e986..146d1236a6cc7bdd52ea026e36d70fcd7275c15e 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentSOService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/PresentSOService.as @@ -28,7 +28,7 @@ package org.bigbluebutton.modules.present.business { import mx.controls.Alert; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.MadePresenterEvent; import org.bigbluebutton.main.model.users.Conference; @@ -383,18 +383,16 @@ package org.bigbluebutton.modules.present.business { LogUtil.debug("assignPresenterCallback " + userid + "," + name + "," + assignedBy); var meeting:Conference = UserManager.getInstance().getConference(); if (this.userid == userid) { - meeting.me.presenter = true; - + meeting.setMePresenter(true); var e:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_PRESENTER_MODE); e.userid = userid; e.presenterName = name; e.assignerBy = assignedBy; - dispatcher.dispatchEvent(e); - + dispatcher.dispatchEvent(e); setPresenterName(name); } else { - meeting.me.presenter = false; + meeting.setMePresenter(false); var viewerEvent:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_VIEWER_MODE); viewerEvent.userid = userid; viewerEvent.presenterName = name; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/managers/PresentManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/present/managers/PresentManager.as index 984b5bfb9169acce096272fd1e25da6351381331..c7b99f2243ad9d863f2d70b43387509345e225e4 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/managers/PresentManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/managers/PresentManager.as @@ -24,7 +24,7 @@ package org.bigbluebutton.modules.present.managers import org.bigbluebutton.common.IBbbModuleWindow; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.common.events.OpenWindowEvent; import org.bigbluebutton.main.model.users.BBBUser; import org.bigbluebutton.main.model.users.Conference; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as index a54bfe98bef53dc1fb50bce2b597fb257fbc2a0c..b41056a0f4b2d159da42bea79b399bf65142fb0c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as @@ -31,7 +31,7 @@ package org.bigbluebutton.modules.videoconf.business import mx.collections.ArrayCollection; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.model.users.BBBUser; import org.bigbluebutton.main.model.users.events.StreamStartedEvent; import org.bigbluebutton.modules.videoconf.events.StartBroadcastEvent; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoWindowItf.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoWindowItf.as index 8549329f47a109601f30f0945de3f64b7518fdbc..a1b11650e855cd5119a189717af2ad5d072e45a7 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoWindowItf.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoWindowItf.as @@ -182,7 +182,7 @@ package org.bigbluebutton.modules.videoconf.business return MainCanvas.POPUP; else // the window is docked, so it should not be moved on reset layout - return MainCanvas.UNTOUCHED; + return MainCanvas.ABSOLUTE; } public function onDrag(event:MDIWindowEvent = null):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMap.mxml index 2613fcea3d65ef74c4079ba4c30354285752c843..4aac244f361436ab52572534e1041558390543d9 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMap.mxml @@ -24,10 +24,7 @@ <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; - import mx.controls.Alert; - import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; import org.bigbluebutton.common.events.OpenWindowEvent; import org.bigbluebutton.common.events.ToolbarButtonEvent; import org.bigbluebutton.main.events.BBBEvent; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/maps/VideoDockEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/maps/VideoDockEventMap.mxml index 52fdd61dc85003fa6a68aa4a51bc9db9ece74636..ecece4f61b38f472f013148b04df6e92f6b97f29 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/maps/VideoDockEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/maps/VideoDockEventMap.mxml @@ -29,15 +29,11 @@ $Id: $ import org.bigbluebutton.modules.videodock.views.VideoDock; - public var module:VideodockModule; private var videoDock:VideoDock; public function startModule():void{ - videoDock = new VideoDock(); - videoDock.autoDock = module.autoDock; - videoDock.maximizeWindow = module.maximizeWindow; + videoDock = new VideoDock(); - var windowEvent:OpenWindowEvent = new OpenWindowEvent(OpenWindowEvent.OPEN_WINDOW_EVENT); windowEvent.window = videoDock; globalDispatcher.dispatchEvent(windowEvent); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/DockOptions.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/DockOptions.as new file mode 100755 index 0000000000000000000000000000000000000000..a8ac78aa2ab19bcec3dcbf8f32e6cd250fc35b01 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/DockOptions.as @@ -0,0 +1,55 @@ +package org.bigbluebutton.modules.videodock.views +{ + import org.bigbluebutton.core.BBB; + + public class DockOptions + { + [Bindable] + public var autoDock:Boolean = true; + + [Bindable] + public var maximize:Boolean = false; + + [Bindable] + public var position:String = "bottom-right"; + + [Bindable] + public var width:int = 172; + + [Bindable] + public var height:int = 179; + + [Bindable] + public var layout:String = LAYOUT_SMART; + static public const LAYOUT_NONE:String = "NONE"; + static public const LAYOUT_HANGOUT:String = "HANGOUT"; + static public const LAYOUT_SMART:String = "SMART"; + + public function DockOptions() + { + var vxml:XML = BBB.getConfigForModule("VideodockModule"); + if (vxml != null) { + if (vxml.@autoDock != undefined) { + autoDock = (vxml.@autoDock.toString().toUpperCase() == "TRUE") ? true : false; + } + if (vxml.@maximizeWindow != undefined) { + maximize = (vxml.@maximizeWindow.toString().toUpperCase() == "TRUE") ? true : false; + } + if (vxml.@position != undefined) { + position = vxml.@position.toString(); + } + if (vxml.@width != undefined) { + width = Number(vxml.@width); + } + if (vxml.@height != undefined) { + height = Number(vxml.@height); + } + if (vxml.@layout != undefined) { + layout = vxml.@layout.toString().toUpperCase(); + if (layout != LAYOUT_NONE && layout != LAYOUT_HANGOUT && layout != LAYOUT_SMART) + layout = LAYOUT_NONE; + } + } + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/VideoDock.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/VideoDock.mxml index 50f3d061d0b5b8843b16d57caeef3f6781bf4588..9a8a9cd3bcd77ec60b3b4d564f5b4ede81f759f2 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/VideoDock.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videodock/views/VideoDock.mxml @@ -33,22 +33,18 @@ $Id: $ <mx:Script> <![CDATA[ - import mx.events.ChildExistenceChangedEvent; - + import mx.events.ChildExistenceChangedEvent; import org.bigbluebutton.common.LogUtil; - import org.bigbluebutton.common.UserManager; import org.bigbluebutton.common.events.CloseWindowEvent; import org.bigbluebutton.common.events.DragWindowEvent; import org.bigbluebutton.common.events.OpenWindowEvent; + import org.bigbluebutton.core.BBB; import org.bigbluebutton.main.model.users.Conference; import org.bigbluebutton.main.views.MainCanvas; import org.bigbluebutton.modules.videoconf.business.VideoWindowItf; import org.bigbluebutton.modules.videoconf.events.OpenVideoWindowEvent; import org.bigbluebutton.util.i18n.ResourceUtil; - public var autoDock:Boolean = false; - public var maximizeWindow:Boolean = true - private var childrenDimension:Dictionary = new Dictionary(); private var borderColor:String; private var minChildAspectRatio:Number; @@ -61,12 +57,15 @@ $Id: $ // bigger the weight, bigger will be the window and less space the other windows will have private var priorityWindowWeight:Number = 2/3; + private var options:DockOptions; - private function init():void{ - this.showCloseButton = false; + private function init():void { + options = new DockOptions(); + + this.showCloseButton = false; - this.minWidth = 172; - this.minHeight = 179; + this.minWidth = options.width; + this.minHeight = options.height; this.maxWidth = this.parent.width; this.maxHeight = this.parent.height; @@ -76,7 +75,7 @@ $Id: $ addEventListener(ChildExistenceChangedEvent.CHILD_ADD, onChildAdd); addEventListener(ChildExistenceChangedEvent.CHILD_REMOVE, onChildRemove); - if (maximizeWindow) this.maximize(); + if (options.maximize) this.maximize(); } /** @@ -118,7 +117,8 @@ $Id: $ } public function getPrefferedPosition():String { - return MainCanvas.BOTTOM_RIGHT; + //return MainCanvas.BOTTOM_RIGHT; + return options.position; } private function onDragVideoWindow(e:DragWindowEvent):void{ @@ -174,7 +174,7 @@ $Id: $ } private function onOpenWindow(e:OpenVideoWindowEvent):void { - if (isVideoWindow(e.window) && autoDock) + if (isVideoWindow(e.window) && options.autoDock) addVideoChild(e.window as VideoWindowItf); } @@ -232,11 +232,11 @@ $Id: $ private function updateChildrenDimensions(children:Array):void { if (children.length == 0) return; - var horizontalGap:Number = getStyle("horizontalGap"); - var verticalGap:Number = getStyle("verticalGap"); + const horizontalGap:int = getStyle("horizontalGap"); + const verticalGap:int = getStyle("verticalGap"); - var availableWidth:Number = this.width - this.borderMetrics.left - this.borderMetrics.right; - var availableHeight:Number = this.height - this.borderMetrics.top - this.borderMetrics.bottom; + var availableWidth:int = this.width - this.borderMetrics.left - this.borderMetrics.right; + var availableHeight:int = this.height - this.borderMetrics.top - this.borderMetrics.bottom; var borderTop:int = 0; var borderLeft:int = 0; @@ -247,7 +247,8 @@ $Id: $ // if the aspect ratio of the dock is smaller than the window (like 1:1 against 16:9) // the window will be on top of the dock - if (availableWidth / availableHeight < priorityWindow.width / priorityWindow.height) { + if (availableWidth / availableHeight < priorityWindow.width / priorityWindow.height + || options.layout == DockOptions.LAYOUT_HANGOUT) { priorityWindow.width = availableWidth; priorityWindow.updateHeight(); if (priorityWindow.height > availableHeight * priorityWindowWeight) { @@ -273,23 +274,23 @@ $Id: $ } } - var childWidth:Number = 0; - var childHeight:Number = 0; + var childWidth:int = 0; + var childHeight:int = 0; var nRows:Number = 0; var nColumns:Number = 0; // we would like to maximize the window size for (var rows:Number = 1; rows <= children.length - (prioritizeWindow? 1: 0); ++rows) { var columns:Number = Math.ceil((children.length - (prioritizeWindow? 1: 0))/ rows); - var maxWidth:Number = Math.floor((availableWidth - horizontalGap * (columns - 1)) / columns) - VideoWindowItf.PADDING_HORIZONTAL; - var maxHeight:Number = Math.floor((availableHeight - verticalGap * (rows - 1)) / rows) - VideoWindowItf.PADDING_VERTICAL; + var maxWidth:int = Math.floor((availableWidth - horizontalGap * (columns - 1)) / columns) - VideoWindowItf.PADDING_HORIZONTAL; + var maxHeight:int = Math.floor((availableHeight - verticalGap * (rows - 1)) / rows) - VideoWindowItf.PADDING_VERTICAL; // the possible dimensions shouldn't be less or equal 0 (it could happen with many videos) if (maxWidth <= 0 || maxHeight <=0) continue; - var width:Number = maxWidth; - var height:Number = maxHeight; + var width:int = maxWidth; + var height:int = maxHeight; if (maxWidth / maxHeight > minChildAspectRatio) width = Math.floor(maxHeight * minChildAspectRatio); @@ -352,7 +353,8 @@ $Id: $ } protected function onWindowClick(event:MouseEvent = null):void { - if (mutableChildrenArray.length <= 1) + if (mutableChildrenArray.length <= 1 + || options.layout == DockOptions.LAYOUT_NONE) return; if (event.currentTarget == priorityWindow) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/StatusItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/StatusItemRenderer.mxml index 7470421ab76a07fea16acf20bde8fff9b1342de7..b89a55a7e23a054f68d3a0bd3d51b6581ef5c9af 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/StatusItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/StatusItemRenderer.mxml @@ -39,7 +39,7 @@ import org.bigbluebutton.common.Images; import org.bigbluebutton.common.LogUtil; import org.bigbluebutton.common.Role; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.model.users.Conference; import org.bigbluebutton.main.model.users.events.KickUserEvent; @@ -55,8 +55,7 @@ [Bindable] private var kickButtonEnabled:Boolean = false; private function onCreationComplete():void{ - var conf:Conference = UserManager.getInstance().getConference(); - this.isModerator = (conf.me.role == Role.MODERATOR); + this.isModerator = UserManager.getInstance().getConference().amIModerator(); allowKickUser = ViewersModule.allowKickUser; kickButtonEnabled = this.isModerator && allowKickUser; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/ViewersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/ViewersWindow.mxml index 1d1f9a4f587915aec7dd9aa2f0108a433ecd8933..4e0378e6c89370812b5a8c80bd8b2f8c93de7e96 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/ViewersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/views/ViewersWindow.mxml @@ -47,7 +47,7 @@ import org.bigbluebutton.common.Images; import org.bigbluebutton.common.Role; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.common.events.LocaleChangeEvent; import org.bigbluebutton.main.events.ParticipantJoinEvent; import org.bigbluebutton.main.model.users.BBBUser; @@ -78,7 +78,7 @@ private function onCreationComplete():void { conference = UserManager.getInstance().getConference(); participants = conference.users; - this.isModerator = (conference.me.role == Role.MODERATOR); + this.isModerator = UserManager.getInstance().getConference().amIModerator(); BindingUtils.bindSetter(updateNumberOfViewers, participants, "length"); dispatcher = new Dispatcher(); @@ -131,7 +131,7 @@ private function conferenceStarted(e:ConferenceCreatedEvent):void{ this.participants = e.conference.users; - this.isModerator = (e.conference.me.role == Role.MODERATOR); + this.isModerator = UserManager.getInstance().getConference().amIModerator(); } override protected function resourcesChanged():void{ diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as index eb1895b71339b3173ab93469ce7ebaad91bfa7dc..5251bf2d78448fb70d698249b52fa0dd35f96e16 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as @@ -21,7 +21,7 @@ package org.bigbluebutton.modules.whiteboard.managers import com.asfusion.mate.events.Dispatcher; import flash.events.TimerEvent; import flash.utils.Timer; - import org.bigbluebutton.common.UserManager; + import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.common.events.AddUIComponentToMainCanvas; import org.bigbluebutton.main.model.users.Conference; import org.bigbluebutton.modules.present.api.PresentationAPI; @@ -65,8 +65,7 @@ package org.bigbluebutton.modules.whiteboard.managers } private function addHighlighterToolbar(e:TimerEvent):void{ - var meeting:Conference = UserManager.getInstance().getConference(); - if (meeting.me.presenter) { + if (UserManager.getInstance().getConference().amIPresenter()) { whiteboardButton.setVisible(true); } PresentationAPI.getInstance().addButtonToToolbar(whiteboardButton); diff --git a/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as b/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as index 6395b428100597fd0adcd8fd3ec743996f641b05..c43e240164fc63dc4966af18f6cb69e8252c71c9 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as @@ -19,6 +19,7 @@ package org.bigbluebutton.util.i18n { import com.adobe.utils.StringUtil; + import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IEventDispatcher; @@ -44,13 +45,16 @@ package org.bigbluebutton.util.i18n private var inited:Boolean = false; private static var BBB_RESOURCE_BUNDLE:String = 'bbbResources'; - public static var DEFAULT_LANGUAGE:String = "en_US"; - private static var currentLanguage:String = DEFAULT_LANGUAGE; - private var eventDispatcher:IEventDispatcher; + private static var MASTER_LOCALE:String = "en_US"; - private var localeChain:Array = new Array(); + [Bindable] public var localeCodes:Array = new Array(); + [Bindable] public var localeNames:Array = new Array(); + [Bindable] public var localeIndex:Number; + + private var eventDispatcher:IEventDispatcher; private var resourceManager:IResourceManager; - private var currentLocalization:Dictionary = new Dictionary(); + private var preferredLocale:String + public function ResourceUtil(enforcer:SingletonEnforcer) { if (enforcer == null) { @@ -64,6 +68,7 @@ package org.bigbluebutton.util.i18n } public function initialize():void { + resourceManager = ResourceManager.getInstance(); // Add a random string on the query so that we always get an up-to-date config.xml var date:Date = new Date(); LogUtil.debug("Loading " + LOCALES_FILE); @@ -73,39 +78,67 @@ package org.bigbluebutton.util.i18n } private function handleComplete(e:Event):void{ - parse(new XML(e.target.data)); + parse(new XML(e.target.data)); + + loadMasterLocale(MASTER_LOCALE); + preferredLocale = getDefaultLocale(); + setPreferredLocale(preferredLocale); } - public function parse(xml:XML):void{ + private function parse(xml:XML):void{ var list:XMLList = xml.locale; LogUtil.debug("--- Supported locales --- \n" + xml.toString() + "\n --- \n"); var locale:XML; for each(locale in list){ - localeChain.push(locale.@code); + localeCodes.push(locale.@code); + localeNames.push(locale.@name); } - - resourceManager = ResourceManager.getInstance(); - resourceManager.localeChain = [ExternalInterface.call("getLanguage")]; - var localeAvailable:Boolean = false; - for (var i:Number = 0; i < localeChain.length; i++){ - if (resourceManager.localeChain[0] == localeChain[i]) localeAvailable = true; + } + + private function getDefaultLocale():String { + return ExternalInterface.call("getLanguage"); + } + + private function isPreferredLocaleAvailable(prefLocale:String):Boolean { + for (var i:Number = 0; i < localeCodes.length; i++){ + if (prefLocale == localeCodes[i]) + return true; } - + return false; + } + + private function getIndexForLocale(prefLocale:String):int { + for (var i:Number = 0; i < localeCodes.length; i++){ + if (prefLocale == localeCodes[i]) + return i; + } + return -1; + } + + public function setPreferredLocale(locale:String):void { + LogUtil.debug("Setting up preferred locale " + locale); + if (isPreferredLocaleAvailable(preferredLocale)) { + preferredLocale = locale; + localeIndex = getIndexForLocale(preferredLocale); + LogUtil.debug("Setting up preferred locale index " + localeIndex); + changeLocale(preferredLocale); + } + } + + private function loadMasterLocale(locale:String):void { /** * http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/resources/IResourceManager.html#localeChain * Always load the default language, so if the chosen language * doesn't provide a resource, the default language resource is used */ - load(DEFAULT_LANGUAGE); - - if (!localeAvailable) - resourceManager.localeChain = [DEFAULT_LANGUAGE]; - changeLocale(resourceManager.localeChain[0]); + loadResource(locale); } - - private function load(language:String):IEventDispatcher { - var localeURI:String = 'locale/' + language + '_resources.swf'; + + private function loadResource(language:String):IEventDispatcher { + // Add a random string on the query so that we don't get a cached version. + var date:Date = new Date(); + var localeURI:String = 'locale/' + language + '_resources.swf?a=' + date.time; return resourceManager.loadResourceModule(localeURI, false); } @@ -117,22 +150,23 @@ package org.bigbluebutton.util.i18n return instance; } - public function changeLocale(... chain):void{ - if(chain != null && chain.length > 0) - { - eventDispatcher = load(chain[0]); - localeChain = [chain[0]]; - eventDispatcher.addEventListener(ResourceEvent.COMPLETE, localeChangeComplete); - eventDispatcher.addEventListener(ResourceEvent.ERROR, handleResourceNotLoaded); - - currentLanguage = chain[0]; - } + public function changeLocale(locale:String):void{ + eventDispatcher = loadResource(locale); + eventDispatcher.addEventListener(ResourceEvent.COMPLETE, localeChangeComplete); + eventDispatcher.addEventListener(ResourceEvent.ERROR, handleResourceNotLoaded); } - private function localeChangeComplete(event:ResourceEvent):void{ - if (localeChain[0] != DEFAULT_LANGUAGE) - localeChain.push(DEFAULT_LANGUAGE); - resourceManager.localeChain = localeChain; + private function localeChangeComplete(event:ResourceEvent):void { + // Set the preferred locale and master as backup. + if (preferredLocale != MASTER_LOCALE) { + resourceManager.localeChain = [preferredLocale, MASTER_LOCALE]; + localeIndex = getIndexForLocale(preferredLocale); + } else { + resourceManager.localeChain = [MASTER_LOCALE]; + preferredLocale = MASTER_LOCALE; + localeIndex = getIndexForLocale(preferredLocale); + } + update(); } @@ -141,7 +175,9 @@ package org.bigbluebutton.util.i18n * @param event */ private function handleResourceNotLoaded(event:ResourceEvent):void{ - resourceManager.localeChain = [DEFAULT_LANGUAGE]; + resourceManager.localeChain = [MASTER_LOCALE]; + preferredLocale = MASTER_LOCALE; + localeIndex = getIndexForLocale(preferredLocale); update(); } @@ -155,7 +191,11 @@ package org.bigbluebutton.util.i18n } public function getCurrentLanguageCode():String{ - return currentLanguage; + return preferredLocale; + } + + public function getLocaleCodeForIndex(index:int):String { + return localeCodes[index]; } } } diff --git a/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/Meeting.java b/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/Meeting.java index 3f72882a5ffd8b2cebd42f00009c87cd19082340..ccfd16aab643c5a7333a31458b41f6ec6b42097d 100755 --- a/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/Meeting.java +++ b/bigbluebutton-web/src/java/org/bigbluebutton/api/domain/Meeting.java @@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class Meeting { - private static final int MILLIS_IN_A_SECOND = 60000; + private static final int MILLIS_IN_A_MINUTE = 60000; private String name; private String extMeetingId; @@ -198,10 +198,11 @@ public class Meeting { } private boolean nobodyJoined(int expiry) { - return (System.currentTimeMillis() - createdTime) > (expiry * MILLIS_IN_A_SECOND); + return (System.currentTimeMillis() - createdTime) > (expiry * MILLIS_IN_A_MINUTE); } public boolean hasExpired(int expiry) { + System.out.println("meeting-id=" + intMeetingId + " started=" + hasStarted() + " ended=" + hasEnded() + " notRunning=" + !isRunning() + " expired=" + didExpire(expiry)); return (hasStarted() && hasEnded() && !isRunning() && didExpire(expiry)); } @@ -211,7 +212,7 @@ public class Meeting { private boolean pastDuration() { if (duration == 0) return false; /* Meeting runs infinitely */ - return (System.currentTimeMillis() - startTime > (duration * MILLIS_IN_A_SECOND)); + return (System.currentTimeMillis() - startTime > (duration * MILLIS_IN_A_MINUTE)); } private boolean hasStarted() { @@ -223,7 +224,9 @@ public class Meeting { } private boolean didExpire(int expiry) { - return (System.currentTimeMillis() - endTime > (expiry * MILLIS_IN_A_SECOND)); + long now = System.currentTimeMillis(); + System.out.println("Expiry " + now + " endTime=" + endTime + "expiry=" + (expiry * MILLIS_IN_A_MINUTE)); + return (System.currentTimeMillis() - endTime > (expiry * MILLIS_IN_A_MINUTE)); } /*** diff --git a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/RtmpClientAdapter.java b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/RtmpClientAdapter.java index 501a457b9248906799f77548c6bb68d1a367e1d6..4c7a7f1f06ff0480fcd72fffa898f3d21f50fa0f 100755 --- a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/RtmpClientAdapter.java +++ b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/RtmpClientAdapter.java @@ -42,7 +42,7 @@ public class RtmpClientAdapter implements DeskshareClient, RecordStatusListener @Override public void notify(RecordEvent event) { // TODO Auto-generated method stub - System.out.println("RtmpClientAdapter: TODO Notify client of recording status"); +// System.out.println("RtmpClientAdapter: TODO Notify client of recording status"); ArrayList<Object> msg = new ArrayList<Object>(); if (event instanceof RecordStoppedEvent) { msg.add(new String("DESKSHARE_RECORD_STOPPED_EVENT")); @@ -59,7 +59,7 @@ public class RtmpClientAdapter implements DeskshareClient, RecordStatusListener msg.add(new String("DESKSHARE_RECORD_ERROR_EVENT")); } - so.sendMessage("recordingStatusCallback", msg); +// so.sendMessage("recordingStatusCallback", msg); } } diff --git a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/FileRecorder.java b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/FileRecorder.java index e0a3d06c8a76b97f92791c501d367b7e04008e8d..2b011d0fe7f3816ff05e4786193dfa46a8627d84 100755 --- a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/FileRecorder.java +++ b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/FileRecorder.java @@ -116,6 +116,7 @@ public class FileRecorder implements Recorder { try { log.info("Closing stream"); fo.close(); + svf = null; } catch (IOException e) { log.error(StackTraceUtil.getStackTrace(e)); RecordErrorEvent event = new RecordErrorEvent(session); diff --git a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/session/ScreenVideoFlvEncoder.java b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/session/ScreenVideoFlvEncoder.java index 11ba76d3855789d02561112c090eca95b483345b..c448f1d4ca56047d4e5755db38aa07160717e4ef 100755 --- a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/session/ScreenVideoFlvEncoder.java +++ b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/session/ScreenVideoFlvEncoder.java @@ -31,9 +31,8 @@ public final class ScreenVideoFlvEncoder { private long startTimestamp = 0; private boolean firstTag = true; - private static byte FLV_TAG_HEADER_SIZE = 11; - - ByteArrayOutputStream flvDataStream = new ByteArrayOutputStream(); + private static byte FLV_TAG_HEADER_SIZE = 11; + private ByteArrayOutputStream flvDataStream = new ByteArrayOutputStream(); public byte[] encodeHeader() { byte[] prevTagSize = encodePreviousTagSize(0); @@ -54,7 +53,6 @@ public final class ScreenVideoFlvEncoder { } public byte[] encodeFlvData (byte[] screenVideoData) throws FlvEncodeException { - byte[] flvData; try { flvData = encodeFlvTag(screenVideoData); @@ -65,9 +63,7 @@ public final class ScreenVideoFlvEncoder { } private byte[] encodeFlvTag(byte[] videoData) throws IOException { - - flvDataStream.reset(); - + flvDataStream.reset(); flvDataStream.write(videoTagType); flvDataStream.write(encodeDataSize(videoData.length)); flvDataStream.write(encodeTimestamp()); diff --git a/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/sessions/SessionSVC.scala b/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/sessions/SessionSVC.scala index 8289de0343b9900b23d5fad84a774de5ee607291..7239fab3e436c0e20a4b2a8ed11394b3770cd8cd 100755 --- a/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/sessions/SessionSVC.scala +++ b/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/sessions/SessionSVC.scala @@ -41,7 +41,7 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime blockDim: Dimension, streamManager: StreamManager) extends Actor { private val log = Logger.get - private val blockManager: BlockManager = new BlockManager(room, screenDim, blockDim) + private var blockManager: BlockManager = new BlockManager(room, screenDim, blockDim) private var stream:Stream = null private var lastUpdate:Long = System.currentTimeMillis() private var stop = true @@ -121,6 +121,7 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime stream ! StopStream stop = true streamManager.destroyStream(room) + blockManager = null } private def updateBlock(position: Int, videoData: Array[Byte], keyFrame: Boolean, seqNum: Int): Unit = { @@ -133,8 +134,10 @@ class SessionSVC(sessionManager:SessionManagerSVC, room: String, screenDim: Dime log.warning("Session: Did not received updates for more than 1 minute. Removing session %s", room) sessionManager ! new RemoveSession(room) } else { - stream ! new UpdateStream(room, blockManager.generateFrame(keyframe)) - stream ! new UpdateStreamMouseLocation(room, mouseLoc) + if (blockManager != null) { + stream ! new UpdateStream(room, blockManager.generateFrame(keyframe)) + stream ! new UpdateStreamMouseLocation(room, mouseLoc) + } } } diff --git a/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/svc1/BlockManager.scala b/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/svc1/BlockManager.scala index 5eb6aeb004062bd1dddb1fb3ccb4da217f540038..ff01bfdf8541449856b95565d83c5bc0ca18c555 100755 --- a/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/svc1/BlockManager.scala +++ b/deskshare/app/src/main/scala/org/bigbluebutton/deskshare/server/svc1/BlockManager.scala @@ -29,7 +29,7 @@ import org.bigbluebutton.deskshare.server.session.ScreenVideoFrame class BlockManager(room: String, screenDim: Dimension, blockDim: Dimension) extends BlockFactory { - private val blocksMap = new ConcurrentHashMap[Integer, Block] + private var blocksMap = new ConcurrentHashMap[Integer, Block] private var numberOfRows = getNumberOfRows(screenDim, blockDim) private var numberOfColumns = getNumberOfColumns(screenDim, blockDim) @@ -37,8 +37,6 @@ class BlockManager(room: String, screenDim: Dimension, blockDim: Dimension) exte private var lastKeyFrameTime = 0L private val KEYFRAME_INTERVAL = 20000 - private var screenVideoFrame: ByteArrayOutputStream = new ByteArrayOutputStream() - def initialize(): Unit = { println("Initialize BlockManager") val numberOfBlocks: Int = numberOfRows * numberOfColumns @@ -61,7 +59,8 @@ class BlockManager(room: String, screenDim: Dimension, blockDim: Dimension) exte } def generateFrame(genKeyFrame: Boolean): Array[Byte] = { - screenVideoFrame.reset(); + var screenVideoFrame: ByteArrayOutputStream = new ByteArrayOutputStream() + val encodedDim: Array[Byte] = ScreenVideoEncoder.encodeBlockAndScreenDimensions(blockDim.width, screenDim.width, blockDim.height, screenDim.height) val numberOfBlocks = numberOfRows * numberOfColumns