From 5c8435471524c51d843f293cc7766ae24706a87a Mon Sep 17 00:00:00 2001 From: Richard Alam <ritzalam@gmail.com> Date: Thu, 15 Jun 2017 19:09:32 -0700 Subject: [PATCH] - try to consolidate meeting state in one place --- .../core/running/MeetingActor.scala | 27 +- .../users/ValidateAuthTokenReqMsgHdlr.scala | 38 + bbb-apps-common/publish.sh | 3 + bbb-common-web/deploy.sh | 3 + bigbluebutton-apps/deploy.sh | 11 + bigbluebutton-client/.actionScriptProperties | 26 +- bigbluebutton-client/.project | 2 +- .../src/org/bigbluebutton/common/Role.as | 8 - .../src/org/bigbluebutton/core/BBB.as | 13 +- .../src/org/bigbluebutton/core/UsersUtil.as | 82 +- .../core/controllers/BbbCoreEventDelegate.as | 4 +- .../core/events/GetVoiceUsersEvent.as | 12 + .../core/events/TokenValidEvent.as | 16 + .../core/managers/UserConfigManager.as | 53 -- .../bigbluebutton/core/model/BreakoutRooms.as | 9 + .../org/bigbluebutton/core/model/Layouts.as | 9 + .../bigbluebutton/core/model/LiveMeeting.as | 21 +- .../src/org/bigbluebutton/core/model/Me.as | 49 +- .../org/bigbluebutton/core/model/MeBuilder.as | 2 +- .../bigbluebutton/core/model/MediaStream.as | 10 +- .../org/bigbluebutton/core/model/Meeting.as | 101 +- .../org/bigbluebutton/core/model/Meeting2x.as | 89 ++ .../core/model/MeetingBuilder.as | 6 + .../core/model/MeetingBuilder2x.as | 90 ++ .../bigbluebutton/core/model/MeetingModel.as | 68 -- .../bigbluebutton/core/model/MeetingStatus.as | 31 +- .../org/bigbluebutton/core/model/MyStatus.as | 47 + .../bigbluebutton/core/model/Permission.as | 14 +- .../org/bigbluebutton/core/model/Webcams.as | 6 +- .../core/model/int/MeetingInt.as | 24 + .../bigbluebutton/core/model/int/README.md | 1 + .../bigbluebutton/core/model/users/Guest.as | 10 +- .../core/model/users/GuestPolicy.as | 149 ++- .../bigbluebutton/core/model/users/User2x.as | 22 +- .../bigbluebutton/core/model/users/Users2x.as | 7 +- .../core/model/users/UsersModel.as | 13 +- .../core/model/users/VoiceUser2x.as | 16 +- .../core/model/users/VoiceUsers2x.as | 8 +- .../main/api/ExternalApiCallbacks.as | 11 +- .../main/api/ExternalApiCalls.as | 2 +- .../main/events/ResponseModeratorEvent.as | 4 - .../main/events/SuccessfulLoginEvent.as | 5 +- .../main/maps/ApplicationEventMap.mxml | 2 +- .../main/model/ConferenceParameters.as | 110 --- .../main/model/modules/ModuleDescriptor.as | 36 +- .../main/model/modules/ModuleManager.as | 9 +- .../main/model/modules/ModulesProxy.as | 5 +- .../bigbluebutton/main/model/users/BBBUser.as | 868 +++++++++--------- .../main/model/users/Conference.as | 199 +--- .../main/model/users/EnterApiResponse.as | 31 + .../main/model/users/JoinService.as | 368 ++++---- .../main/model/users/NetConnectionDelegate.as | 65 +- .../main/model/users/UserService.as | 136 +-- .../main/views/AudioSelectionWindow.mxml | 35 +- .../main/views/LoggedOutWindow.mxml | 2 +- .../main/views/MainApplicationShell.mxml | 4 +- .../bigbluebutton/main/views/MainToolbar.mxml | 85 +- .../main/views/MuteMeButton.mxml | 6 +- .../main/views/RecordButton.mxml | 65 +- .../broadcast/managers/BroadcastManager.as | 10 +- .../broadcast/services/MessageSender.as | 3 +- .../modules/caption/views/CaptionWindow.mxml | 43 +- .../modules/caption/views/TextTab.as | 7 +- .../chat/services/ChatMessageService.as | 8 +- .../modules/chat/views/ChatBox.mxml | 2 +- .../modules/layout/model/LayoutDefinition.as | 4 +- .../modules/layout/views/AddButton.mxml | 6 +- .../modules/layout/views/BroadcastButton.mxml | 12 +- .../modules/layout/views/LoadButton.mxml | 5 +- .../modules/layout/views/SaveButton.mxml | 5 +- .../layout/views/ToolbarComponent.mxml | 14 +- .../modules/present/ui/views/SlideView.mxml | 2 +- .../managers/WebRTCDeskshareManager.as | 6 +- .../managers/SharedNotesManager.as | 5 +- .../modules/users/services/MessageReceiver.as | 31 +- .../users/views/BreakoutRoomSettings.mxml | 25 +- .../users/views/MediaItemRenderer.mxml | 4 +- .../modules/users/views/MoodMenu.as | 7 +- .../users/views/RoomActionsRenderer.mxml | 23 +- .../users/views/StatusItemRenderer.mxml | 27 +- .../modules/users/views/UsersWindow.mxml | 27 +- .../videoconf/maps/VideoEventMapDelegate.as | 4 +- .../WhiteboardCanvasDisplayModel.as | 2 +- .../whiteboard/WhiteboardCanvasModel.as | 3 +- .../whiteboard/business/shapes/TextObject.as | 3 +- .../whiteboard/views/AnnotationIDGenerator.as | 4 +- 86 files changed, 1675 insertions(+), 1765 deletions(-) create mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala create mode 100755 bbb-apps-common/publish.sh create mode 100755 bbb-common-web/deploy.sh create mode 100755 bigbluebutton-apps/deploy.sh create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as create mode 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala index 6ed709b8ec..701b5a38e6 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala @@ -65,7 +65,8 @@ class MeetingActor(val props: DefaultProps, with UserJoiningHdlr with UserLeavingHdlr with ChangeUserRoleHdlr - with UserJoinedVoiceConfMessageHdlr { + with UserJoinedVoiceConfMessageHdlr + with ValidateAuthTokenReqMsgHdlr { override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) { case e: Exception => { @@ -244,30 +245,6 @@ class MeetingActor(val props: DefaultProps, } } - def handleValidateAuthTokenReqMsg(msg: ValidateAuthTokenReqMsg): Unit = { - log.debug("****** RECEIVED ValidateAuthTokenReqMsg msg {}", msg) - - val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, props.meetingProp.intId, msg.body.userId) - val envelope = BbbCoreEnvelope(ValidateAuthTokenRespMsg.NAME, routing) - val header = BbbClientMsgHeader(ValidateAuthTokenRespMsg.NAME, props.meetingProp.intId, msg.body.userId) - - RegisteredUsers.getRegisteredUserWithToken(msg.body.authToken, msg.body.userId, liveMeeting.registeredUsers) match { - case Some(u) => - log.info("ValidateToken success. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId) - - val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, true) - val event = ValidateAuthTokenRespMsg(header, body) - val msgEvent = BbbCommonEnvCoreMsg(envelope, event) - outGW.send(msgEvent) - case None => - log.info("ValidateToken failed. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId) - val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, false) - val event = ValidateAuthTokenRespMsg(header, body) - val msgEvent = BbbCommonEnvCoreMsg(envelope, event) - outGW.send(msgEvent) - } - } - def handleDeskShareRTMPBroadcastStoppedRequest(msg: DeskShareRTMPBroadcastStoppedRequest): Unit = { log.info("handleDeskShareRTMPBroadcastStoppedRequest: isBroadcastingRTMP=" + MeetingStatus2x.isBroadcastingRTMP(liveMeeting.status) + " URL:" + diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala new file mode 100755 index 0000000000..84f4018220 --- /dev/null +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala @@ -0,0 +1,38 @@ +package org.bigbluebutton.core2.message.handlers.users + +import org.bigbluebutton.common2.messages.MessageBody.ValidateAuthTokenRespMsgBody +import org.bigbluebutton.common2.messages._ +import org.bigbluebutton.core.OutMessageGateway +import org.bigbluebutton.core.models.RegisteredUsers +import org.bigbluebutton.core.running.MeetingActor + +trait ValidateAuthTokenReqMsgHdlr { + this: MeetingActor => + + val outGW: OutMessageGateway + + def handleValidateAuthTokenReqMsg(msg: ValidateAuthTokenReqMsg): Unit = { + log.debug("****** RECEIVED ValidateAuthTokenReqMsg msg {}", msg) + + val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, props.meetingProp.intId, msg.body.userId) + val envelope = BbbCoreEnvelope(ValidateAuthTokenRespMsg.NAME, routing) + val header = BbbClientMsgHeader(ValidateAuthTokenRespMsg.NAME, props.meetingProp.intId, msg.body.userId) + + RegisteredUsers.getRegisteredUserWithToken(msg.body.authToken, msg.body.userId, liveMeeting.registeredUsers) match { + case Some(u) => + log.info("ValidateToken success. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId) + + val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, true) + val event = ValidateAuthTokenRespMsg(header, body) + val msgEvent = BbbCommonEnvCoreMsg(envelope, event) + outGW.send(msgEvent) + case None => + log.info("ValidateToken failed. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId) + val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, false) + val event = ValidateAuthTokenRespMsg(header, body) + val msgEvent = BbbCommonEnvCoreMsg(envelope, event) + outGW.send(msgEvent) + } + } + +} diff --git a/bbb-apps-common/publish.sh b/bbb-apps-common/publish.sh new file mode 100755 index 0000000000..948f563417 --- /dev/null +++ b/bbb-apps-common/publish.sh @@ -0,0 +1,3 @@ +sbt clean +sbt publish publishLocal + diff --git a/bbb-common-web/deploy.sh b/bbb-common-web/deploy.sh new file mode 100755 index 0000000000..948f563417 --- /dev/null +++ b/bbb-common-web/deploy.sh @@ -0,0 +1,3 @@ +sbt clean +sbt publish publishLocal + diff --git a/bigbluebutton-apps/deploy.sh b/bigbluebutton-apps/deploy.sh new file mode 100755 index 0000000000..fa907cbcce --- /dev/null +++ b/bigbluebutton-apps/deploy.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# deploying 'bigbluebutton-apps' to /usr/share/red5/webapps + +gradle clean +gradle resolveDeps +gradle war deploy + +# Remove slf4j jar as it conflicts with logging with red5 +sudo rm /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/slf4j-api-1.7.23.jar + + diff --git a/bigbluebutton-client/.actionScriptProperties b/bigbluebutton-client/.actionScriptProperties index 2d7056442a..8e940bc6ad 100755 --- a/bigbluebutton-client/.actionScriptProperties +++ b/bigbluebutton-client/.actionScriptProperties @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="f330b47a-ef44-431d-8c83-1768892be326" version="11"> - <compiler additionalCompilerArguments="-locale en_US -show-unused-type-selector-warnings=false" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="11.2.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true"> +<actionScriptProperties analytics="false" mainApplicationPath="Main.mxml" projectUUID="55ddf1c6-532f-4977-9cb3-2a7ab95ad328" version="11"> + <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true"> <compilerSourcePath/> <libraryPath defaultLinkType="0"> <libraryPathEntry kind="4" path=""> @@ -13,26 +13,8 @@ </libraryPath> <sourceAttachmentPath/> </compiler> - <theme themeIsDefault="false" themeIsSDK="true" themeLocation="${SDK_THEMES_DIR}/frameworks/themes/Halo"/> - <applications> - <application path="BigBlueButton.mxml"/> - <application path="DeskshareStandalone.mxml"/> - <application path="ScreenshareStandalone.mxml"/> - </applications> - <modules> - <module application="src/BigBlueButton.mxml" destPath="ChatModule.swf" optimize="true" sourcePath="src/ChatModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="UsersModule.swf" optimize="true" sourcePath="src/UsersModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="DeskShareModule.swf" optimize="true" sourcePath="src/DeskShareModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="PhoneModule.swf" optimize="true" sourcePath="src/PhoneModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="VideoconfModule.swf" optimize="true" sourcePath="src/VideoconfModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="WhiteboardModule.swf" optimize="true" sourcePath="src/WhiteboardModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="PollingModule.swf" optimize="true" sourcePath="src/PollingModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="PresentModule.swf" optimize="true" sourcePath="src/PresentModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="LayoutModule.swf" optimize="true" sourcePath="src/LayoutModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="BroadcastModule.swf" optimize="true" sourcePath="src/BroadcastModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="NotesModule.swf" optimize="true" sourcePath="src/NotesModule.mxml"/> - <module application="src/BigBlueButton.mxml" destPath="BreakoutModule.swf" optimize="true" sourcePath="src/BreakoutModule.mxml"/> - </modules> + <applications/> + <modules/> <workers/> <buildCSSFiles/> <flashCatalyst validateFlashCatalystCompatibility="false"/> diff --git a/bigbluebutton-client/.project b/bigbluebutton-client/.project index 671c3111ec..c0ad8b2869 100755 --- a/bigbluebutton-client/.project +++ b/bigbluebutton-client/.project @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>z-bbb-client</name> + <name>x-bbb-client</name> <comment></comment> <projects> </projects> diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/Role.as b/bigbluebutton-client/src/org/bigbluebutton/common/Role.as index fa3dde7c1c..5f2685d792 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/common/Role.as +++ b/bigbluebutton-client/src/org/bigbluebutton/common/Role.as @@ -50,13 +50,5 @@ package org.bigbluebutton.common } } - /** - * Return the role of the user, with the role being one of the constants defined in this class. - * @return The role of the user - * - */ - public static function getRole():String{ - return Role.userrole; - } } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as b/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as index 2bf4026db5..8b35594cc0 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as @@ -25,8 +25,8 @@ package org.bigbluebutton.core { import org.bigbluebutton.core.managers.ConfigManager2; import org.bigbluebutton.core.managers.ConnectionManager; - import org.bigbluebutton.core.managers.UserConfigManager; import org.bigbluebutton.core.managers.VideoProfileManager; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.core.model.VideoProfile; import org.bigbluebutton.util.SessionTokenUtil; @@ -35,8 +35,6 @@ package org.bigbluebutton.core { private static var connectionManager:ConnectionManager = null; - private static var userConfigManager:UserConfigManager = null; - private static var videoProfileManager:VideoProfileManager = null; private static var sessionTokenUtil:SessionTokenUtil = null; @@ -48,13 +46,6 @@ package org.bigbluebutton.core { return sessionTokenUtil; } - public static function initUserConfigManager():UserConfigManager { - if (userConfigManager == null) { - userConfigManager = new UserConfigManager(); - } - return userConfigManager; - } - public static function getConfigManager():ConfigManager2 { if (configManager == null) { configManager = new ConfigManager2(); @@ -120,7 +111,7 @@ package org.bigbluebutton.core { } public static function getLogoutURL():String { - var logoutUrl:String = BBB.initUserConfigManager().getLogoutUrl(); + var logoutUrl:String = LiveMeeting.inst().me.logoutURL; if (logoutUrl == null) { logoutUrl = getBaseURL(); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as index 774748d14d..90ee7b6049 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as @@ -22,7 +22,9 @@ package org.bigbluebutton.core import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.common.Role; import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.core.vo.CameraSettingsVO; import org.bigbluebutton.main.model.users.BBBUser; import org.bigbluebutton.util.SessionTokenUtil; @@ -60,15 +62,15 @@ package org.bigbluebutton.core } public static function setUserEjected():void { - UserManager.getInstance().getConference().setUserEjectedFromMeeting(); + LiveMeeting.inst().myStatus.userEjectedFromMeeting = true; } public static function isUserEjected():Boolean { - return UserManager.getInstance().getConference().getUserEjectedFromMeeting(); + return LiveMeeting.inst().myStatus.userEjectedFromMeeting; } public static function isRecorded():Boolean { - return UserManager.getInstance().getConference().record; + return LiveMeeting.inst().meeting.recorded; } public static function amIPublishing():ArrayCollection { @@ -106,11 +108,11 @@ package org.bigbluebutton.core } public static function getInternalMeetingID():String { - return UserManager.getInstance().getConference().internalMeetingID; + return LiveMeeting.inst().meeting.internalId; } public static function getAvatarURL():String { - return UserManager.getInstance().getConference().avatarURL; + return LiveMeeting.inst().me.avatarURL; } public static function getUserAvatarURL(userID:String):String { @@ -118,31 +120,57 @@ package org.bigbluebutton.core } public static function getVoiceBridge():String { - return UserManager.getInstance().getConference().voiceBridge; + return LiveMeeting.inst().meeting.voiceConf; } public static function getDialNumber():String { - return UserManager.getInstance().getConference().dialNumber; + return LiveMeeting.inst().meeting.dialNumber; } public static function getCustomData():Object { - return UserManager.getInstance().getConference().getMyCustomData(); + return LiveMeeting.inst().me.customData; } - + + public static function getMeetingName():String { + return LiveMeeting.inst().meeting.name; + } + public static function getExternalMeetingID():String { - return UserManager.getInstance().getConference().externalMeetingID; + return LiveMeeting.inst().meeting.externalId; } public static function amIModerator():Boolean { - return UserManager.getInstance().getConference().amIModerator(); + return LiveMeeting.inst().me.role == Role.MODERATOR; } public static function amIPresenter():Boolean { - return UserManager.getInstance().getConference().amIPresenter; + return LiveMeeting.inst().myStatus.isPresenter; + } + + public static function isBreakout():Boolean { + return LiveMeeting.inst().meeting.isBreakout; + } + + public static function isMyVoiceMuted():Boolean { + return LiveMeeting.inst().myStatus.voiceMuted; + } + + public static function iAskedToLogout():Boolean { + return LiveMeeting.inst().myStatus.iAskedToLogout; + } + + public static function setIAskedToLogout(value:Boolean): void { + LiveMeeting.inst().myStatus.iAskedToLogout = value; + } + + + public static function setMeAsPresenter(value: Boolean): void { + LiveMeeting.inst().myStatus.isPresenter = value; + applyLockSettings(); } public static function amIWaitingForAcceptance():Boolean { - return UserManager.getInstance().getConference().amIWaitingForAcceptance(); + return LiveMeeting.inst().myStatus.waitingForAcceptance; } public static function hasUser(userID:String):Boolean { @@ -154,27 +182,35 @@ package org.bigbluebutton.core } public static function getMyself():BBBUser { - return UserManager.getInstance().getConference().getMyself(); + return UserManager.getInstance().getConference().getMyUser(); } public static function isMe(userID:String):Boolean { - return UserManager.getInstance().getConference().amIThisUser(userID); + return LiveMeeting.inst().me.id == userID; } public static function getMyExternalUserID():String { - return UserManager.getInstance().getConference().getMyExternalUserID(); + return LiveMeeting.inst().me.externalId; } public static function getMyUserID():String { - return UserManager.getInstance().getConference().getMyUserId(); + return LiveMeeting.inst().me.id; } public static function getMyRole():String { - return UserManager.getInstance().getConference().getMyRole(); + return LiveMeeting.inst().me.role; } public static function getMyUsername():String { - return UserManager.getInstance().getConference().getMyName(); + return LiveMeeting.inst().me.name; + } + + public static function myEmoji():String { + return LiveMeeting.inst().myStatus.myEmojiStatus; + } + + public static function setMyEmoji(value: String):void { + LiveMeeting.inst().myStatus.myEmojiStatus = value; } public static function internalUserIDToExternalUserID(userID:String):String { @@ -213,7 +249,7 @@ package org.bigbluebutton.core var userData:Object = new Object(); userData.meetingId = getInternalMeetingID(); userData.externalMeetingId = getExternalMeetingID(); - userData.meetingName = UserManager.getInstance().getConference().meetingName; + userData.meetingName = LiveMeeting.inst().meeting.name; userData.userId = getMyUserID(); userData.username = getMyUsername(); @@ -245,5 +281,11 @@ package org.bigbluebutton.core return sessionUtil.getSessionToken(); } + public static function applyLockSettings():void { + var myUser:BBBUser = getMyself(); + if (myUser != null) + myUser.applyLockSettings(); + } + } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as index 164afde20d..4805aba400 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as @@ -21,8 +21,8 @@ package org.bigbluebutton.core.controllers import flash.events.IEventDispatcher; import org.bigbluebutton.core.EventConstants; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.events.CoreEvent; - import org.bigbluebutton.core.managers.UserManager; public class BbbCoreEventDelegate { @@ -30,7 +30,7 @@ package org.bigbluebutton.core.controllers public function handleGetMyRoleReq():void { var event:CoreEvent = new CoreEvent(EventConstants.GET_MY_ROLE_RESP); - event.message.role = UserManager.getInstance().getConference().whatsMyRole(); + event.message.role = UsersUtil.getMyRole(); dispatcher.dispatchEvent(event); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as b/bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as new file mode 100755 index 0000000000..f79f923f87 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as @@ -0,0 +1,12 @@ +package org.bigbluebutton.core.events +{ + import flash.events.Event; + + public class GetVoiceUsersEvent extends Event + { + public function GetVoiceUsersEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) + { + super(type, bubbles, cancelable); + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as b/bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as new file mode 100755 index 0000000000..e783229e8c --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as @@ -0,0 +1,16 @@ +package org.bigbluebutton.core.events +{ + import flash.events.Event; + + public class TokenValidEvent extends Event + { + public static const TOKEN_VALID_EVENT:String = "auth token valid event"; + + public function TokenValidEvent() + { + super(TOKEN_VALID_EVENT, true, false); + } + + } + +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as b/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as deleted file mode 100755 index d4099cf7c7..0000000000 --- a/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as +++ /dev/null @@ -1,53 +0,0 @@ -/** - * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ - * - * Copyright (c) 2012 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 3.0 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 org.bigbluebutton.main.model.ConferenceParameters; - - public class UserConfigManager { - private var conferenceParameters:ConferenceParameters = null; - - public function setConferenceParameters(c:ConferenceParameters):void { - conferenceParameters = c; - } - - public function getConfParams():ConferenceParameters { - return conferenceParameters; - } - - public function getLogoutUrl():String { - if (conferenceParameters == null) - return null; - return conferenceParameters.logoutUrl; - } - - public function getWelcomeMessage():String { - if (conferenceParameters == null) - return null; - return conferenceParameters.welcome; - } - - public function getMeetingTitle():String { - if (conferenceParameters) - return conferenceParameters.meetingName; - else - return null; - } - } -} diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as new file mode 100755 index 0000000000..2a5c4b49cd --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as @@ -0,0 +1,9 @@ +package org.bigbluebutton.core.model +{ + public class BreakoutRooms + { + public function BreakoutRooms() + { + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as new file mode 100755 index 0000000000..a463e0107f --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as @@ -0,0 +1,9 @@ +package org.bigbluebutton.core.model +{ + public class Layouts + { + public function Layouts() + { + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as index 8689bc49db..d2b7a693f1 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as @@ -1,15 +1,22 @@ package org.bigbluebutton.core.model { - + import org.bigbluebutton.core.model.users.GuestPolicy; + import org.bigbluebutton.core.model.users.Users2x; + import org.bigbluebutton.core.model.users.VoiceUsers2x; + public class LiveMeeting { private static var instance: LiveMeeting = null; - var webcams: Webcams = new Webcams(); - var voiceUsers: VoiceUsers2x = new VoiceUsers2x(); - var users: Users2x = new Users2x(); - var guestsWaitingForApproval: GuestsWatingForApproval = new GuestsWatingForApproval(); - var meetingStatus: MeetingStatus = new MeetingStatus(); + public var me: Me = new Me(); + public var myStatus: MyStatus = new MyStatus(); + public var webcams: Webcams = new Webcams(); + public var voiceUsers: VoiceUsers2x = new VoiceUsers2x(); + public var users: Users2x = new Users2x(); + public var guestsWaitingForApproval: GuestPolicy = new GuestPolicy(); + public var meetingStatus: MeetingStatus = new MeetingStatus(); + public var meeting: Meeting = new Meeting(); + public var config: Config; public function LiveMeeting(enforcer: LiveMeetingSingletonEnforcer) { @@ -18,7 +25,7 @@ package org.bigbluebutton.core.model } } - public static function getInstance():LiveMeeting{ + public static function inst():LiveMeeting{ if (instance == null){ instance = new LiveMeeting(new LiveMeetingSingletonEnforcer()); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as old mode 100644 new mode 100755 index 0d40c46815..1c3b8e325e --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as @@ -2,45 +2,30 @@ package org.bigbluebutton.core.model { public class Me { - private var _id: String; - private var _name: String; - private var _externalId: String; - private var _token: String; - private var _layout: String; - private var _avatarURL: String; - private var _logoutURL: String; + public var id:String = ""; + public var name:String = ""; + public var externalId:String = ""; + public var authToken:String = ""; + public var layout:String = ""; + public var logoutURL:String = ""; - public function Me(builder: MeBuilder) { - _id = builder.id; - _name = builder.name; - _externalId = builder.externalId; - _token = builder.token; - _layout = builder.layout; - _logoutURL = builder.logoutURL; - } - - public function get id():String { - return _id; - } + public var welcome:String = ""; + public var avatarURL:String = ""; + public var dialNumber:String = ""; - public function get name():String { - return _name; - } + public var guest:Boolean = true; + public var authed:Boolean = false; + public var customData:Object = new Object(); - public function get externalId():String { - return _externalId; - } + private var _role:String = "viewer"; - public function get layout():String { - return _layout; - } - public function get avatarURL():String { - return _avatarURL; + public function get role():String { + return _role.toUpperCase(); } - public function get logoutURL():String { - return _logoutURL; + public function set role(value: String):void { + _role = role; } } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as index 620d53644a..a70532b632 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as @@ -13,7 +13,7 @@ package org.bigbluebutton.core.model internal var dialNumber:String; internal var role:String; internal var guest:Boolean; - internal var authed:Boolean; + internal var authed:Boolean; internal var customData:Object; public function MeBuilder(id: String, name: String) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as index 02359647ae..ba3bc7ac75 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as @@ -1,11 +1,13 @@ package org.bigbluebutton.core.model { + import mx.collections.ArrayCollection; + public class MediaStream { - var streamId: String; - var intId: String; - var attributes: ArrayCollection = new ArrayCollection(); - var viewers:ArrayCollection = new ArrayCollection(); + public var streamId: String; + public var intId: String; + public var attributes: ArrayCollection = new ArrayCollection(); + public var viewers:ArrayCollection = new ArrayCollection(); public function MediaStream() { diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as old mode 100644 new mode 100755 index 14aaabcea3..bcb722efa2 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as @@ -2,90 +2,21 @@ package org.bigbluebutton.core.model { public class Meeting { - private var _name:String; - private var _internalId:String; - private var _externalId:String; - private var _isBreakout:Boolean; - private var _defaultAvatarUrl:String; - private var _voiceConference:String; - private var _dialNumber:String; - private var _recorded:Boolean; - private var _defaultLayout:String; - private var _welcomeMessage:String; - private var _modOnlyMessage:String; - private var _allowStartStopRecording:Boolean; - private var _webcamsOnlyForModerator:Boolean; - private var _metadata:Object = null; - - public var isRecording: Boolean = false; - - public function Meeting(build: MeetingBuilder) - { - _name = build.name; - _internalId = build.id; - _externalId = build.externId; - _isBreakout = build.isBreakout; - _defaultAvatarUrl = build.defaultAvatarUrl; - _voiceConference = build.voiceConf; - _dialNumber = build.dialNumber; - _recorded = build.recorded; - _defaultLayout = build.defaultLayout; - _welcomeMessage = build.welcomeMessage; - _modOnlyMessage = build.modOnlyMessage; - _allowStartStopRecording = build.allowStartStopRecording; - _webcamsOnlyForModerator = build.webcamsOnlyForModerator; - _metadata = build.metadata; - } - - public function get name():String { - return _name; - } - - public function get internalId():String { - return _internalId; - } - - public function get externalId():String { - return _externalId; - } - - public function get defaultAvatarUrl():String { - return _defaultAvatarUrl; - } - - public function get defaultLayout():String { - return _defaultLayout; - } - - public function get voiceConference():String { - return _voiceConference; - } - - public function get dialNumber():String { - return _dialNumber; - } - - public function get recorded():Boolean { - return _recorded; - } - - public function get allowStartStopRecording():Boolean { - return _allowStartStopRecording; - } - - public function get webcamsOnlyForModerator() : Boolean { - return _webcamsOnlyForModerator; - } - - public function get metadata():Object { - return _metadata; - } - - public function isMetadata(key: String):Boolean { - if (_metadata != null) { - return _metadata.hasOwnProperty(key); - } - return false; - } + public var name:String = ""; + public var internalId:String = ""; + public var externalId:String = "" ; + public var isBreakout:Boolean = false; + public var defaultAvatarUrl:String = ""; + public var voiceConf:String = ""; + public var dialNumber:String = ""; + public var recorded:Boolean = false; + public var defaultLayout:String = ""; + public var welcomeMessage:String = ""; + public var modOnlyMessage:String = ""; + public var allowStartStopRecording:Boolean = true; + public var webcamsOnlyForModerator:Boolean = false; + public var metadata:Object = null; + public var muteOnStart:Boolean = false; + } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as new file mode 100755 index 0000000000..0a2563a4f2 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as @@ -0,0 +1,89 @@ +package org.bigbluebutton.core.model +{ + public class Meeting2x + { + private var _name:String; + private var _internalId:String; + private var _externalId:String; + private var _isBreakout:Boolean; + private var _defaultAvatarUrl:String; + private var _voiceConference:String; + private var _dialNumber:String; + private var _recorded:Boolean; + private var _defaultLayout:String; + private var _welcomeMessage:String; + private var _modOnlyMessage:String; + private var _allowStartStopRecording:Boolean; + private var _webcamsOnlyForModerator:Boolean; + private var _metadata:Object = null; + + public function Meeting2x(build: MeetingBuilder2x) + { + _name = build.name; + _internalId = build.id; + _externalId = build.externId; + _isBreakout = build.isBreakout; + _defaultAvatarUrl = build.defaultAvatarUrl; + _voiceConference = build.voiceConf; + _dialNumber = build.dialNumber; + _recorded = build.recorded; + _defaultLayout = build.defaultLayout; + _welcomeMessage = build.welcomeMessage; + _modOnlyMessage = build.modOnlyMessage; + _allowStartStopRecording = build.allowStartStopRecording; + _webcamsOnlyForModerator = build.webcamsOnlyForModerator; + _metadata = build.metadata; + } + + public function get name():String { + return _name; + } + + public function get internalId():String { + return _internalId; + } + + public function get externalId():String { + return _externalId; + } + + public function get defaultAvatarUrl():String { + return _defaultAvatarUrl; + } + + public function get defaultLayout():String { + return _defaultLayout; + } + + public function get voiceConference():String { + return _voiceConference; + } + + public function get dialNumber():String { + return _dialNumber; + } + + public function get recorded():Boolean { + return _recorded; + } + + public function get allowStartStopRecording():Boolean { + return _allowStartStopRecording; + } + + public function get webcamsOnlyForModerator() : Boolean { + return _webcamsOnlyForModerator; + } + + public function get metadata():Object { + return _metadata; + } + + public function isMetadata(key: String):Boolean { + if (_metadata != null) { + return _metadata.hasOwnProperty(key); + } + return false; + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as old mode 100644 new mode 100755 index 56773f7eb3..77badd9bfa --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as @@ -16,6 +16,7 @@ package org.bigbluebutton.core.model internal var allowStartStopRecording: Boolean; internal var webcamsOnlyForModerator: Boolean; internal var metadata: Object; + internal var muteOnStart:Boolean; public function MeetingBuilder(id: String, name: String) { this.id = id; @@ -81,6 +82,11 @@ package org.bigbluebutton.core.model metadata = value; return this; } + + public function withMuteOnStart(value: Boolean):MeetingBuilder { + muteOnStart = value; + return this; + } public function build():Meeting { return new Meeting(this); diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as new file mode 100755 index 0000000000..e2a1b44b97 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as @@ -0,0 +1,90 @@ +package org.bigbluebutton.core.model +{ + public class MeetingBuilder2x + { + internal var id:String; + internal var name:String; + internal var voiceConf:String; + internal var externId:String; + internal var isBreakout:Boolean; + internal var defaultAvatarUrl:String; + internal var dialNumber:String; + internal var recorded:Boolean; + internal var defaultLayout:String; + internal var welcomeMessage:String; + internal var modOnlyMessage:String; + internal var allowStartStopRecording: Boolean; + internal var webcamsOnlyForModerator: Boolean; + internal var metadata: Object; + + public function MeetingBuilder2x(id: String, name: String) + { + this.id = id; + this.name = name; + } + + public function withVoiceConf(value: String):MeetingBuilder2x { + voiceConf = value; + return this; + } + + public function withExternalId(value: String):MeetingBuilder2x { + externId = value; + return this; + } + + public function withBreakout(value : Boolean):MeetingBuilder2x { + isBreakout = value; + return this; + } + + public function withDefaultAvatarUrl(value: String):MeetingBuilder2x { + defaultAvatarUrl = value; + return this; + } + + public function withDialNumber(value: String):MeetingBuilder2x { + dialNumber = value; + return this; + } + + public function withRecorded(value: Boolean):MeetingBuilder2x { + recorded = value; + return this; + } + + public function withAllowStartStopRecording(value: Boolean):MeetingBuilder2x { + allowStartStopRecording = value; + return this; + } + + public function withWebcamsOnlyForModerator(value: Boolean):MeetingBuilder2x { + webcamsOnlyForModerator = value; + return this; + } + + public function withDefaultLayout(value: String):MeetingBuilder2x { + defaultLayout = value; + return this; + } + + public function withWelcomeMessage(value: String):MeetingBuilder2x { + welcomeMessage = value; + return this; + } + + public function withModOnlyMessage(value: String):MeetingBuilder2x { + modOnlyMessage = value; + return this; + } + + public function withMetadata(value: Object):MeetingBuilder2x { + metadata = value; + return this; + } + + public function build():Meeting2x { + return new Meeting2x(this); + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as deleted file mode 100755 index 39b2425245..0000000000 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as +++ /dev/null @@ -1,68 +0,0 @@ -package org.bigbluebutton.core.model -{ - import org.bigbluebutton.core.vo.LockSettingsVO; - - public class MeetingModel - { - private static var instance:MeetingModel = null; - - private var _meeting: Meeting; - - private var _meetingMuted:Boolean = false; - private var _lockSettings:LockSettingsVO; - private var _modOnlyMessage:String = null; - private var _stunAndTurnServers: Object = new Object(); - - public function MeetingModel(enforcer: MeetingModelSingletonEnforcer) - { - if (enforcer == null){ - throw new Error("There can only be 1 MeetingModel instance"); - } - } - - public static function getInstance():MeetingModel{ - if (instance == null){ - instance = new MeetingModel(new MeetingModelSingletonEnforcer()); - } - return instance; - } - - public function set meeting(value: Meeting):void { - _meeting = value; - } - - public function set stunAndTurnServers(value: Object):void { - _stunAndTurnServers = value; - } - - public function get stunAndTurnServers():Object { - return _stunAndTurnServers; - } - - public function get meeting():Meeting { - return _meeting; - } - - public function set recording(record: Boolean):void { - _meeting.isRecording = record; - } - - public function set meetingMuted(muted:Boolean):void { - _meetingMuted = muted; - } - - public function get meetingMuted():Boolean { - return _meetingMuted; - } - - public function set modOnlyMessage(msg:String):void { - _modOnlyMessage = msg; - } - - public function get modOnlyMessage():String { - return _modOnlyMessage; - } - } -} - -class MeetingModelSingletonEnforcer{} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as index bf47cf2525..a5976a037d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as @@ -1,23 +1,14 @@ package org.bigbluebutton.core.model { - public class MeetingStatus - { - var recordingVoice: Boolean = false; - - var audioSettingsInited: Boolean = false; - var permissionsInited: Boolean = false; - var permissions = new Permissions(); - var recording: Boolean = false; - var broadcastingRTMP: Boolean = false; - var muted: Boolean = false; - var meetingEnded: Boolean = false; - var meetingMuted: Boolean = false; - var guestPolicy: String = "ASK_MODERATOR"; - var guestPolicySetBy: String = null; - - - public function MeetingStatus() - { - } - } + import org.bigbluebutton.core.vo.LockSettingsVO; + + public class MeetingStatus + { + public var permissions: Permission = new Permission(); + public var isRecording: Boolean = false; + public var isMeetingMuted: Boolean = false; + public var guestPolicy: String = "ASK_MODERATOR"; + public var guestPolicySetBy: String = null; + public var lockSettings:LockSettingsVO; + } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as new file mode 100755 index 0000000000..5da9713080 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as @@ -0,0 +1,47 @@ +/** + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2012 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 3.0 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.model +{ + + public class MyStatus { + + // Flag to tell that user is in the process of leaving the meeting. + public var isLeavingFlag:Boolean = false; + + public var disableMyCam:Boolean = false; + public var disableMyMic:Boolean = false; + public var disableMyPrivateChat:Boolean = false; + public var disableMyPublicChat:Boolean = false; + public var lockedLayout:Boolean = false; + + public var iAskedToLogout:Boolean; + public var userEjectedFromMeeting:Boolean = false; + public var waitingForAcceptance: Boolean; + + public var userLocked: Boolean = false; + public var voiceJoined: Boolean = false; + public var voiceMuted: Boolean = false; + + public var isPresenter: Boolean = false; + public var myEmojiStatus: String = "none"; + + } +} + + diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as index a8d8e4f1fa..a21fcbf0c0 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as @@ -2,13 +2,13 @@ package org.bigbluebutton.core.model { public class Permission { - var disableCam: Boolean = false; - var disableMic: Boolean = false; - var disablePrivChat: Boolean = false; - var disablePubChat: Boolean = false; - var lockedLayout: Boolean = false; - var lockOnJoin: Boolean = false; - var lockOnJoinConfigurable: Boolean = false; + public var disableCam: Boolean = false; + public var disableMic: Boolean = false; + public var disablePrivChat: Boolean = false; + public var disablePubChat: Boolean = false; + public var lockedLayout: Boolean = false; + public var lockOnJoin: Boolean = false; + public var lockOnJoinConfigurable: Boolean = false; public function Permission() { diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as index 70df6024ab..962995a083 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as @@ -1,8 +1,10 @@ package org.bigbluebutton.core.model { + import mx.collections.ArrayCollection; + public class Webcams { - private var _webcams:ArrayCollection = new ArrayCollection(); + private var _webcams: ArrayCollection = new ArrayCollection(); public function add(stream: MediaStream):void { _webcams.addItem(stream); @@ -22,7 +24,7 @@ package org.bigbluebutton.core.model for (var i:int = 0; i < _webcams.length; i++) { stream = _webcams.getItemAt(i) as MediaStream; - if (stream.id == userId) { + if (stream.streamId == streamId) { return {index:i, stream:stream};; } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as new file mode 100755 index 0000000000..e75d90a72e --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as @@ -0,0 +1,24 @@ +package org.bigbluebutton.core.model.int +{ + class MeetingInt + { + var name:String; + var internalId:String; + var externalId:String; + var isBreakout:Boolean; + var defaultAvatarUrl:String; + var voiceConference:String; + var dialNumber:String; + var recorded:Boolean; + var defaultLayout:String; + var welcomeMessage:String; + var modOnlyMessage:String; + var allowStartStopRecording:Boolean; + var webcamsOnlyForModerator:Boolean; + var metadata:Object = null; + + function MeetingInt() + { + } + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md new file mode 100755 index 0000000000..5f5fa24c63 --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md @@ -0,0 +1 @@ +Internal classes so we can hide setters of these classes. \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as index 0451ecf140..6ecece34a5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as @@ -2,10 +2,10 @@ package org.bigbluebutton.core.model.users { public class Guest { - var intId: String; - var extId: String; - var name: String; - var role: String; - var authed: Boolean; + public var intId: String; + public var extId: String; + public var name: String; + public var role: String; + public var authed: Boolean; } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as index 66854854ba..edef1e2397 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as @@ -1,77 +1,74 @@ -package org.bigbluebutton.core.model.users -{ - - public class GuestPolicy - { - - private var _guestPolicy: String; - - private var _guests:ArrayCollection = new ArrayCollection(); - - public function getGuestsWaitingForApproval(): ArrayCollection { - new ArrayCollection(ObjectUtil.copy(_guests.source)) - } - - public function add(user: Guest):void { - _guests.addItem(user); - } - - public function remove(userId: String):Guest { - var index:int = getIndex(userId); - if (index >= 0) { - return _guests.removeItemAt(index) as Guest; - } - - return null; - } - - public function getUserAndIndex(userId: String):Object { - var user:Guest; - for (var i:int = 0; i < _guests.length; i++) { - user = _guests.getItemAt(i) as Guest; - - if (user.id == userId) { - return {index:i, user:user};; - } - } - - return null; - } - - public function getUser(userId:String):Guest { - var user:Guest; - - for (var i:int = 0; i < _guests.length; i++) { - user = _guests.getItemAt(i) as Guest; - - if (user.id == userId) { - return user; - } - } - - return null; - } - - public function getIndex(userId: String):int { - var user:Guest; - for (var i:int = 0; i < _guests.length; i++) { - user = _guests.getItemAt(i) as Guest; - - if (user.id == userId) { - return i; - } - } - - return -1; - } - - public function userJoined(vu: Guest):void { - add(vu); - } - - public function userLeft(intId: String):Guest { - return remove(intId); - } - - } +package org.bigbluebutton.core.model.users +{ + import mx.collections.ArrayCollection; + + public class GuestPolicy + { + + private var _guestPolicy: String; + + private var _guests:ArrayCollection = new ArrayCollection(); + + public function add(user: Guest):void { + _guests.addItem(user); + } + + public function remove(userId: String):Guest { + var index:int = getIndex(userId); + if (index >= 0) { + return _guests.removeItemAt(index) as Guest; + } + + return null; + } + + public function getUserAndIndex(userId: String):Object { + var user:Guest; + for (var i:int = 0; i < _guests.length; i++) { + user = _guests.getItemAt(i) as Guest; + + if (user.intId == userId) { + return {index:i, user:user};; + } + } + + return null; + } + + public function getUser(userId:String):Guest { + var user:Guest; + + for (var i:int = 0; i < _guests.length; i++) { + user = _guests.getItemAt(i) as Guest; + + if (user.intId == userId) { + return user; + } + } + + return null; + } + + public function getIndex(userId: String):int { + var user:Guest; + for (var i:int = 0; i < _guests.length; i++) { + user = _guests.getItemAt(i) as Guest; + + if (user.intId == userId) { + return i; + } + } + + return -1; + } + + public function userJoined(vu: Guest):void { + add(vu); + } + + public function userLeft(intId: String):Guest { + return remove(intId); + } + + } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as index 7dbb2c9547..e3176bb58d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as @@ -2,16 +2,16 @@ package org.bigbluebutton.core.model.users { public class User2x { - var intId: String; - var extId: String; - var name: String; - var role: String; - var guest: Boolean; - var authed: Boolean; - var waitingForAcceptance: Boolean; - var emoji: String; - var locked: Boolean; - var presenter: Boolean; - var avatar: String; + public var intId: String; + public var extId: String; + public var name: String; + public var role: String; + public var guest: Boolean; + public var authed: Boolean; + public var waitingForAcceptance: Boolean; + public var emoji: String; + public var locked: Boolean; + public var presenter: Boolean; + public var avatar: String; } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as index a5f0082db4..3886e5ebc9 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as @@ -1,5 +1,6 @@ package org.bigbluebutton.core.model.users { + import mx.collections.ArrayCollection; public class Users2x { @@ -24,7 +25,7 @@ package org.bigbluebutton.core.model.users for (var i:int = 0; i < _users.length; i++) { user = _users.getItemAt(i) as User2x; - if (user.id == userId) { + if (user.intId == userId) { return {index:i, user:user};; } } @@ -38,7 +39,7 @@ package org.bigbluebutton.core.model.users for (var i:int = 0; i < _users.length; i++) { user = _users.getItemAt(i) as User2x; - if (user.id == userId) { + if (user.intId == userId) { return user; } } @@ -51,7 +52,7 @@ package org.bigbluebutton.core.model.users for (var i:int = 0; i < _users.length; i++) { user = _users.getItemAt(i) as User2x; - if (user.id == userId) { + if (user.intId == userId) { return i; } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as index bc3b1dff9a..67db83867c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as @@ -9,8 +9,7 @@ package org.bigbluebutton.core.model.users public class UsersModel { private static var instance:UsersModel = null; - private var _me:Me; - + private var _users:ArrayCollection = new ArrayCollection(); public function UsersModel(enforcer: UsersModelSingletonEnforcer) { @@ -25,15 +24,7 @@ package org.bigbluebutton.core.model.users } return instance; } - - public function set me(value: Me):void { - _me = value; - } - - public function get me():Me { - return _me; - } - + private function add(user: UserVO):void { _users.addItem(user); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as index 082e3aa859..e20a3c89df 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as @@ -2,13 +2,13 @@ package org.bigbluebutton.core.model.users { public class VoiceUser2x { - var intId: String; - var voiceUserId: String; - var callingWith: String; - var callerName: String; - var callerNum: String; - var muted: Boolean; - var talking: Boolean; - var listenOnly: Boolean; + public var intId: String; + public var voiceUserId: String; + public var callingWith: String; + public var callerName: String; + public var callerNum: String; + public var muted: Boolean; + public var talking: Boolean; + public var listenOnly: Boolean; } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as index f10facd946..f89377f9fd 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as @@ -2,8 +2,6 @@ package org.bigbluebutton.core.model.users { import mx.collections.ArrayCollection; - import org.bigbluebutton.core.model.Me; - public class VoiceUsers2x { @@ -27,7 +25,7 @@ package org.bigbluebutton.core.model.users for (var i:int = 0; i < _users.length; i++) { user = _users.getItemAt(i) as VoiceUser2x; - if (user.id == userId) { + if (user.intId == userId) { return {index:i, user:user};; } } @@ -41,7 +39,7 @@ package org.bigbluebutton.core.model.users for (var i:int = 0; i < _users.length; i++) { user = _users.getItemAt(i) as VoiceUser2x; - if (user.id == userId) { + if (user.intId == userId) { return user; } } @@ -54,7 +52,7 @@ package org.bigbluebutton.core.model.users for (var i:int = 0; i < _users.length; i++) { user = _users.getItemAt(i) as VoiceUser2x; - if (user.id == userId) { + if (user.intId == userId) { return i; } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as index a6e4616deb..d0b4cbf03f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as @@ -36,7 +36,6 @@ package org.bigbluebutton.main.api import org.bigbluebutton.core.events.GetMyUserInfoRequestEvent; import org.bigbluebutton.core.events.IsUserPublishingCamRequest; import org.bigbluebutton.core.events.VoiceConfEvent; - import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.core.vo.CameraSettingsVO; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.model.users.events.EmojiStatusEvent; @@ -252,11 +251,11 @@ package org.bigbluebutton.main.api } private function handleGetExternalMeetingID():String { - return UserManager.getInstance().getConference().externalMeetingID; + return UsersUtil.getExternalMeetingID(); } private function handleGetInternalMeetingID():String { - return UserManager.getInstance().getConference().internalMeetingID; + return UsersUtil.getInternalMeetingID(); } private function handleGetSessionToken():String { @@ -352,20 +351,20 @@ package org.bigbluebutton.main.api private function handleMuteMeRequest():void { var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER); - e.userid = UserManager.getInstance().getConference().getMyUserId(); + e.userid = UsersUtil.getMyUserID(); e.mute = true; _dispatcher.dispatchEvent(e); } private function handleUnmuteMeRequest():void { var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER); - e.userid = UserManager.getInstance().getConference().getMyUserId(); + e.userid = UsersUtil.getMyUserID(); e.mute = false; _dispatcher.dispatchEvent(e); } private function handleGetMyRoleRequestSync():String { - return UserManager.getInstance().getConference().whatsMyRole(); + return UsersUtil.getMyRole(); } private function handleGetMyRoleRequestAsynch():void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as index c779cfc48e..ec32f34963 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as @@ -220,7 +220,7 @@ package org.bigbluebutton.main.api public function handleGetMyRoleResponse(event:CoreEvent):void { var payload:Object = new Object(); payload.eventName = EventConstants.GET_MY_ROLE_RESP; - payload.myRole = UserManager.getInstance().getConference().whatsMyRole(); + payload.myRole = UsersUtil.getMyRole(); broadcastEvent(payload); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as index f10d2a30d4..755a736606 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as @@ -20,10 +20,6 @@ package org.bigbluebutton.main.events { import flash.events.Event; - import org.bigbluebutton.main.model.ConferenceParameters; - import org.bigbluebutton.main.model.users.BBBUser; - import org.bigbluebutton.main.model.ConferenceParameters; - public class ResponseModeratorEvent extends Event { public static const RESPONSE:String = "Response"; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as index 31103a5781..17a55f3f36 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as @@ -19,14 +19,11 @@ package org.bigbluebutton.main.events { import flash.events.Event; - import org.bigbluebutton.main.model.ConferenceParameters; public class SuccessfulLoginEvent extends Event { public static const USER_LOGGED_IN:String = "SuccessfullyLoggedIn"; - - public var conferenceParameters:ConferenceParameters; - + public function SuccessfulLoginEvent(type:String) { super(type, true, false); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml old mode 100644 new mode 100755 index 6c1396e426..01158bddc2 --- a/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml @@ -51,7 +51,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. </EventHandlers> <EventHandlers type="{SuccessfulLoginEvent.USER_LOGGED_IN}" > - <MethodInvoker generator="{ModulesProxy}" method="loadAllModules" arguments="{event.conferenceParameters}" /> + <MethodInvoker generator="{ModulesProxy}" method="loadAllModules" /> </EventHandlers> <EventHandlers type="{LogoutEvent.USER_LOGGED_OUT}" > diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as deleted file mode 100755 index be3fe0d947..0000000000 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as +++ /dev/null @@ -1,110 +0,0 @@ -/** - * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ - * - * Copyright (c) 2012 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 3.0 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.main.model { - - /** - * The ConferenceParameters class holds attributes that define the conference. You can access them in your module through the - * attributes property that is passed to your IBigBlueButtonModule instance on startup. - * - */ - public class ConferenceParameters { - public var meetingName:String; - - public var externMeetingID:String; - - /** - * True if the room is a breakout room. - */ - public var isBreakout:Boolean; - - /** - * The name of the conference - */ - public var conference:String; - - /** - * The username of the local user - */ - public var username:String; - - public var avatarURL:String; - /** - * The role of the local user. Could be MODERATOR or VIEWER - */ - public var role:String; - - /** - * The room unique id, as specified in the API /create call. - */ - public var room:String; - - /** - * Voice conference bridge for the client - */ - public var webvoiceconf:String; - - /** - * Voice conference bridge that external SIP clients use. Usually the same as webvoiceconf - */ - public var voicebridge:String; - - /** - * Flag used to enter as a guest - */ - public var guest:Boolean; - - /** - * The welcome string, as passed in through the API /create call. - */ - public var welcome:String; - - public var meetingID:String; - - /** - * External unique user id. - */ - public var externUserID:String; - - /** - * Internal unique user id. - */ - public var internalUserID:String; - - public var logoutUrl:String; - - /** - * The unique userid internal to bbb-client. - */ - public var userid:String; - - public var record:Boolean; - - /** - * Flag used to start room as muted - * */ - public var muteOnStart:Boolean; - - /** - * Parameter used to send initial lock settings - * */ - public var lockSettings:Object; - - public var authToken:String; - } -} diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as old mode 100644 new mode 100755 index 5a1cb162dd..e73f43a79f --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as @@ -31,8 +31,8 @@ package org.bigbluebutton.main.model.modules import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.common.IBigBlueButtonModule; import org.bigbluebutton.core.UsersUtil; - import org.bigbluebutton.main.model.ConferenceParameters; - + import org.bigbluebutton.core.model.LiveMeeting; + public class ModuleDescriptor { private static const LOGGER:ILogger = getClassLogger(ModuleDescriptor); @@ -168,18 +168,26 @@ package org.bigbluebutton.main.model.modules } } - public function loadConfigAttributes(conferenceParameters:ConferenceParameters, protocol:String):void{ - addAttribute("conference", conferenceParameters.conference); - addAttribute("username", conferenceParameters.username); - addAttribute("userrole", conferenceParameters.role); - addAttribute("room", conferenceParameters.room); - addAttribute("userid", conferenceParameters.userid); - addAttribute("voicebridge", conferenceParameters.voicebridge); - addAttribute("webvoiceconf", conferenceParameters.webvoiceconf); - addAttribute("welcome", conferenceParameters.welcome); - addAttribute("externUserID", conferenceParameters.externUserID); - addAttribute("internalUserID", conferenceParameters.internalUserID); - addAttribute("meetingID", conferenceParameters.meetingID); + public function loadConfigAttributes(protocol:String):void{ + var intMeetingId: String = LiveMeeting.inst().meeting.internalId; + var userName: String = LiveMeeting.inst().me.name; + var role: String = LiveMeeting.inst().me.role; + var intUserId: String = LiveMeeting.inst().me.id; + var voiceConf: String = LiveMeeting.inst().meeting.voiceConf; + var welcome: String = LiveMeeting.inst().me.welcome; + var extUserId: String = LiveMeeting.inst().me.externalId; + + addAttribute("conference", intMeetingId); + addAttribute("username", userName); + addAttribute("userrole", role); + addAttribute("room", intMeetingId); + addAttribute("userid", intUserId); + addAttribute("voicebridge", voiceConf); + addAttribute("webvoiceconf", voiceConf); + addAttribute("welcome", welcome); + addAttribute("externUserID", extUserId); + addAttribute("internalUserID", intUserId); + addAttribute("meetingID", intMeetingId); addAttribute("protocol", protocol); useProtocol(protocol); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as index fa7ba03b55..5031062b7f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as @@ -28,11 +28,9 @@ package org.bigbluebutton.main.model.modules import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.common.IBigBlueButtonModule; - import org.bigbluebutton.common.Role; import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.Options; import org.bigbluebutton.main.events.AppVersionEvent; - import org.bigbluebutton.main.model.ConferenceParameters; import org.bigbluebutton.main.model.options.PortTestOptions; public class ModuleManager @@ -47,7 +45,6 @@ package org.bigbluebutton.main.model.modules private var sorted:ArrayCollection; //The array of modules sorted by dependencies, with least dependent first private var _applicationDomain:ApplicationDomain; - private var conferenceParameters:ConferenceParameters; private var modulesDispatcher:ModulesDispatcher; @@ -107,7 +104,7 @@ package org.bigbluebutton.main.model.modules if (BBB.initConnectionManager().isTunnelling) { protocol = "rtmpt"; } - m.loadConfigAttributes(conferenceParameters, protocol); + m.loadConfigAttributes(protocol); bbb.start(m.attributes); } } @@ -169,10 +166,8 @@ package org.bigbluebutton.main.model.modules modulesDispatcher.sendStartUserServicesEvent(); } - public function loadAllModules(parameters:ConferenceParameters):void{ + public function loadAllModules():void{ modulesDispatcher.sendModuleLoadingStartedEvent(); - conferenceParameters = parameters; - Role.setRole(parameters.role); for (var i:int = 0; i<sorted.length; i++){ var m:ModuleDescriptor = sorted.getItemAt(i) as ModuleDescriptor; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as old mode 100644 new mode 100755 index 0e0edb2af5..ab37b817a9 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as @@ -21,7 +21,6 @@ package org.bigbluebutton.main.model.modules import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.UsersUtil; - import org.bigbluebutton.main.model.ConferenceParameters; import org.bigbluebutton.main.model.PortTestProxy; public class ModulesProxy { @@ -91,8 +90,8 @@ package org.bigbluebutton.main.model.modules } } - public function loadAllModules(params:ConferenceParameters):void{ - modulesManager.loadAllModules(params); + public function loadAllModules():void{ + modulesManager.loadAllModules(); } public function handleLogout():void { 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 2fee949f0f..5ac06f98ac 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as @@ -1,433 +1,435 @@ -/** -* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ -* -* Copyright (c) 2012 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 3.0 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.main.model.users -{ - import com.asfusion.mate.events.Dispatcher; - - import flash.events.Event; - - import org.as3commons.lang.ArrayUtils; - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - import org.bigbluebutton.common.Role; - import org.bigbluebutton.core.UsersUtil; - import org.bigbluebutton.core.events.LockControlEvent; - import org.bigbluebutton.core.events.VoiceConfEvent; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.core.vo.LockSettingsVO; - import org.bigbluebutton.main.model.users.events.StreamStartedEvent; - import org.bigbluebutton.modules.videoconf.events.ClosePublishWindowEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; - - public class BBBUser { - private static const LOGGER:ILogger = getClassLogger(BBBUser); - - public static const MODERATOR:String = "MODERATOR"; - public static const VIEWER:String = "VIEWER"; - public static const PRESENTER:String = "PRESENTER"; - - // Flag to tell that user is in the process of leaving the meeting. - public var isLeavingFlag:Boolean = false; - - [Bindable] public var me:Boolean = false; - [Bindable] public var userID:String = "UNKNOWN USER"; - [Bindable] public var externUserID:String = "UNKNOWN USER"; - [Bindable] public var name:String; - [Bindable] public var talking:Boolean = false; - [Bindable] public var phoneUser:Boolean = false; - [Bindable] public var listenOnly:Boolean = false; - - [Bindable] public var disableMyCam:Boolean = false; - [Bindable] public var disableMyMic:Boolean = false; - [Bindable] public var disableMyPrivateChat:Boolean = false; - [Bindable] public var disableMyPublicChat:Boolean = false; - [Bindable] public var lockedLayout:Boolean = false; - [Bindable] public var avatarURL:String=""; - - [Bindable] public var guest:Boolean = false; - [Bindable] public var waitingForAcceptance:Boolean = false; - - [Bindable] - public function get hasStream():Boolean { - return streamNames.length > 0; - } - public function set hasStream(s:Boolean):void { - throw new Error("hasStream cannot be set. It is derived directly from streamName"); - } - - [Bindable] private var _viewingStream:Array = new Array(); - - [Bindable] - public function get viewingStream():Array { - return _viewingStream; - } - public function set viewingStream(v:Array):void { - throw new Error("Please use the helpers addViewingStream or removeViewingStream to handle viewingStream"); - } - public function addViewingStream(streamName:String):Boolean { - if (isViewingStream(streamName)) { - return false; - } - - _viewingStream.push(streamName); - return true; - } - public function removeViewingStream(streamName:String):Boolean { - if (!isViewingStream(streamName)) { - return false; - } - - _viewingStream = _viewingStream.filter(function(item:*, index:int, array:Array):Boolean { return item != streamName; }); - return true; - } - private function isViewingStream(streamName:String):Boolean { - return _viewingStream.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; }); - } - public function isViewingAllStreams():Boolean { - return _viewingStream.length == streamNames.length; - } - - [Bindable] public var streamNames:Array = new Array(); - - [Bindable] - public function get streamName():String { - var streams:String = ""; - for each(var stream:String in streamNames) { - streams = streams + stream + "|"; - } - //Remove last | - streams = streams.slice(0, streams.length-1); - return streams; - } - - private function hasThisStream(streamName:String):Boolean { - return streamNames.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; }); - } - - public function set streamName(streamNames:String):void { - if(streamNames) { - var streamNamesList:Array = streamNames.split("|"); - for each(var streamName:String in streamNamesList) { - sharedWebcam(streamName); - } - } - } - - private var _presenter:Boolean = false; - [Bindable] - public function get presenter():Boolean { - return _presenter; - } - public function set presenter(p:Boolean):void { - _presenter = p; - verifyUserStatus(); - } - - public var emojiStatusTime:Date; - private var _emojiStatus:String = "none"; - - [Bindable("emojiStatusChange")] - public function get emojiStatus():String { - return _emojiStatus; - } - public function set emojiStatus(r:String):void { - _emojiStatus = r; - emojiStatusTime = (r ? new Date() : null); - verifyUserStatus(); - dispatchEvent(new Event("emojiStatusChange")); - } - - [Bindable("emojiStatusChange")] - public function get hasEmojiStatus():Boolean { - return _emojiStatus != null && _emojiStatus != "none" && _emojiStatus != "null"; - } - - private var _role:String = Role.VIEWER; - [Bindable] - public function get role():String { - return _role; - } - public function set role(r:String):void { - _role = r; - verifyUserStatus(); - } - - [Bindable] public var room:String = ""; - [Bindable] public var authToken:String = ""; - [Bindable] public var selected:Boolean = false; - - private var _voiceMuted:Boolean = false; - [Bindable] - public function get voiceMuted():Boolean { - return _voiceMuted; - } - public function set voiceMuted(v:Boolean):void { - _voiceMuted = v; - verifyMedia(); - } - - private var _voiceJoined:Boolean = false; - [Bindable] - public function get voiceJoined():Boolean { - return _voiceJoined; - } - public function set voiceJoined(v:Boolean):void { - _voiceJoined = v; - verifyMedia(); - } - - [Bindable] public var userLocked:Boolean = false; - [Bindable] public var status:String = ""; - [Bindable] public var customdata:Object = {}; - - /* - * This variable is for accessibility for the Users Window. It can't be manually set - * and only changes when one of the relevant status variables changes. Use the verifyUserStatus - * method to update the value. - * Chad - */ - private var _userStatus:String = ""; - [Bindable] - public function get userStatus():String { - return _userStatus; - } - private function set userStatus(s:String):void {} - private function verifyUserStatus():void { - if (presenter) - _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter'); - else if (role == Role.MODERATOR) - _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.moderator'); - else if (hasEmojiStatus) - _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.' + _emojiStatus); - else - _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.viewer'); - } - - public function amIGuest():Boolean { - return guest; - } - - /* - * This variable is for accessibility for the Users Window. It can't be manually set - * and only changes when one of the relevant media variables changes. Use the verifyMedia - * method to update the value. - * Chad - */ - private var _media:String = ""; - [Bindable] - public function get media():String { - return _media; - } - private function set media(m:String):void {} - private function verifyMedia():void { - _media = (hasStream ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.webcam') + " " : "") + - (!voiceJoined ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.noAudio') : - (voiceMuted ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOff') : - ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOn'))); - } - - private var _status:StatusCollection = new StatusCollection(); - - public function buildStatus():void { - var showingWebcam:String=""; - var isPresenter:String=""; - var hasEmoji:String = ""; - if (hasStream) - showingWebcam=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.streamIcon.toolTip'); - if (presenter) - isPresenter=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presIcon.toolTip'); - if (hasEmojiStatus) - hasEmoji = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.'+ emojiStatus +'.toolTip'); - - status = showingWebcam + isPresenter + hasEmoji; - } - - public function addStatus(status:Status):void { - _status.addStatus(status); - } - - public function userEmojiStatus(emoji: String):void { - emojiStatus = emoji; - if (me) { - UserManager.getInstance().getConference().myEmojiStatus = emoji; - } - buildStatus(); - } - - public function sharedWebcam(stream: String):void { - if(stream && stream != "" && !hasThisStream(stream)) { - streamNames.push(stream); - sendStreamStartedEvent(stream); - } - buildStatus(); - verifyMedia(); - } - - public function unsharedWebcam(stream: String):void { - streamNames = streamNames.filter(function(item:*, index:int, array:Array):Boolean { return item != stream }); - buildStatus(); - verifyMedia(); - } - - public function presenterStatusChanged(presenter: Boolean):void { - this.presenter = presenter; - buildStatus(); - } - - public function lockStatusChanged(locked: Boolean):void { - userLocked = locked; - applyLockSettings(); - buildStatus(); - } - - public function changeStatus(status:Status):void { - switch (status.name) { - case "presenter": - presenter=(status.value.toString().toUpperCase() == "TRUE") ? true : false; - break; - case "hasStream": - var streamInfo:Array=String(status.value).split(/,/); - /** - * Cannot use this statement as new Boolean(expression) - * return true if the expression is a non-empty string not - * when the string equals "true". See Boolean class def. - * - * hasStream = new Boolean(String(streamInfo[0])); - */ - var streamNameInfo:Array=String(streamInfo[1]).split(/=/); - streamName=streamNameInfo[1]; - break; - // @FIXME : check the coming status from the server - case "emojiStatus": - emojiStatus = status.value.toString(); - if (me) { - UserManager.getInstance().getConference().myEmojiStatus=status.value.toString(); - } - break; - } - buildStatus(); - } - - public function removeStatus(name:String):void { - _status.removeStatus(name); - } - - public function getStatus(name:String):Status { - return _status.getStatus(name); - } - - private var _breakoutRooms : Array = []; - - [Bindable("displayNameChange")] - public function get displayName():String { - if (ArrayUtils.isEmpty(_breakoutRooms)) { - return name; - } else { - return "[" + _breakoutRooms.join(",") + "] " + name; - } - } - - public function get breakoutRooms():Array { - return _breakoutRooms; - } - - public function set breakoutRooms(rooms:Array):void { - _breakoutRooms = rooms; - dispatchEvent(new Event("displayNameChange")); - } - - public function addBreakoutRoom(roomNumber:int):void { - if (!ArrayUtils.contains(_breakoutRooms, roomNumber)) { - _breakoutRooms.push(roomNumber); - dispatchEvent(new Event("displayNameChange")); - } - } - - public function removeBreakoutRoom(roomNumber:int):void { - _breakoutRooms.splice(_breakoutRooms.indexOf(roomNumber), 1); - dispatchEvent(new Event("displayNameChange")); - } - - public static function copy(user:BBBUser):BBBUser { - var n:BBBUser = new BBBUser(); - n.authToken = user.authToken; - n.me = user.me; - n.userID = user.userID; - n.externUserID = user.externUserID; - n.name = user.name; - n._viewingStream = user._viewingStream; - n.streamNames = user.streamNames; - n.presenter = user.presenter; - n.emojiStatus = user.emojiStatus; - n.role = user.role; - n.room = user.room; - n.customdata = user.customdata; - n.media = user.media; - n.phoneUser = user.phoneUser; - n.talking = user.talking; - n.userStatus = user.userStatus; - n.voiceJoined = user.voiceJoined; - n.userLocked = user.userLocked; - n.voiceMuted = user.voiceMuted; - n.disableMyCam = user.disableMyCam; - n.disableMyMic = user.disableMyMic; - n.disableMyPrivateChat = user.disableMyPrivateChat; - n.disableMyPublicChat = user.disableMyPublicChat; - n.breakoutRooms = user.breakoutRooms.concat(); // concatenate an array with nothing to deliver a new array. - n.guest = user.guest; - return n; - } - - private function sendStreamStartedEvent(stream: String):void{ - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(new StreamStartedEvent(userID, name, stream)); - } - - public function applyLockSettings():void { - var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings(); - var amNotModerator:Boolean = !UsersUtil.amIModerator(); - var amNotPresenter:Boolean = !UsersUtil.amIPresenter(); - var lockAppliesToMe:Boolean = me && amNotModerator && amNotPresenter && userLocked; - - disableMyCam = lockAppliesToMe && lockSettings.getDisableCam(); - disableMyMic = lockAppliesToMe && lockSettings.getDisableMic(); - disableMyPrivateChat = lockAppliesToMe && lockSettings.getDisablePrivateChat(); - disableMyPublicChat = lockAppliesToMe && lockSettings.getDisablePublicChat(); - lockedLayout = lockAppliesToMe && lockSettings.getLockedLayout(); - - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(new LockControlEvent(LockControlEvent.CHANGED_LOCK_SETTINGS)); - - - if (lockAppliesToMe) { - //If it's sharing webcam, stop it - if (disableMyCam && hasStream){ - dispatcher.dispatchEvent(new ClosePublishWindowEvent()); - } - //If it's sharing microphone, mute it - if (disableMyMic && !UserManager.getInstance().getConference().isMyVoiceMuted()) { - var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER); - e.userid = UserManager.getInstance().getConference().getMyUserId(); - e.mute = true; - dispatcher.dispatchEvent(e); - } - } - } - } -} +/** + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2012 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 3.0 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.main.model.users +{ + import com.asfusion.mate.events.Dispatcher; + + import flash.events.Event; + + import org.as3commons.lang.ArrayUtils; + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.common.Role; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.events.LockControlEvent; + import org.bigbluebutton.core.events.VoiceConfEvent; + import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.vo.LockSettingsVO; + import org.bigbluebutton.main.model.users.events.StreamStartedEvent; + import org.bigbluebutton.modules.videoconf.events.ClosePublishWindowEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; + + public class BBBUser { + private static const LOGGER:ILogger = getClassLogger(BBBUser); + + public static const MODERATOR:String = "MODERATOR"; + public static const VIEWER:String = "VIEWER"; + public static const PRESENTER:String = "PRESENTER"; + + public var dispatcher:Dispatcher = new Dispatcher(); + + // Flag to tell that user is in the process of leaving the meeting. + public var isLeavingFlag:Boolean = false; + + [Bindable] public var me:Boolean = false; + [Bindable] public var userID:String = "UNKNOWN USER"; + [Bindable] public var externUserID:String = "UNKNOWN USER"; + [Bindable] public var name:String; + [Bindable] public var talking:Boolean = false; + [Bindable] public var phoneUser:Boolean = false; + [Bindable] public var listenOnly:Boolean = false; + + [Bindable] public var disableMyCam:Boolean = false; + [Bindable] public var disableMyMic:Boolean = false; + [Bindable] public var disableMyPrivateChat:Boolean = false; + [Bindable] public var disableMyPublicChat:Boolean = false; + [Bindable] public var lockedLayout:Boolean = false; + [Bindable] public var avatarURL:String=""; + + [Bindable] public var guest:Boolean = false; + [Bindable] public var waitingForAcceptance:Boolean = false; + + [Bindable] + public function get hasStream():Boolean { + return streamNames.length > 0; + } + public function set hasStream(s:Boolean):void { + throw new Error("hasStream cannot be set. It is derived directly from streamName"); + } + + [Bindable] private var _viewingStream:Array = new Array(); + + [Bindable] + public function get viewingStream():Array { + return _viewingStream; + } + public function set viewingStream(v:Array):void { + throw new Error("Please use the helpers addViewingStream or removeViewingStream to handle viewingStream"); + } + public function addViewingStream(streamName:String):Boolean { + if (isViewingStream(streamName)) { + return false; + } + + _viewingStream.push(streamName); + return true; + } + public function removeViewingStream(streamName:String):Boolean { + if (!isViewingStream(streamName)) { + return false; + } + + _viewingStream = _viewingStream.filter(function(item:*, index:int, array:Array):Boolean { return item != streamName; }); + return true; + } + private function isViewingStream(streamName:String):Boolean { + return _viewingStream.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; }); + } + public function isViewingAllStreams():Boolean { + return _viewingStream.length == streamNames.length; + } + + [Bindable] public var streamNames:Array = new Array(); + + [Bindable] + public function get streamName():String { + var streams:String = ""; + for each(var stream:String in streamNames) { + streams = streams + stream + "|"; + } + //Remove last | + streams = streams.slice(0, streams.length-1); + return streams; + } + + private function hasThisStream(streamName:String):Boolean { + return streamNames.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; }); + } + + public function set streamName(streamNames:String):void { + if(streamNames) { + var streamNamesList:Array = streamNames.split("|"); + for each(var streamName:String in streamNamesList) { + sharedWebcam(streamName); + } + } + } + + private var _presenter:Boolean = false; + [Bindable] + public function get presenter():Boolean { + return _presenter; + } + public function set presenter(p:Boolean):void { + _presenter = p; + verifyUserStatus(); + } + + public var emojiStatusTime:Date; + private var _emojiStatus:String = "none"; + + [Bindable("emojiStatusChange")] + public function get emojiStatus():String { + return _emojiStatus; + } + public function set emojiStatus(r:String):void { + _emojiStatus = r; + emojiStatusTime = (r ? new Date() : null); + verifyUserStatus(); + dispatcher.dispatchEvent(new Event("emojiStatusChange")); + } + + [Bindable("emojiStatusChange")] + public function get hasEmojiStatus():Boolean { + return _emojiStatus != null && _emojiStatus != "none" && _emojiStatus != "null"; + } + + private var _role:String = Role.VIEWER; + [Bindable] + public function get role():String { + return _role; + } + public function set role(r:String):void { + _role = r; + verifyUserStatus(); + } + + [Bindable] public var room:String = ""; + [Bindable] public var authToken:String = ""; + [Bindable] public var selected:Boolean = false; + + private var _voiceMuted:Boolean = false; + [Bindable] + public function get voiceMuted():Boolean { + return _voiceMuted; + } + public function set voiceMuted(v:Boolean):void { + _voiceMuted = v; + verifyMedia(); + } + + private var _voiceJoined:Boolean = false; + [Bindable] + public function get voiceJoined():Boolean { + return _voiceJoined; + } + public function set voiceJoined(v:Boolean):void { + _voiceJoined = v; + verifyMedia(); + } + + [Bindable] public var userLocked:Boolean = false; + [Bindable] public var status:String = ""; + [Bindable] public var customdata:Object = {}; + + /* + * This variable is for accessibility for the Users Window. It can't be manually set + * and only changes when one of the relevant status variables changes. Use the verifyUserStatus + * method to update the value. + * Chad + */ + private var _userStatus:String = ""; + [Bindable] + public function get userStatus():String { + return _userStatus; + } + private function set userStatus(s:String):void {} + private function verifyUserStatus():void { + if (presenter) + _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter'); + else if (role == Role.MODERATOR) + _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.moderator'); + else if (hasEmojiStatus) + _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.' + _emojiStatus); + else + _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.viewer'); + } + + public function amIGuest():Boolean { + return guest; + } + + /* + * This variable is for accessibility for the Users Window. It can't be manually set + * and only changes when one of the relevant media variables changes. Use the verifyMedia + * method to update the value. + * Chad + */ + private var _media:String = ""; + [Bindable] + public function get media():String { + return _media; + } + private function set media(m:String):void {} + private function verifyMedia():void { + _media = (hasStream ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.webcam') + " " : "") + + (!voiceJoined ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.noAudio') : + (voiceMuted ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOff') : + ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOn'))); + } + + private var _status:StatusCollection = new StatusCollection(); + + public function buildStatus():void { + var showingWebcam:String=""; + var isPresenter:String=""; + var hasEmoji:String = ""; + if (hasStream) + showingWebcam=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.streamIcon.toolTip'); + if (presenter) + isPresenter=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presIcon.toolTip'); + if (hasEmojiStatus) + hasEmoji = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.'+ emojiStatus +'.toolTip'); + + status = showingWebcam + isPresenter + hasEmoji; + } + + public function addStatus(status:Status):void { + _status.addStatus(status); + } + + public function userEmojiStatus(emoji: String):void { + emojiStatus = emoji; + if (me) { + UsersUtil.setMyEmoji(emoji); + } + buildStatus(); + } + + public function sharedWebcam(stream: String):void { + if(stream && stream != "" && !hasThisStream(stream)) { + streamNames.push(stream); + sendStreamStartedEvent(stream); + } + buildStatus(); + verifyMedia(); + } + + public function unsharedWebcam(stream: String):void { + streamNames = streamNames.filter(function(item:*, index:int, array:Array):Boolean { return item != stream }); + buildStatus(); + verifyMedia(); + } + + public function presenterStatusChanged(presenter: Boolean):void { + this.presenter = presenter; + buildStatus(); + } + + public function lockStatusChanged(locked: Boolean):void { + userLocked = locked; + applyLockSettings(); + buildStatus(); + } + + public function changeStatus(status:Status):void { + switch (status.name) { + case "presenter": + presenter=(status.value.toString().toUpperCase() == "TRUE") ? true : false; + break; + case "hasStream": + var streamInfo:Array=String(status.value).split(/,/); + /** + * Cannot use this statement as new Boolean(expression) + * return true if the expression is a non-empty string not + * when the string equals "true". See Boolean class def. + * + * hasStream = new Boolean(String(streamInfo[0])); + */ + var streamNameInfo:Array=String(streamInfo[1]).split(/=/); + streamName=streamNameInfo[1]; + break; + // @FIXME : check the coming status from the server + case "emojiStatus": + emojiStatus = status.value.toString(); + if (me) { + UsersUtil.setMyEmoji(status.value.toString()); + } + break; + } + buildStatus(); + } + + public function removeStatus(name:String):void { + _status.removeStatus(name); + } + + public function getStatus(name:String):Status { + return _status.getStatus(name); + } + + private var _breakoutRooms : Array = []; + + [Bindable("displayNameChange")] + public function get displayName():String { + if (ArrayUtils.isEmpty(_breakoutRooms)) { + return name; + } else { + return "[" + _breakoutRooms.join(",") + "] " + name; + } + } + + public function get breakoutRooms():Array { + return _breakoutRooms; + } + + public function set breakoutRooms(rooms:Array):void { + _breakoutRooms = rooms; + dispatcher.dispatchEvent(new Event("displayNameChange")); + } + + public function addBreakoutRoom(roomNumber:int):void { + if (!ArrayUtils.contains(_breakoutRooms, roomNumber)) { + _breakoutRooms.push(roomNumber); + dispatcher.dispatchEvent(new Event("displayNameChange")); + } + } + + public function removeBreakoutRoom(roomNumber:int):void { + _breakoutRooms.splice(_breakoutRooms.indexOf(roomNumber), 1); + dispatcher.dispatchEvent(new Event("displayNameChange")); + } + + public static function copy(user:BBBUser):BBBUser { + var n:BBBUser = new BBBUser(); + n.authToken = user.authToken; + n.me = user.me; + n.userID = user.userID; + n.externUserID = user.externUserID; + n.name = user.name; + n._viewingStream = user._viewingStream; + n.streamNames = user.streamNames; + n.presenter = user.presenter; + n.emojiStatus = user.emojiStatus; + n.role = user.role; + n.room = user.room; + n.customdata = user.customdata; + n.media = user.media; + n.phoneUser = user.phoneUser; + n.talking = user.talking; + n.userStatus = user.userStatus; + n.voiceJoined = user.voiceJoined; + n.userLocked = user.userLocked; + n.voiceMuted = user.voiceMuted; + n.disableMyCam = user.disableMyCam; + n.disableMyMic = user.disableMyMic; + n.disableMyPrivateChat = user.disableMyPrivateChat; + n.disableMyPublicChat = user.disableMyPublicChat; + n.breakoutRooms = user.breakoutRooms.concat(); // concatenate an array with nothing to deliver a new array. + n.guest = user.guest; + return n; + } + + private function sendStreamStartedEvent(stream: String):void{ + var dispatcher:Dispatcher = new Dispatcher(); + dispatcher.dispatchEvent(new StreamStartedEvent(userID, name, stream)); + } + + public function applyLockSettings():void { + var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings(); + var amNotModerator:Boolean = !UsersUtil.amIModerator(); + var amNotPresenter:Boolean = !UsersUtil.amIPresenter(); + var lockAppliesToMe:Boolean = me && amNotModerator && amNotPresenter && userLocked; + + disableMyCam = lockAppliesToMe && lockSettings.getDisableCam(); + disableMyMic = lockAppliesToMe && lockSettings.getDisableMic(); + disableMyPrivateChat = lockAppliesToMe && lockSettings.getDisablePrivateChat(); + disableMyPublicChat = lockAppliesToMe && lockSettings.getDisablePublicChat(); + lockedLayout = lockAppliesToMe && lockSettings.getLockedLayout(); + + var dispatcher:Dispatcher = new Dispatcher(); + dispatcher.dispatchEvent(new LockControlEvent(LockControlEvent.CHANGED_LOCK_SETTINGS)); + + + if (lockAppliesToMe) { + //If it's sharing webcam, stop it + if (disableMyCam && hasStream){ + dispatcher.dispatchEvent(new ClosePublishWindowEvent()); + } + //If it's sharing microphone, mute it + if (disableMyMic && !UserManager.getInstance().getConference().isMyVoiceMuted()) { + var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER); + e.userid = UsersUtil.getMyUserID(); + e.mute = true; + dispatcher.dispatchEvent(e); + } + } + } + } +} 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 dd871ed582..c0d07ff551 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as @@ -29,37 +29,15 @@ package org.bigbluebutton.main.model.users { import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.common.Role; - import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.Options; - import org.bigbluebutton.core.model.Config; - import org.bigbluebutton.core.model.MeetingModel; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.core.vo.CameraSettingsVO; import org.bigbluebutton.core.vo.LockSettingsVO; import org.bigbluebutton.main.events.BreakoutRoomEvent; import org.bigbluebutton.main.model.options.LockOptions; public class Conference { - public var userEjectedFromMeeting:Boolean = false; - public var meetingName:String; - - public var externalMeetingID:String; - - public var internalMeetingID:String; - - public var externalUserID:String; - - public var avatarURL:String; - - public var voiceBridge:String; - - public var dialNumber:String; - - public var isBreakout:Boolean; - - public var iAskedToLogout:Boolean - - [Bindable] - public var record:Boolean; [Bindable] public var numAdditionalSharedNotes:Number = 0; @@ -70,9 +48,6 @@ package org.bigbluebutton.main.model.users { private var _myCamSettings:ArrayCollection = null; - [Bindable] - private var me:BBBUser = null; - [Bindable] public var users:ArrayCollection = null; @@ -87,7 +62,6 @@ package org.bigbluebutton.main.model.users { private var defaultLayout:String; public function Conference():void { - me = new BBBUser(); users = new ArrayCollection(); sort = new Sort(); sort.compareFunction = sortFunction; @@ -151,7 +125,7 @@ package org.bigbluebutton.main.model.users { if (hasUser(newuser.userID)) { removeUser(newuser.userID); } - if (newuser.userID == me.userID) { + if (newuser.userID == LiveMeeting.inst().me.id) { newuser.me = true; } users.addItem(newuser); @@ -291,150 +265,56 @@ package org.bigbluebutton.main.model.users { return null; } - public function whatsMyRole():String { - return me.role; - } - - [Bindable] - public function get amIPresenter():Boolean { - return me.presenter; - } - - public function set amIPresenter(presenter:Boolean):void { - me.presenter = presenter; - applyLockSettings(); - } - - [Bindable] - public function get myEmojiStatus():String { - return me.emojiStatus; - } - - public function set myEmojiStatus(emoji:String):void { - me.emojiStatus = emoji; - } - - public function amIThisUser(userID:String):Boolean { - return me.userID == userID; - } - - public function getMyRole():String { - return me.role; - } - - public function amIModerator():Boolean { - return me.role == Role.MODERATOR; - } public function muteMyVoice(mute:Boolean):void { voiceMuted = mute; } public function isMyVoiceMuted():Boolean { - return me.voiceMuted; + return LiveMeeting.inst().myStatus.voiceMuted; } [Bindable] public function set voiceMuted(m:Boolean):void { - me.voiceMuted = m; + LiveMeeting.inst().myStatus.voiceMuted = m; } public function get voiceMuted():Boolean { - return me.voiceMuted; + return LiveMeeting.inst().myStatus.voiceMuted; } public function setMyVoiceJoined(joined:Boolean):void { - voiceJoined = joined; + LiveMeeting.inst().myStatus.voiceJoined = joined; } public function amIVoiceJoined():Boolean { - return me.voiceJoined; + return LiveMeeting.inst().myStatus.voiceJoined; } /** Hook to make the property Bindable **/ [Bindable] public function set voiceJoined(j:Boolean):void { - me.voiceJoined = j; + LiveMeeting.inst().myStatus.voiceJoined = j; } public function get voiceJoined():Boolean { - return me.voiceJoined; + return LiveMeeting.inst().myStatus.voiceJoined; } [Bindable] public function set locked(locked:Boolean):void { - me.userLocked = locked; + LiveMeeting.inst().myStatus.userLocked = locked; } public function get locked():Boolean { - return me.userLocked; - } - - public function setUserEjectedFromMeeting():void { - userEjectedFromMeeting = true; - } - - public function getUserEjectedFromMeeting():Boolean { - return userEjectedFromMeeting; - } - - public function getMyExternalUserID():String { - return externalUserID; - } - - public function getMyUserId():String { - return me.userID; - } - - public function getMyself():BBBUser { - return me; - } - - public function setMyUserid(userID:String):void { - me.userID = userID; - } - - public function setMyName(name:String):void { - me.name = name; - } - - public function getMyName():String { - return me.name; - } - - public function setMyCustomData(customdata:Object):void { - me.customdata = customdata; - } - - public function getMyCustomData():Object { - return me.customdata; + return LiveMeeting.inst().myStatus.userLocked; } public function setMyRole(role:String):void { - me.role = role; - applyLockSettings(); - } - - public function amIGuest():Boolean { - return me.guest; - } - - public function amIWaitingForAcceptance():Boolean { - return me.waitingForAcceptance; - } - - public function setGuest(guest:Boolean):void { - me.guest = guest; + LiveMeeting.inst().me.role = role; + UsersUtil.applyLockSettings(); } - - public function setMyRoom(room:String):void { - me.room = room; - } - - public function setMyAuthToken(token:String):void { - me.authToken = token; - } - + public function removeAllParticipants():void { //users.removeAll(); //users.refresh(); @@ -454,9 +334,9 @@ package org.bigbluebutton.main.model.users { } public function sharedWebcam(userId:String, stream:String):void { - var webcamsOnlyForModerator:Boolean = MeetingModel.getInstance().meeting.webcamsOnlyForModerator; + var webcamsOnlyForModerator:Boolean = LiveMeeting.inst().meeting.webcamsOnlyForModerator; if (!webcamsOnlyForModerator || - (webcamsOnlyForModerator && (amIModerator() || userIsModerator(userId))) + (webcamsOnlyForModerator && (UsersUtil.amIModerator() || userIsModerator(userId))) ) { var aUser:BBBUser = getUser(userId); if (aUser != null) { @@ -514,7 +394,10 @@ package org.bigbluebutton.main.model.users { * */ public function configLockSettings():void { var lockOptions:LockOptions = Options.getOptions(LockOptions) as LockOptions; - lockSettings = new LockSettingsVO(lockOptions.disableCam, lockOptions.disableMic, lockOptions.disablePrivateChat, lockOptions.disablePublicChat, lockOptions.lockedLayout, lockOptions.lockOnJoin, lockOptions.lockOnJoinConfigurable); + lockSettings = new LockSettingsVO(lockOptions.disableCam, lockOptions.disableMic, + lockOptions.disablePrivateChat, lockOptions.disablePublicChat, + lockOptions.lockedLayout, lockOptions.lockOnJoin, + lockOptions.lockOnJoinConfigurable); setLockSettings(lockSettings); } @@ -522,7 +405,7 @@ package org.bigbluebutton.main.model.users { var eachUser:BBBUser; for (var i:int = 0; i < users.length; i++) { eachUser = users.getItemAt(i) as BBBUser; - if (eachUser.userID == me.userID) { + if (eachUser.userID == LiveMeeting.inst().me.id) { return eachUser; } } @@ -535,15 +418,11 @@ package org.bigbluebutton.main.model.users { public function setLockSettings(lockSettings:LockSettingsVO):void { this.lockSettings = lockSettings; - applyLockSettings(); + UsersUtil.applyLockSettings(); users.refresh(); // we need to refresh after updating the lock settings to trigger the user item renderers to redraw } - public function applyLockSettings():void { - var myUser:BBBUser = getMyUser(); - if (myUser != null) - myUser.applyLockSettings(); - } + /* Breakout room feature */ public function addBreakoutRoom(newRoom:BreakoutRoom):void { @@ -709,19 +588,19 @@ package org.bigbluebutton.main.model.users { } } - public function getUserAvatarURL(userID:String):String { // David, to get specific user avatar url - if(userID != null ){ - var p:Object = getUserIndex(userID); - if (p != null) { - var u:BBBUser = p.participant as BBBUser; - LOGGER.info("getUserAvatarURL user =" + JSON.stringify(u)); - if(u.avatarURL == null || u.avatarURL == ""){ - return this.avatarURL; - } - return u.avatarURL; - } - } - return this.avatarURL; - } - } + public function getUserAvatarURL(userID:String):String { // David, to get specific user avatar url + if(userID != null ){ + var p:Object = getUserIndex(userID); + if (p != null) { + var u:BBBUser = p.participant as BBBUser; + LOGGER.info("getUserAvatarURL user =" + JSON.stringify(u)); + if(u.avatarURL == null || u.avatarURL == ""){ + return LiveMeeting.inst().me.avatarURL; + } + return u.avatarURL; + } + } + return LiveMeeting.inst().me.avatarURL; + } + } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as new file mode 100755 index 0000000000..9a95afeb8d --- /dev/null +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as @@ -0,0 +1,31 @@ +package org.bigbluebutton.main.model.users +{ + public class EnterApiResponse + { + public var username: String; + public var extUserId: String; + public var intUserId: String; + public var role: String; + public var guest: Boolean; + public var authed: Boolean; + public var authToken: String; + public var customdata:Object = new Object(); + public var logoutUrl: String; + public var defaultLayout: String; + public var avatarURL: String; + public var dialnumber: String; + public var voiceConf: String; + public var welcome: String; + + public var meetingName: String; + public var extMeetingId: String; + public var intMeetingId: String; + public var isBreakout: Boolean; + + public var record: Boolean; + public var allowStartStopRecording: Boolean; + public var webcamsOnlyForModerator: Boolean; + public var metadata: Object = new Object(); + public var modOnlyMessage: String; + } +} \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as index 8452b19092..0a17b24cf9 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as @@ -1,197 +1,189 @@ /** -* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ -* -* Copyright (c) 2012 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 3.0 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/>. -* -*/ + * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ + * + * Copyright (c) 2012 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 3.0 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.main.model.users { - import com.asfusion.mate.events.Dispatcher; - - import flash.events.Event; - import flash.events.HTTPStatusEvent; - import flash.events.IOErrorEvent; - import flash.net.URLLoader; - import flash.net.URLRequest; - import flash.net.URLRequestMethod; - import flash.net.URLVariables; - import org.bigbluebutton.core.UsersUtil; - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - import org.as3commons.logging.util.jsonXify; - import org.bigbluebutton.core.model.MeBuilder; - import org.bigbluebutton.core.model.MeetingBuilder; - import org.bigbluebutton.core.model.MeetingModel; - import org.bigbluebutton.core.model.users.UsersModel; - import org.bigbluebutton.main.events.MeetingNotFoundEvent; - import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; - import org.bigbluebutton.util.QueryStringParameters; - - public class JoinService - { - private static const LOGGER:ILogger = getClassLogger(JoinService); + import com.asfusion.mate.events.Dispatcher; + + import flash.events.Event; + import flash.events.HTTPStatusEvent; + import flash.events.IOErrorEvent; + import flash.net.URLLoader; + import flash.net.URLRequest; + import flash.net.URLRequestMethod; + import flash.net.URLVariables; + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.main.events.MeetingNotFoundEvent; + import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; + import org.bigbluebutton.util.QueryStringParameters; + + public class JoinService + { + private static const LOGGER:ILogger = getClassLogger(JoinService); - private var request:URLRequest = new URLRequest(); - private var reqVars:URLVariables = new URLVariables(); - - private var urlLoader:URLLoader; - private var _resultListener:Function; - - public function JoinService() { - urlLoader = new URLLoader(); - } - - public function load(url:String):void { - var p:QueryStringParameters = new QueryStringParameters(); - p.collectParameters(); - var sessionToken:String = p.getParameter("sessionToken"); - - reqVars.sessionToken = sessionToken; - - var date:Date = new Date(); - request = new URLRequest(url); - request.method = URLRequestMethod.GET; - request.data = reqVars; - - urlLoader.addEventListener(Event.COMPLETE, handleComplete); - urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); - urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); - urlLoader.load(request); - } - - public function addJoinResultListener(listener:Function):void { - _resultListener = listener; - } - - private function httpStatusHandler(event:HTTPStatusEvent):void { - LOGGER.debug("httpStatusHandler: {0}", [event]); - } - - private function ioErrorHandler(event:IOErrorEvent):void { - var logData:Object = UsersUtil.initLogData(); - logData.tags = ["initialization"]; - logData.message = "IOError calling ENTER api."; - LOGGER.error(JSON.stringify(logData)); - - var e:ConnectionFailedEvent = new ConnectionFailedEvent(ConnectionFailedEvent.USER_LOGGED_OUT); - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(e); - } - - private function extractMetadata(metadata:Object):Object { - var response:Object = new Object(); - if (metadata) { - var data:Array = metadata as Array; - for each (var item:Object in data) { - for (var id:String in item) { - var value:String = item[id] as String; - response[id] = value; - } - } - } - return response; - } - - private function handleComplete(e:Event):void { - var result:Object = JSON.parse(e.target.data); - - var logData:Object = UsersUtil.initLogData(); - logData.tags = ["initialization"]; + private var request:URLRequest = new URLRequest(); + private var reqVars:URLVariables = new URLVariables(); + + private var urlLoader:URLLoader; + private var _resultListener:Function; + + public function JoinService() { + urlLoader = new URLLoader(); + } + + public function load(url:String):void { + var p:QueryStringParameters = new QueryStringParameters(); + p.collectParameters(); + var sessionToken:String = p.getParameter("sessionToken"); + + reqVars.sessionToken = sessionToken; + + var date:Date = new Date(); + request = new URLRequest(url); + request.method = URLRequestMethod.GET; + request.data = reqVars; + + urlLoader.addEventListener(Event.COMPLETE, handleComplete); + urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); + urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); + urlLoader.load(request); + } + + public function addJoinResultListener(listener:Function):void { + _resultListener = listener; + } + + private function httpStatusHandler(event:HTTPStatusEvent):void { + LOGGER.debug("httpStatusHandler: {0}", [event]); + } + + private function ioErrorHandler(event:IOErrorEvent):void { + var logData:Object = UsersUtil.initLogData(); + logData.tags = ["initialization"]; + logData.message = "IOError calling ENTER api."; + LOGGER.error(JSON.stringify(logData)); + + var e:ConnectionFailedEvent = new ConnectionFailedEvent(ConnectionFailedEvent.USER_LOGGED_OUT); + var dispatcher:Dispatcher = new Dispatcher(); + dispatcher.dispatchEvent(e); + } + + private function processLogoutUrl(confInfo:Object):String { + var logoutUrl:String = confInfo.logoutUrl; + var rules:Object = { + "%%FULLNAME%%": confInfo.username, + "%%CONFNAME%%": confInfo.conferenceName, + "%%DIALNUM%%": confInfo.dialnumber, + "%%CONFNUM%%": confInfo.voicebridge + } + + for (var attr:String in rules) { + logoutUrl = logoutUrl.replace(new RegExp(attr, "g"), rules[attr]); + } + + return logoutUrl; + } + + private function extractMetadata(metadata:Object):Object { + var response:Object = new Object(); + if (metadata) { + var data:Array = metadata as Array; + for each (var item:Object in data) { + for (var id:String in item) { + var value:String = item[id] as String; + response[id] = value; + } + } + } + return response; + } + + private function handleComplete(e:Event):void { + var result:Object = JSON.parse(e.target.data); + + var logData:Object = UsersUtil.initLogData(); + logData.tags = ["initialization"]; + + + var returncode:String = result.response.returncode; + if (returncode == 'FAILED') { + logData.message = "Calling ENTER api failed."; + LOGGER.info(JSON.stringify(logData)); + + var dispatcher:Dispatcher = new Dispatcher(); + dispatcher.dispatchEvent(new MeetingNotFoundEvent(result.response.logoutURL)); + } else if (returncode == 'SUCCESS') { + logData.message = "Calling ENTER api succeeded."; + LOGGER.info(JSON.stringify(logData)); + + var apiResponse:EnterApiResponse = new EnterApiResponse(); + apiResponse.meetingName = result.response.confname; + apiResponse.extMeetingId = result.response.externMeetingID; + apiResponse.intMeetingId = result.response.meetingID; + apiResponse.isBreakout = result.response.isBreakout; + + apiResponse.username = result.response.fullname; + apiResponse.extUserId = result.response.externUserID; + apiResponse.intUserId = result.response.internalUserID; + apiResponse.role = result.response.role; + apiResponse.guest = result.response.guest; + apiResponse.authed = result.response.authed; + apiResponse.authToken = result.response.authToken; + + apiResponse.record = (result.response.record.toUpperCase() == "TRUE"); + apiResponse.allowStartStopRecording = result.response.allowStartStopRecording; + apiResponse.webcamsOnlyForModerator = result.response.webcamsOnlyForModerator; + - - var returncode:String = result.response.returncode; - if (returncode == 'FAILED') { - logData.message = "Calling ENTER api failed."; - LOGGER.info(JSON.stringify(logData)); + apiResponse.dialnumber = result.response.dialnumber; + apiResponse.voiceConf = result.response.voicebridge; - var dispatcher:Dispatcher = new Dispatcher(); - dispatcher.dispatchEvent(new MeetingNotFoundEvent(result.response.logoutURL)); - } else if (returncode == 'SUCCESS') { - logData.message = "Calling ENTER api succeeded."; - LOGGER.info(JSON.stringify(logData)); - - var response:Object = new Object(); - response.username = result.response.fullname; - response.conference = result.response.conference; - response.conferenceName = result.response.confname; - response.externMeetingID = result.response.externMeetingID; - response.meetingID = result.response.meetingID; - response.isBreakout = result.response.isBreakout; - response.externUserID = result.response.externUserID; - response.internalUserId = result.response.internalUserID; - response.role = result.response.role; - response.guest = result.response.guest; - response.authed = result.response.authed; - response.room = result.response.room; - response.authToken = result.response.authToken; - response.record = result.response.record; - response.allowStartStopRecording = result.response.allowStartStopRecording; - response.webcamsOnlyForModerator = result.response.webcamsOnlyForModerator; - response.webvoiceconf = result.response.webvoiceconf; - response.dialnumber = result.response.dialnumber; - response.voicebridge = result.response.voicebridge; - response.mode = result.response.mode; - response.welcome = result.response.welcome; - response.logoutUrl = result.response.logoutUrl; - response.defaultLayout = result.response.defaultLayout; - response.avatarURL = result.response.avatarURL + apiResponse.welcome = result.response.welcome; + apiResponse.logoutUrl = processLogoutUrl(result.response); + apiResponse.defaultLayout = result.response.defaultLayout; + apiResponse.avatarURL = result.response.avatarURL + apiResponse.customdata = new Object(); - if (result.response.hasOwnProperty("modOnlyMessage")) { - response.modOnlyMessage = result.response.modOnlyMessage; - MeetingModel.getInstance().modOnlyMessage = response.modOnlyMessage; - } - - response.customdata = new Object(); - - if (result.response.customdata) { - var cdata:Array = result.response.customdata as Array; - for each (var item:Object in cdata) { - for (var id:String in item) { - var value:String = item[id] as String; - response.customdata[id] = value; - } - } - + if (result.response.customdata) { + var cdata:Array = result.response.customdata as Array; + for each (var item:Object in cdata) { + for (var id:String in item) { + var value:String = item[id] as String; + apiResponse.customdata[id] = value; } - - response.metadata = extractMetadata(result.response.metadata); - - UsersModel.getInstance().me = new MeBuilder(response.internalUserId, response.username).withAvatar(response.avatarURL) - .withExternalId(response.externUserID).withToken(response.authToken) - .withLayout(response.defaultLayout).withWelcome(response.welcome) - .withDialNumber(response.dialnumber).withRole(response.role) - .withCustomData(response.customData).withGuest(response.guest) - .withAuthed(response.authed).build(); - - MeetingModel.getInstance().meeting = new MeetingBuilder(response.conference, response.conferenceName) - .withDefaultLayout(response.defaultLayout).withVoiceConf(response.voiceBridge) - .withExternalId(response.externMeetingID).withRecorded(response.record.toUpperCase() == "TRUE") - .withDefaultAvatarUrl(response.avatarURL).withDialNumber(response.dialNumber) - .withWelcomeMessage(response.welcome).withModOnlyMessage(response.modOnlyMessage) - .withAllowStartStopRecording(response.allowStartStopRecording) - .withWebcamsOnlyForModerator(response.webcamsOnlyForModerator) - .withBreakout(response.isBreakout) - .withMetadata(response.metadata).build(); - - if (_resultListener != null) _resultListener(true, response); - } - - } - - public function get loader():URLLoader{ - return this.urlLoader; - } - } + } + } + + apiResponse.metadata = extractMetadata(result.response.metadata); + + if (result.response.hasOwnProperty("modOnlyMessage")) { + apiResponse.modOnlyMessage = result.response.modOnlyMessage; + } + + if (_resultListener != null) _resultListener(true, apiResponse); + } + + } + + public function get loader():URLLoader{ + return this.urlLoader; + } + } } \ No newline at end of file diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as index 86cd124348..6dcfd4a268 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as @@ -34,15 +34,19 @@ package org.bigbluebutton.main.model.users import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.Options; import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.connection.messages.MsgFromClientHdr; + import org.bigbluebutton.core.connection.messages.ValidateAuthTokenReqMsg; + import org.bigbluebutton.core.connection.messages.ValidateAuthTokenReqMsgBody; + import org.bigbluebutton.core.events.TokenValidEvent; import org.bigbluebutton.core.managers.ReconnectionManager; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.core.services.BandwidthMonitor; + import org.bigbluebutton.core.vo.LockSettingsVO; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.InvalidAuthTokenEvent; - import org.bigbluebutton.main.model.ConferenceParameters; import org.bigbluebutton.main.model.options.ApplicationOptions; import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; - import org.bigbluebutton.main.model.users.events.UsersConnectionEvent; - import org.bigbluebutton.core.connection.messages.* + import org.bigbluebutton.main.model.users.events.UsersConnectionEvent; public class NetConnectionDelegate { private static const LOGGER:ILogger = getClassLogger(NetConnectionDelegate); @@ -121,11 +125,12 @@ package org.bigbluebutton.main.model.users logData.tags = ["apps", "connected"]; logData.tokenValid = tokenValid; logData.status = "validate_token_response_received"; - logData.message = "Received validate token response from server."; + logData.message = "Received validate token response from server. 2x"; LOGGER.info(JSON.stringify(logData)); if (tokenValid) { authenticated = true; + dispatcher.dispatchEvent(new TokenValidEvent()); } else { dispatcher.dispatchEvent(new InvalidAuthTokenEvent()); } @@ -179,14 +184,16 @@ package org.bigbluebutton.main.model.users } private function validateToken2x():void { - var confParams:ConferenceParameters = BBB.initUserConfigManager().getConfParams(); + var intMeetingId: String = LiveMeeting.inst().meeting.internalId; + var intUserId: String = LiveMeeting.inst().me.id; + var authToken: String = LiveMeeting.inst().me.authToken; var header: MsgFromClientHdr = new MsgFromClientHdr("ValidateAuthTokenReqMsg", - confParams.meetingID, - confParams.internalUserID); + intMeetingId, + intUserId); - var body: ValidateAuthTokenReqMsgBody = new ValidateAuthTokenReqMsgBody(confParams.internalUserID, - confParams.authToken); + var body: ValidateAuthTokenReqMsgBody = new ValidateAuthTokenReqMsgBody(intUserId, + authToken); var message: ValidateAuthTokenReqMsg = new ValidateAuthTokenReqMsg(header, body); @@ -237,11 +244,13 @@ package org.bigbluebutton.main.model.users private function validateToken():void { - var confParams:ConferenceParameters = BBB.initUserConfigManager().getConfParams(); - + + var intUserId: String = LiveMeeting.inst().me.id; + var authToken: String = LiveMeeting.inst().me.authToken; + var message:Object = new Object(); - message["userId"] = confParams.internalUserID; - message["authToken"] = confParams.authToken; + message["userId"] = intUserId; + message["authToken"] = authToken; sendMessage( "validateToken",// Remote function name @@ -369,8 +378,7 @@ package org.bigbluebutton.main.model.users } public function connect():void { - var confParams:ConferenceParameters = BBB.initUserConfigManager().getConfParams(); - + var intMeetingId: String = LiveMeeting.inst().meeting.internalId; try { var appURL:String = _applicationOptions.uri; @@ -380,12 +388,12 @@ package org.bigbluebutton.main.model.users BandwidthMonitor.getInstance().serverURL = result.server; var protocol:String = "rtmp"; - var uri:String = appURL + "/" + confParams.room; + var uri:String = appURL + "/" + intMeetingId; if (BBB.initConnectionManager().isTunnelling) { - bbbAppsUrl = "rtmpt://" + result.server + "/" + result.app + "/" + confParams.room; + bbbAppsUrl = "rtmpt://" + result.server + "/" + result.app + "/" + intMeetingId; } else { - bbbAppsUrl = "rtmp://" + result.server + ":1935/" + result.app + "/" + confParams.room; + bbbAppsUrl = "rtmp://" + result.server + ":1935/" + result.app + "/" + intMeetingId; } var logData:Object = UsersUtil.initLogData(); @@ -400,11 +408,22 @@ package org.bigbluebutton.main.model.users connectionTimer.addEventListener(TimerEvent.TIMER, connectionTimeout); connectionTimer.start(); - _netConnection.connect(bbbAppsUrl, confParams.username, confParams.role, - confParams.room, confParams.voicebridge, - confParams.record, confParams.externUserID, - confParams.internalUserID, confParams.muteOnStart, - confParams.lockSettings, confParams.guest, confParams.authToken); + var username: String = LiveMeeting.inst().me.name; + var role: String = LiveMeeting.inst().me.role; + var voiceConf: String = LiveMeeting.inst().meeting.voiceConf; + var recorded: Boolean = LiveMeeting.inst().meeting.recorded; + var intUserId: String = LiveMeeting.inst().me.id; + var extUserId: String = LiveMeeting.inst().me.externalId; + var muteOnStart: Boolean = LiveMeeting.inst().meeting.muteOnStart; + var guest: Boolean = LiveMeeting.inst().me.guest; + var authToken: String = LiveMeeting.inst().me.authToken; + var lockSettings: LockSettingsVO = LiveMeeting.inst().meetingStatus.lockSettings; + + _netConnection.connect(bbbAppsUrl, username, role, + intMeetingId, voiceConf, + recorded, extUserId, + intUserId, muteOnStart, + lockSettings.toMap(), guest, authToken); } catch(e:ArgumentError) { // Invalid parameters. 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 c978efddfe..cc782f0524 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as @@ -29,19 +29,20 @@ package org.bigbluebutton.main.model.users import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.events.LockControlEvent; import org.bigbluebutton.core.events.VoiceConfEvent; import org.bigbluebutton.core.managers.ConnectionManager; - import org.bigbluebutton.core.managers.UserConfigManager; import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.core.model.Config; + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.core.model.MeBuilder; + import org.bigbluebutton.core.model.MeetingBuilder; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.main.events.BreakoutRoomEvent; import org.bigbluebutton.main.events.LogoutEvent; import org.bigbluebutton.main.events.ResponseModeratorEvent; import org.bigbluebutton.main.events.SuccessfulLoginEvent; import org.bigbluebutton.main.events.UserServicesEvent; - import org.bigbluebutton.main.model.ConferenceParameters; import org.bigbluebutton.main.model.options.ApplicationOptions; import org.bigbluebutton.main.model.options.MeetingOptions; import org.bigbluebutton.main.model.users.events.BroadcastStartedEvent; @@ -59,7 +60,6 @@ package org.bigbluebutton.main.model.users private static const LOGGER:ILogger = getClassLogger(UserService); private var joinService:JoinService; - private var _conferenceParameters:ConferenceParameters; private var applicationURI:String; private var hostURI:String; private var connection:NetConnection; @@ -82,12 +82,11 @@ package org.bigbluebutton.main.model.users sender.queryForRecordingStatus(); sender.queryForGuestPolicy(); - if (!_conferenceParameters.isBreakout) { - sender.queryForBreakoutRooms(_conferenceParameters.meetingID); + if (!LiveMeeting.inst().meeting.isBreakout) { + sender.queryForBreakoutRooms(LiveMeeting.inst().meeting.internalId); } var loadCommand:SuccessfulLoginEvent = new SuccessfulLoginEvent(SuccessfulLoginEvent.USER_LOGGED_IN); - loadCommand.conferenceParameters = _conferenceParameters; dispatcher.dispatchEvent(loadCommand); } @@ -98,64 +97,47 @@ package org.bigbluebutton.main.model.users joinService.load(applicationOptions.host); } - private function joinListener(success:Boolean, result:Object):void { - if (success) { - var config:Config = BBB.getConfigManager().config; - - UserManager.getInstance().getConference().setMyName(result.username); - UserManager.getInstance().getConference().setMyRole(result.role); - UserManager.getInstance().getConference().setMyRoom(result.room); - UserManager.getInstance().getConference().setGuest(result.guest); - UserManager.getInstance().getConference().setMyAuthToken(result.authToken); - UserManager.getInstance().getConference().setMyCustomData(result.customdata); - UserManager.getInstance().getConference().setDefaultLayout(result.defaultLayout); - - UserManager.getInstance().getConference().setMyUserid(result.internalUserId); - - UserManager.getInstance().getConference().externalMeetingID = result.externMeetingID; - UserManager.getInstance().getConference().isBreakout = result.isBreakout; - UserManager.getInstance().getConference().meetingName = result.conferenceName; - UserManager.getInstance().getConference().internalMeetingID = result.room; - UserManager.getInstance().getConference().externalUserID = result.externUserID; - UserManager.getInstance().getConference().avatarURL = result.avatarURL; - UserManager.getInstance().getConference().voiceBridge = result.voicebridge; - UserManager.getInstance().getConference().dialNumber = result.dialnumber; - UserManager.getInstance().getConference().record = (result.record.toUpperCase() == "TRUE"); + private function joinListener(success:Boolean, result: EnterApiResponse):void { + if (success) { + var meetingOptions : MeetingOptions = Options.getOptions(MeetingOptions) as MeetingOptions; + + LiveMeeting.inst().meetingStatus.lockSettings = UserManager.getInstance().getConference().getLockSettings(); + LiveMeeting.inst().me.id = result.intUserId + LiveMeeting.inst().me.name = result.username; + LiveMeeting.inst().me.externalId = result.extUserId; + LiveMeeting.inst().me.authToken = result.authToken; + LiveMeeting.inst().me.layout = result.defaultLayout; + LiveMeeting.inst().me.logoutURL = result.logoutUrl; + LiveMeeting.inst().me.role = result.role; + LiveMeeting.inst().me.welcome = result.welcome; + LiveMeeting.inst().me.avatarURL = result.avatarURL; + LiveMeeting.inst().me.dialNumber = result.dialnumber; + LiveMeeting.inst().me.guest = result.guest; + LiveMeeting.inst().me.authed = result.authed; + LiveMeeting.inst().me.customData = result.customdata; + + LiveMeeting.inst().meeting.name = result.meetingName; + LiveMeeting.inst().meeting.internalId = result.intMeetingId; + LiveMeeting.inst().meeting.externalId = result.extMeetingId; + LiveMeeting.inst().meeting.isBreakout = result.isBreakout; + LiveMeeting.inst().meeting.defaultAvatarUrl = result.avatarURL; + LiveMeeting.inst().meeting.voiceConf = result.voiceConf; + LiveMeeting.inst().meeting.dialNumber = result.dialnumber; + LiveMeeting.inst().meeting.recorded = result.record; + LiveMeeting.inst().meeting.defaultLayout = result.defaultLayout; + LiveMeeting.inst().meeting.welcomeMessage = result.welcome; + LiveMeeting.inst().meeting.modOnlyMessage = result.modOnlyMessage; + LiveMeeting.inst().meeting.allowStartStopRecording = result.allowStartStopRecording; + LiveMeeting.inst().meeting.webcamsOnlyForModerator = result.webcamsOnlyForModerator; + LiveMeeting.inst().meeting.metadata = result.metadata; + LiveMeeting.inst().meeting.muteOnStart = meetingOptions.muteOnStart; - _conferenceParameters = new ConferenceParameters(); - _conferenceParameters.meetingName = result.conferenceName; - _conferenceParameters.externMeetingID = result.externMeetingID; - _conferenceParameters.isBreakout = result.isBreakout; - _conferenceParameters.conference = result.conference; - _conferenceParameters.username = result.username; - _conferenceParameters.guest = (result.guest); - _conferenceParameters.role = result.role; - _conferenceParameters.room = result.room; - _conferenceParameters.authToken = result.authToken; - _conferenceParameters.webvoiceconf = result.webvoiceconf; - _conferenceParameters.voicebridge = result.voicebridge; - _conferenceParameters.welcome = result.welcome; - _conferenceParameters.meetingID = result.meetingID; - _conferenceParameters.externUserID = result.externUserID; - _conferenceParameters.internalUserID = result.internalUserId; - _conferenceParameters.logoutUrl = processLogoutUrl(result); - _conferenceParameters.record = (result.record != "false"); - - var meetingOptions : MeetingOptions = Options.getOptions(MeetingOptions) as MeetingOptions; - - _conferenceParameters.muteOnStart = meetingOptions.muteOnStart; - _conferenceParameters.lockSettings = UserManager.getInstance().getConference().getLockSettings().toMap(); // assign the meeting name to the document title - ExternalInterface.call("setTitle", _conferenceParameters.meetingName); + ExternalInterface.call("setTitle", result.meetingName); - /** - * Temporarily store the parameters in global BBB so we get easy access to it. - */ - var ucm:UserConfigManager = BBB.initUserConfigManager(); - ucm.setConferenceParameters(_conferenceParameters); var e:ConferenceCreatedEvent = new ConferenceCreatedEvent(ConferenceCreatedEvent.CONFERENCE_CREATED_EVENT); e.conference = UserManager.getInstance().getConference(); dispatcher.dispatchEvent(e); @@ -164,21 +146,7 @@ package org.bigbluebutton.main.model.users } } - private function processLogoutUrl(confInfo:Object):String { - var logoutUrl:String = confInfo.logoutUrl; - var rules:Object = { - "%%FULLNAME%%": confInfo.username, - "%%CONFNAME%%": confInfo.conferenceName, - "%%DIALNUM%%": confInfo.dialnumber, - "%%CONFNUM%%": confInfo.voicebridge - } - for (var attr:String in rules) { - logoutUrl = logoutUrl.replace(new RegExp(attr, "g"), rules[attr]); - } - - return logoutUrl; - } private function connect():void{ _connectionManager = BBB.initConnectionManager(); @@ -187,7 +155,7 @@ package org.bigbluebutton.main.model.users public function logoutEndMeeting():void{ if (this.isModerator()) { - var myUserId: String = UserManager.getInstance().getConference().getMyUserId(); + var myUserId: String = UsersUtil.getMyUserID(); sender.logoutEndMeeting(myUserId); } } @@ -210,15 +178,12 @@ package org.bigbluebutton.main.model.users public function changeRecordingStatus(e:BBBEvent):void { if (this.isModerator() && !e.payload.remote) { - var myUserId:String = UserManager.getInstance().getConference().getMyUserId(); + var myUserId:String = UsersUtil.getMyUserID(); sender.changeRecordingStatus(myUserId, e.payload.recording); } } public function userLoggedIn(e:UsersConnectionEvent):void { - UserManager.getInstance().getConference().setMyUserid(e.userid); - _conferenceParameters.userid = e.userid; - var waitingForAcceptance:Boolean = true; if (UserManager.getInstance().getConference().hasUser(e.userid)) { LOGGER.debug("userLoggedIn - conference has this user"); @@ -245,7 +210,7 @@ package org.bigbluebutton.main.model.users } public function isModerator():Boolean { - return UserManager.getInstance().getConference().amIModerator(); + return UsersUtil.amIModerator(); } public function get participants():ArrayCollection { @@ -262,11 +227,11 @@ package org.bigbluebutton.main.model.users public function emojiStatus(e:EmojiStatusEvent):void { // If the userId is not set in the event then the event has been dispatched for the current user - sender.emojiStatus(e.userId != "" ? e.userId : UserManager.getInstance().getConference().getMyUserId(), e.status); + sender.emojiStatus(e.userId != "" ? e.userId : UsersUtil.getMyUserID(), e.status); } public function createBreakoutRooms(e:BreakoutRoomEvent):void{ - sender.createBreakoutRooms(_conferenceParameters.meetingID, e.rooms, e.durationInMinutes, e.record); + sender.createBreakoutRooms(LiveMeeting.inst().meeting.internalId, e.rooms, e.durationInMinutes, e.record); } public function responseToGuest(e:ResponseModeratorEvent):void { @@ -274,20 +239,21 @@ package org.bigbluebutton.main.model.users } public function requestBreakoutJoinUrl(e:BreakoutRoomEvent):void{ - sender.requestBreakoutJoinUrl(_conferenceParameters.meetingID, e.breakoutMeetingId, e.userId); + sender.requestBreakoutJoinUrl(LiveMeeting.inst().meeting.internalId, e.breakoutMeetingId, e.userId); } public function listenInOnBreakout(e:BreakoutRoomEvent):void { if (e.listen) { - sender.listenInOnBreakout(_conferenceParameters.meetingID, e.breakoutMeetingId, _conferenceParameters.userid); + sender.listenInOnBreakout(LiveMeeting.inst().meeting.internalId, + e.breakoutMeetingId, LiveMeeting.inst().me.id); } else { - sender.listenInOnBreakout(e.breakoutMeetingId, _conferenceParameters.meetingID, _conferenceParameters.userid); + sender.listenInOnBreakout(e.breakoutMeetingId, LiveMeeting.inst().meeting.internalId, LiveMeeting.inst().me.id); } UserManager.getInstance().getConference().setBreakoutRoomInListen(e.listen, e.breakoutMeetingId); } public function endAllBreakoutRooms(e:BreakoutRoomEvent):void { - sender.endAllBreakoutRooms(_conferenceParameters.meetingID); + sender.endAllBreakoutRooms(LiveMeeting.inst().meeting.internalId); } public function kickUser(e:KickUserEvent):void{ diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml old mode 100644 new mode 100755 index c254119396..7fbd85606c --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml @@ -30,20 +30,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - import org.bigbluebutton.core.Options; - import org.bigbluebutton.core.PopUpUtil; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.main.api.JSAPI; - import org.bigbluebutton.main.model.users.Conference; - import org.bigbluebutton.modules.phone.models.PhoneOptions; - import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent; - import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand; - import org.bigbluebutton.modules.phone.events.UseFlashModeCommand; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.PopUpUtil; + import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.main.api.JSAPI; + import org.bigbluebutton.main.model.users.Conference; + import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent; + import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand; + import org.bigbluebutton.modules.phone.events.UseFlashModeCommand; + import org.bigbluebutton.modules.phone.models.PhoneOptions; + import org.bigbluebutton.util.i18n.ResourceUtil; private static const LOGGER:ILogger = getClassLogger(AudioSelectionWindow); @@ -56,11 +57,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. browserInfo = JSAPI.getInstance().getBrowserInfo(); var conference:Conference = UserManager.getInstance().getConference(); + if (!phoneOptions.listenOnlyMode) btnListenOnly.enabled = false; if (phoneOptions.showPhoneOption) { - txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [conference.dialNumber, conference.voiceBridge]); + var dialNumber: String = LiveMeeting.inst().meeting.dialNumber; + var voiceConf: String = LiveMeeting.inst().meeting.voiceConf; + + txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [dialNumber, voiceConf]); } else { vrulePhone.visible = vrulePhone.includeInLayout = false; vboxPhone.visible = vboxPhone.includeInLayout = false; diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml old mode 100644 new mode 100755 index 5915c29a4c..39846fe125 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml @@ -120,7 +120,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. message = ResourceUtil.getInstance().getString('bbb.logout.usercommand'); break; } - if (message && UserManager.getInstance().getConference().isBreakout) { + if (message && UsersUtil.isBreakout()) { message += "\n" + ResourceUtil.getInstance().getString('bbb.logour.breakoutRoomClose'); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml index a8a777f5ed..b473e9cc53 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml @@ -768,7 +768,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function showlogoutWindow(reason:String):void { if (layoutOptions != null && layoutOptions.showLogoutWindow) { - if (UserManager.getInstance().getConference().iAskedToLogout) { + if (UsersUtil.iAskedToLogout()) { handleExitApplicationEvent(); return; } @@ -816,7 +816,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function handleExitApplicationEvent(e:ExitApplicationEvent = null):void { - if (!UserManager.getInstance().getConference().isBreakout) { + if (! UsersUtil.isBreakout()) { navigateToURL(new URLRequest(BBB.getLogoutURL()), "_self"); } else { ExternalInterface.call("window.close"); diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml old mode 100644 new mode 100755 index ffbe8bf02c..cf3a7e3c90 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml @@ -50,44 +50,45 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. </fx:Declarations> <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import mx.binding.utils.BindingUtils; - import mx.controls.Alert; - import mx.core.FlexGlobals; - import mx.core.IToolTip; - import mx.core.UIComponent; - import mx.events.CloseEvent; - import mx.events.ToolTipEvent; - import mx.managers.PopUpManager; - - import org.as3commons.lang.ArrayUtils; - import org.as3commons.lang.StringUtils; - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - import org.bigbluebutton.common.IBbbToolbarComponent; - import org.bigbluebutton.common.events.SettingsComponentEvent; - import org.bigbluebutton.common.events.ToolbarButtonEvent; - import org.bigbluebutton.core.BBB; - import org.bigbluebutton.core.Options; - import org.bigbluebutton.core.UsersUtil; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.core.model.Config; - import org.bigbluebutton.main.events.BBBEvent; - import org.bigbluebutton.main.events.ConfigLoadedEvent; - import org.bigbluebutton.main.events.LogoutEvent; - import org.bigbluebutton.main.events.NetworkStatsEvent; - import org.bigbluebutton.main.events.SettingsEvent; - import org.bigbluebutton.main.events.ShortcutEvent; - import org.bigbluebutton.main.events.SuccessfulLoginEvent; - import org.bigbluebutton.main.model.NetworkStatsData; - import org.bigbluebutton.main.model.options.BrandingOptions; - import org.bigbluebutton.main.model.options.LayoutOptions; - import org.bigbluebutton.main.model.options.ShortcutKeysOptions; - import org.bigbluebutton.main.model.users.events.ChangeMyRole; - import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent; - import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import mx.binding.utils.BindingUtils; + import mx.controls.Alert; + import mx.core.FlexGlobals; + import mx.core.IToolTip; + import mx.core.UIComponent; + import mx.events.CloseEvent; + import mx.events.ToolTipEvent; + import mx.managers.PopUpManager; + + import org.as3commons.lang.ArrayUtils; + import org.as3commons.lang.StringUtils; + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.common.IBbbToolbarComponent; + import org.bigbluebutton.common.events.SettingsComponentEvent; + import org.bigbluebutton.common.events.ToolbarButtonEvent; + import org.bigbluebutton.core.BBB; + import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.model.Config; + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.main.events.BBBEvent; + import org.bigbluebutton.main.events.ConfigLoadedEvent; + import org.bigbluebutton.main.events.LogoutEvent; + import org.bigbluebutton.main.events.NetworkStatsEvent; + import org.bigbluebutton.main.events.SettingsEvent; + import org.bigbluebutton.main.events.ShortcutEvent; + import org.bigbluebutton.main.events.SuccessfulLoginEvent; + import org.bigbluebutton.main.model.NetworkStatsData; + import org.bigbluebutton.main.model.options.BrandingOptions; + import org.bigbluebutton.main.model.options.LayoutOptions; + import org.bigbluebutton.main.model.options.ShortcutKeysOptions; + import org.bigbluebutton.main.model.users.events.ChangeMyRole; + import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent; + import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; private static const LOGGER:ILogger = getClassLogger(MainToolbar); @@ -132,7 +133,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. timer.addEventListener(TimerEvent.TIMER, checkAccessiblity); timer.start(); - BindingUtils.bindSetter(refreshModeratorButtonsVisibility, UserManager.getInstance().getConference(), "record"); + BindingUtils.bindSetter(refreshModeratorButtonsVisibility, LiveMeeting.inst().meeting, "recorded"); } private function checkAccessiblity(e:TimerEvent):void { @@ -182,7 +183,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function retrieveMeetingName(e:ConferenceCreatedEvent):void { if (toolbarOptions.showMeetingName) { - var meetingTitle:String = BBB.initUserConfigManager().getMeetingTitle(); + var meetingTitle:String = LiveMeeting.inst().meeting.name; if (meetingTitle != null) { meetingNameLbl.text = meetingTitle; meetingNameLbl.toolTip = meetingTitle; @@ -286,7 +287,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function alertLogout(e:CloseEvent):void { // Check to see if the YES button was pressed. if (e.detail==Alert.YES) { - UserManager.getInstance().getConference().iAskedToLogout = true; + UsersUtil.setIAskedToLogout(true); /* * If doLogout() is called immediately there is a null exception in AlertAccImpl * line 185, but if we delay calling doLogout() until the next frame the Alert @@ -447,7 +448,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } if (toolbarOptions.showMeetingName) { - var meetingTitle:String = BBB.initUserConfigManager().getMeetingTitle(); + var meetingTitle:String = LiveMeeting.inst().meeting.name; if (meetingTitle != null) { meetingNameLbl.text += " " + meetingTitle; } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml index 71ea32187d..91a25f5c9f 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml @@ -81,7 +81,7 @@ $Id: $ private function handleUserTalking(e:CoreEvent):void { //rest rolledOver when the data changes because onRollOut wont be called if the row moves - if (UserManager.getInstance().getConference().amIThisUser(e.message.userID)) { + if (UsersUtil.isMe(e.message.userID)) { if (e.message.talking){ muteMeBtnImg.filters = [new GlowFilter(0x000000, 1, 6, 6, 2, BitmapFilterQuality.HIGH, false, false)]; } else { @@ -209,8 +209,8 @@ $Id: $ if (!allowMuteUnmute()) return; var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER); - e.userid = UserManager.getInstance().getConference().getMyUserId(); - e.mute = !UserManager.getInstance().getConference().isMyVoiceMuted(); + e.userid = UsersUtil.getMyUserID(); + e.mute = ! UsersUtil.isMyVoiceMuted(); dispatchEvent(e); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml old mode 100644 new mode 100755 index 09ff59d58f..f940041326 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml @@ -42,26 +42,26 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. </fx:Declarations> <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import flash.net.navigateToURL; - - import mx.controls.Alert; - import mx.events.CloseEvent; - import mx.managers.PopUpManager; - - import org.as3commons.logging.api.ILogger; - import org.as3commons.logging.api.getClassLogger; - import org.bigbluebutton.core.BBB; - import org.bigbluebutton.core.Options; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.core.model.MeetingModel; - import org.bigbluebutton.main.events.BBBEvent; - import org.bigbluebutton.main.model.options.LayoutOptions; - import org.bigbluebutton.main.model.users.events.ChangeMyRole; - import org.bigbluebutton.modules.phone.events.FlashJoinedVoiceConferenceEvent; - import org.bigbluebutton.modules.phone.events.WebRTCCallEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import flash.net.navigateToURL; + + import mx.controls.Alert; + import mx.events.CloseEvent; + import mx.managers.PopUpManager; + + import org.as3commons.logging.api.ILogger; + import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.core.BBB; + import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.main.events.BBBEvent; + import org.bigbluebutton.main.model.options.LayoutOptions; + import org.bigbluebutton.main.model.users.events.ChangeMyRole; + import org.bigbluebutton.modules.phone.events.FlashJoinedVoiceConferenceEvent; + import org.bigbluebutton.modules.phone.events.WebRTCCallEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; private static const LOGGER:ILogger = getClassLogger(RecordButton); @@ -147,8 +147,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. resourcesChanged(); - if (UserManager.getInstance().getConference().record) { - this.enabled = UserManager.getInstance().getConference().amIModerator() && MeetingModel.getInstance().meeting.allowStartStopRecording; + if (LiveMeeting.inst().meeting.recorded) { + this.enabled = UsersUtil.amIModerator() + && LiveMeeting.inst().meeting.allowStartStopRecording; } if (! this.enabled) { @@ -175,8 +176,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function showRecordingNotification():void { if (firstAudioJoin && this.visible && !this.selected && getLayoutOptions().showRecordingNotification - && UserManager.getInstance().getConference().amIModerator() - && MeetingModel.getInstance().meeting.allowStartStopRecording + && UsersUtil.amIModerator() + && LiveMeeting.inst().meeting.allowStartStopRecording && this.enabled) { var alert:Alert = Alert.show(ResourceUtil.getInstance().getString("bbb.mainToolbar.recordBtn..notification.message1") + "\n\n" + ResourceUtil.getInstance().getString("bbb.mainToolbar.recordBtn..notification.message2"), ResourceUtil.getInstance().getString("bbb.mainToolbar.recordBtn..notification.title"), Alert.OK, this); // we need to set transparency duration to avoid the blur effect when two alerts are displayed sequentially @@ -201,21 +202,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } private function onRecordButtonMouseOver(event:MouseEvent):void { - if (UserManager.getInstance().getConference().amIModerator() && UserManager.getInstance().getConference().record) { + if (UsersUtil.amIModerator() && LiveMeeting.inst().meeting.recorded) { this.styleName = this.selected? "recordButtonStyleStop": "recordButtonStyleStart"; } } private function onRecordButtonMouseOut(event:MouseEvent):void { - if (UserManager.getInstance().getConference().amIModerator() && UserManager.getInstance().getConference().record) { + if (UsersUtil.amIModerator() && LiveMeeting.inst().meeting.recorded) { this.styleName = this.selected? "recordButtonStyleStart": "recordButtonStyleNormal"; } } private function updateToolTip():void { - if (UserManager.getInstance().getConference().record) { - if (UserManager.getInstance().getConference().amIModerator()) { - if (MeetingModel.getInstance().meeting.allowStartStopRecording) { + if (LiveMeeting.inst().meeting.recorded) { + if (UsersUtil.amIModerator()) { + if (LiveMeeting.inst().meeting.allowStartStopRecording) { if (this.selected) { this.toolTip = ResourceUtil.getInstance().getString('bbb.mainToolbar.recordBtn.toolTip.stop'); } else { @@ -232,9 +233,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } } } else { - if (UserManager.getInstance().getConference().amIModerator()) { - if (MeetingModel.getInstance().meeting.isMetadata("wont-record-message")) { - this.toolTip = MeetingModel.getInstance().meeting.metadata["wont-record-message"]; + if (UsersUtil.amIModerator()) { + if (LiveMeeting.inst().meeting.metadata.hasOwnProperty("wont-record-message")) { + this.toolTip = LiveMeeting.inst().meeting.metadata["wont-record-message"]; } else { this.toolTip = ResourceUtil.getInstance().getString('bbb.mainToolbar.recordBtn.toolTip.wontRecord'); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as old mode 100644 new mode 100755 index 3ac2e98563..510bf6eea8 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as @@ -23,6 +23,7 @@ package org.bigbluebutton.modules.broadcast.managers import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.common.events.OpenWindowEvent; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.modules.broadcast.models.BroadcastOptions; @@ -77,7 +78,7 @@ package org.bigbluebutton.modules.broadcast.managers sendWhatIsTheCurrentStreamRequest(); - if (UserManager.getInstance().getConference().amIPresenter) { + if (UsersUtil.amIPresenter()) { handleSwitchToPresenterMode(); } else { handleSwitchToViewerMode(); @@ -113,7 +114,7 @@ package org.bigbluebutton.modules.broadcast.managers public function handleWhatIsTheCurrentStreamRequest(event:BBBEvent):void { LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamRequest {0}", [event.payload["requestedBy"]]); - var isPresenter:Boolean = UserManager.getInstance().getConference().amIPresenter; + var isPresenter:Boolean = UsersUtil.amIPresenter(); if (isPresenter && curStream != null) { LOGGER.debug("MessageSender:: sendWhatIsTheCurrentStreamReply [{0},{1}]", [event.payload["requestedBy"], curStream.getStreamId()]); broadcastService.sendWhatIsTheCurrentStreamReply(event.payload["requestedBy"], curStream.getStreamId()); @@ -122,8 +123,9 @@ package org.bigbluebutton.modules.broadcast.managers public function handleWhatIsTheCurrentStreamReply(event:BBBEvent):void { LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamReply [{0},{1}]",[event.payload["requestedBy"], event.payload["streamID"]]); - var amIRequester:Boolean = UserManager.getInstance().getConference().amIThisUser(event.payload["requestedBy"]); - LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamReply [my id={0}, requester={1}]", [UserManager.getInstance().getConference().getMyUserId(), event.payload["requestedBy"]]); + var amIRequester:Boolean = UsersUtil.isMe(event.payload["requestedBy"]); + LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamReply [my id={0}, requester={1}]", + [UsersUtil.getMyUserID(), event.payload["requestedBy"]]); if (amIRequester) { var streamId:String = event.payload["streamID"]; var info:Object = streams.getStreamNameAndUrl(streamId); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as old mode 100644 new mode 100755 index bedf4d072a..6e1c88bba8 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as @@ -21,6 +21,7 @@ package org.bigbluebutton.modules.broadcast.services import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.BBB; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.ConnectionManager; import org.bigbluebutton.core.managers.UserManager; @@ -65,7 +66,7 @@ package org.bigbluebutton.modules.broadcast.services public function sendWhatIsTheCurrentStreamRequest():void { var message:Object = new Object(); message["messageID"] = "BroadcastWhatIsTheCurrentStreamRequest"; - message["requestedBy"] = UserManager.getInstance().getConference().getMyUserId(); + message["requestedBy"] = UsersUtil.getMyUserID(); var _nc:ConnectionManager = BBB.initConnectionManager(); _nc.sendMessage("bigbluebutton.sendMessage", diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml index 9ee3d3dccf..a233d3a9d1 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml @@ -36,25 +36,26 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import mx.binding.utils.BindingUtils; - import mx.binding.utils.ChangeWatcher; - import mx.collections.ArrayCollection; - import mx.controls.Button; - - import flexlib.controls.tabBarClasses.SuperTab; - - import org.bigbluebutton.common.events.LocaleChangeEvent; - import org.bigbluebutton.core.Options; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.main.events.ShortcutEvent; - import org.bigbluebutton.main.views.MainCanvas; - import org.bigbluebutton.modules.caption.events.RequestTranscriptsEvent; - import org.bigbluebutton.modules.caption.model.CaptionOptions; - import org.bigbluebutton.modules.caption.model.Transcript; - import org.bigbluebutton.modules.caption.model.Transcripts; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import mx.binding.utils.BindingUtils; + import mx.binding.utils.ChangeWatcher; + import mx.collections.ArrayCollection; + import mx.controls.Button; + + import flexlib.controls.tabBarClasses.SuperTab; + + import org.bigbluebutton.common.events.LocaleChangeEvent; + import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.main.events.ShortcutEvent; + import org.bigbluebutton.main.views.MainCanvas; + import org.bigbluebutton.modules.caption.events.RequestTranscriptsEvent; + import org.bigbluebutton.modules.caption.model.CaptionOptions; + import org.bigbluebutton.modules.caption.model.Transcript; + import org.bigbluebutton.modules.caption.model.Transcripts; + import org.bigbluebutton.util.i18n.ResourceUtil; [Bindable] private var transcriptsCollection:ArrayCollection; @@ -107,7 +108,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. private function setTranscripts(t:Transcripts):void { transcriptsObject = t; - if (UserManager.getInstance().getConference().amIModerator()) { + if (UsersUtil.amIModerator()) { transcriptsCollection = new ArrayCollection(); var locales:Array = ResourceUtil.getInstance().locales; @@ -188,7 +189,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. //unclaimed text //ownerNameOutputLabel.text = "Owner - " + "None"; textTab.label += ResourceUtil.getInstance().getString('bbb.caption.transcript.noowner'); - } else if (ownerId == UserManager.getInstance().getConference().getMyUserId()) { + } else if (ownerId == UsersUtil.getMyUserID()) { //release text textTab.label += ResourceUtil.getInstance().getString('bbb.caption.transcript.youowner'); } else { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as index b60470ff1b..87d49638cc 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as @@ -38,13 +38,12 @@ package org.bigbluebutton.modules.caption.views { import mx.events.FlexEvent; import org.bigbluebutton.common.events.LocaleChangeEvent; - import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.modules.caption.events.SendEditCaptionHistoryEvent; import org.bigbluebutton.modules.caption.events.SendUpdateCaptionOwnerEvent; import org.bigbluebutton.modules.caption.model.CaptionOptions; import org.bigbluebutton.modules.caption.model.Transcript; import org.bigbluebutton.util.i18n.ResourceUtil; - import org.osmf.events.TimeEvent; public class TextTab extends VBox { @@ -179,7 +178,7 @@ package org.bigbluebutton.modules.caption.views { //check focus targets before switching visibility var focusedTextArea:TextArea2 = null; - if (ownerID == UserManager.getInstance().getConference().getMyUserId()) { + if (ownerID == UsersUtil.getMyUserID()) { claimButton.visible = claimButton.includeInLayout = false; if (focusManager && focusManager.getFocus() == outputArea) { @@ -192,7 +191,7 @@ package org.bigbluebutton.modules.caption.views { inputArea.getInternalTextField().type = TextFieldType.INPUT; inputArea.text = currentTranscript.transcript; } else { - claimButton.visible = claimButton.includeInLayout = UserManager.getInstance().getConference().amIModerator(); + claimButton.visible = claimButton.includeInLayout = UsersUtil.amIModerator(); if (focusManager && focusManager.getFocus() == outputArea) { delayedFocusTextArea(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as index 72c4d26424..e886d5f7dc 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as @@ -25,7 +25,7 @@ package org.bigbluebutton.modules.chat.services import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.BBB; import org.bigbluebutton.core.UsersUtil; - import org.bigbluebutton.core.model.MeetingModel; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.modules.chat.ChatConstants; import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent; import org.bigbluebutton.modules.chat.vo.ChatMessageVO; @@ -95,7 +95,7 @@ package org.bigbluebutton.modules.chat.services public function sendWelcomeMessage():void { LOGGER.debug("sendWelcomeMessage"); - var welcome:String = BBB.initUserConfigManager().getWelcomeMessage(); + var welcome:String = LiveMeeting.inst().me.welcome; if (welcome != "") { var welcomeMsg:ChatMessageVO = new ChatMessageVO(); welcomeMsg.chatType = ChatConstants.PUBLIC_CHAT; @@ -118,7 +118,7 @@ package org.bigbluebutton.modules.chat.services } if (UsersUtil.amIModerator()) { - if (MeetingModel.getInstance().modOnlyMessage != null) { + if (LiveMeeting.inst().meeting.modOnlyMessage != null) { var moderatorOnlyMsg:ChatMessageVO = new ChatMessageVO(); moderatorOnlyMsg.chatType = ChatConstants.PUBLIC_CHAT; moderatorOnlyMsg.fromUserID = SPACE; @@ -128,7 +128,7 @@ package org.bigbluebutton.modules.chat.services moderatorOnlyMsg.fromTimezoneOffset = new Date().getTimezoneOffset(); moderatorOnlyMsg.toUserID = SPACE; moderatorOnlyMsg.toUsername = SPACE; - moderatorOnlyMsg.message = MeetingModel.getInstance().modOnlyMessage; + moderatorOnlyMsg.message = LiveMeeting.inst().meeting.modOnlyMessage; var moderatorOnlyMsgEvent:PublicChatMessageEvent = new PublicChatMessageEvent(PublicChatMessageEvent.PUBLIC_CHAT_MESSAGE_EVENT); moderatorOnlyMsgEvent.message = moderatorOnlyMsg; 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 fb800e273b..0ae75755dd 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml @@ -181,7 +181,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. chatMessagesList.accessibilityProperties.description = ResourceUtil.getInstance().getString('bbb.accessibility.chat.initialDescription'); - if (publicChat && UserManager.getInstance().getConference().isBreakout){ + if (publicChat && UsersUtil.isBreakout()){ var timerListener : Listener = new Listener(); timerListener.type = BreakoutRoomEvent.UPDATE_REMAINING_TIME_BREAKOUT; timerListener.method = handleRemaininTimeBreakout; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as index c2485cc8f2..f6facc64e2 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as @@ -82,9 +82,9 @@ package org.bigbluebutton.modules.layout.model { var hasModeratorLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.MODERATOR); var hasPresenterLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.PRESENTER); - if (UserManager.getInstance().getConference().amIPresenter && hasPresenterLayout) { + if (UsersUtil.amIPresenter() && hasPresenterLayout) { return _layoutsPerRole[Role.PRESENTER]; - } else if (UserManager.getInstance().getConference().amIModerator() && hasModeratorLayout) { + } else if (UsersUtil.amIModerator() && hasModeratorLayout) { return _layoutsPerRole[Role.MODERATOR]; } else if (hasViewerLayout) { return _layoutsPerRole[Role.VIEWER]; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml index 4a2a5c6398..2910ecaaad 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml @@ -26,19 +26,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. toolTip="{ResourceUtil.getInstance().getString('bbb.layout.addButton.toolTip')}" styleName="addLayoutButtonStyle" click="onClick(event)" - enabled="{UserManager.getInstance().getConference().amIModerator()}"> + enabled="{UsersUtil.amIModerator()}"> <fx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; - + import org.bigbluebutton.core.UsersUtil; import flash.events.Event; import mx.core.FlexGlobals; import mx.core.IFlexDisplayObject; import mx.managers.PopUpManager; - import org.bigbluebutton.common.Images; - import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.util.i18n.ResourceUtil; private var _dispatcher:Dispatcher = new Dispatcher(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml old mode 100644 new mode 100755 index c1cd2b3de3..396174aba2 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml @@ -29,16 +29,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.modules.layout.events.LayoutEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.modules.layout.events.LayoutEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; private var _dispatcher:Dispatcher = new Dispatcher(); private function init():void { - refreshRole(UserManager.getInstance().getConference().amIModerator()); + refreshRole(UsersUtil.amIModerator()); } private function onClick(e:Event):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml index 61f6f52949..2b77167950 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml @@ -26,13 +26,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. toolTip="{ResourceUtil.getInstance().getString('bbb.layout.loadButton.toolTip')}" styleName="loadLayoutButtonStyle" click="onClick(event)" - enabled="{UserManager.getInstance().getConference().amIModerator()}"> + enabled="{UsersUtil.amIModerator()}"> <fx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; - - import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.modules.layout.events.LayoutEvent; import org.bigbluebutton.util.i18n.ResourceUtil; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml index 0c51695404..1109b80da5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml @@ -26,15 +26,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. toolTip="{ResourceUtil.getInstance().getString('bbb.layout.saveButton.toolTip')}" styleName="saveLayoutButtonStyle" click="onClick(event)" - enabled="{UserManager.getInstance().getConference().amIModerator()}"> + enabled="{UsersUtil.amIModerator()}"> <fx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; - - import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.modules.layout.events.LayoutEvent; import org.bigbluebutton.util.i18n.ResourceUtil; + import org.bigbluebutton.core.UsersUtil; private var _dispatcher:Dispatcher = new Dispatcher(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml old mode 100644 new mode 100755 index fdaf43dd64..63eaaa21ef --- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml @@ -28,12 +28,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - import flexlib.mdi.containers.MDICanvas; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.main.views.MainToolbar; - import org.bigbluebutton.modules.layout.events.ViewInitializedEvent; - import org.bigbluebutton.modules.layout.model.WindowLayout; + import com.asfusion.mate.events.Dispatcher; + import flexlib.mdi.containers.MDICanvas; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.main.views.MainToolbar; + import org.bigbluebutton.modules.layout.events.ViewInitializedEvent; + import org.bigbluebutton.modules.layout.model.WindowLayout; private var _dispatcher:Dispatcher = new Dispatcher(); [Bindable] private var _enableEdit:Boolean = false; @@ -46,7 +46,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. } public function set enableEdit(arg:Boolean):void { - _enableEdit = arg && UserManager.getInstance().getConference().amIModerator(); + _enableEdit = arg && UsersUtil.amIModerator(); } public function refreshRole(amIModerator:Boolean):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml index a8039853ff..2d1392662c 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml @@ -201,7 +201,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. slideModel.parentChange(parentWidth, parentHeight); - if (UserManager.getInstance().getConference().amIPresenter) { + if (UsersUtil.amIPresenter()) { slideModel.adjustSlideAfterParentResized(); slideModel.onMove(0, 0); // fake a move to reset some values slideModel.displayPresenterView(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as index d8439c44ad..bc215154db 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as @@ -123,8 +123,8 @@ package org.bigbluebutton.modules.screenshare.managers }; ExternalInterface.addCallback("onFail", onFail); - var voiceBridge:String = UserManager.getInstance().getConference().voiceBridge; - var myName:String = UserManager.getInstance().getConference().getMyName(); + var voiceBridge:String = UsersUtil.getVoiceBridge(); + var myName:String = UsersUtil.getMyUsername(); ExternalInterface.call( 'vertoShareScreen', @@ -239,7 +239,7 @@ package org.bigbluebutton.modules.screenshare.managers public function handleStreamStartEvent(e:WebRTCViewStreamEvent):void{ if (sharing) return; //TODO must uncomment this for the non-webrtc desktop share - var isPresenter:Boolean = UserManager.getInstance().getConference().amIPresenter; + var isPresenter:Boolean = UsersUtil.amIPresenter(); LOGGER.debug("Received start viewing command when isPresenter==[{0}]",[isPresenter]); if(isPresenter && usingWebRTC) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as index 8d8e6d01da..75672613cf 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as @@ -18,15 +18,14 @@ */ package org.bigbluebutton.modules.sharednotes.managers { - import com.asfusion.mate.events.Dispatcher; import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.modules.sharednotes.events.SendPatchEvent; import org.bigbluebutton.modules.sharednotes.events.SharedNotesEvent; import org.bigbluebutton.modules.sharednotes.services.MessageReceiver; import org.bigbluebutton.modules.sharednotes.services.MessageSender; - import org.bigbluebutton.core.managers.UserManager; public class SharedNotesManager { private static const LOGGER:ILogger = getClassLogger(SharedNotesManager); @@ -42,7 +41,7 @@ package org.bigbluebutton.modules.sharednotes.managers { } public function patchDocument(e:SendPatchEvent):void { - sender.patchDocument(e.noteId, UserManager.getInstance().getConference().getMyUserId(), e.patch, e.operation); + sender.patchDocument(e.noteId, UsersUtil.getMyUserID(), e.patch, e.operation); } public function getCurrentDocument():void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as index 21e6a36d8d..85e925c372 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as @@ -31,7 +31,7 @@ package org.bigbluebutton.modules.users.services import org.bigbluebutton.core.events.CoreEvent; import org.bigbluebutton.core.events.VoiceConfEvent; import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.core.model.MeetingModel; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.core.services.UsersService; import org.bigbluebutton.core.vo.LockSettingsVO; import org.bigbluebutton.main.events.BBBEvent; @@ -242,7 +242,7 @@ package org.bigbluebutton.modules.users.services } private function sendRecordingStatusUpdate(recording:Boolean):void { - MeetingModel.getInstance().recording = recording; + LiveMeeting.inst().meetingStatus.isRecording = recording; var e:BBBEvent = new BBBEvent(BBBEvent.CHANGE_RECORDING_STATUS); e.payload.remote = true; @@ -261,14 +261,14 @@ package org.bigbluebutton.modules.users.services dispatcher.dispatchEvent(e); // If the user was the presenter he's reconnecting and must become viewer - if (UserManager.getInstance().getConference().amIPresenter) { + if (UsersUtil.amIPresenter()) { sendSwitchedPresenterEvent(false, UsersUtil.getPresenterUserID()); - UserManager.getInstance().getConference().amIPresenter = false; + UsersUtil.setMeAsPresenter(false); var viewerEvent:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_VIEWER_MODE); dispatcher.dispatchEvent(viewerEvent); } - var myRole:String = UserManager.getInstance().getConference().whatsMyRole(); + var myRole:String = UsersUtil.getMyRole(); var role:String = map.user.role; // If a (pro/de)moted user refresh his browser he must reassing his role for permissions if (role != myRole) { @@ -282,7 +282,7 @@ package org.bigbluebutton.modules.users.services private function handleMeetingMuted(msg:Object):void { var map:Object = JSON.parse(msg.msg); if (map.hasOwnProperty("meetingMuted")) { - MeetingModel.getInstance().meetingMuted = map.meetingMuted; + LiveMeeting.inst().meetingStatus.isMeetingMuted = map.meetingMuted; dispatcher.dispatchEvent(new MeetingMutedEvent()); } } @@ -294,9 +294,9 @@ package org.bigbluebutton.modules.users.services var lockSettings:LockSettingsVO = new LockSettingsVO(perm.disableCam, perm.disableMic, perm.disablePrivateChat, perm.disablePublicChat, perm.lockedLayout, perm.lockOnJoin, perm.lockOnJoinConfigurable); UserManager.getInstance().getConference().setLockSettings(lockSettings); - MeetingModel.getInstance().meetingMuted = map.meetingMuted; + LiveMeeting.inst().meetingStatus.isMeetingMuted = map.meetingMuted; - UserManager.getInstance().getConference().applyLockSettings(); + UsersUtil.applyLockSettings(); } private function handleInactivityWarning(msg:Object):void { @@ -398,7 +398,7 @@ package org.bigbluebutton.modules.users.services * Let's store the voice userid so we can do push to talk. */ if (l != null) { - if (_conference.getMyUserId() == l.userID) { + if (UsersUtil.getMyUserID() == l.userID) { _conference.muteMyVoice(false); _conference.setMyVoiceJoined(false); } @@ -531,7 +531,7 @@ package org.bigbluebutton.modules.users.services processUserVoice(user); } - UserManager.getInstance().getConference().applyLockSettings(); + UsersUtil.applyLockSettings(); } } @@ -566,10 +566,11 @@ package org.bigbluebutton.modules.users.services var meeting:Conference = UserManager.getInstance().getConference(); - if (meeting.amIThisUser(newPresenterID)) { + if (UsersUtil.isMe(newPresenterID)) { sendSwitchedPresenterEvent(true, newPresenterID); - meeting.amIPresenter = true; + UsersUtil.setMeAsPresenter(true); + var e:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_PRESENTER_MODE); e.userID = newPresenterID; e.presenterName = newPresenterName; @@ -580,7 +581,7 @@ package org.bigbluebutton.modules.users.services } else { sendSwitchedPresenterEvent(false, newPresenterID); - meeting.amIPresenter = false; + UsersUtil.setMeAsPresenter(false); var viewerEvent:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_VIEWER_MODE); viewerEvent.userID = newPresenterID; viewerEvent.presenterName = newPresenterName; @@ -658,7 +659,7 @@ package org.bigbluebutton.modules.users.services user.listenOnly = joinedUser.listenOnly; user.userLocked = joinedUser.locked; user.avatarURL = joinedUser.avatarURL; - user.me = (user.userID == UserManager.getInstance().getConference().getMyUserId()); + user.me = (user.userID == UsersUtil.getMyUserID()); UserManager.getInstance().getConference().addUser(user); @@ -793,7 +794,7 @@ package org.bigbluebutton.modules.users.services var map:Object = JSON.parse(msg.msg); LOGGER.debug("*** received participant role change [" + map.userID + "," + map.role + "]"); UserManager.getInstance().getConference().newUserRole(map.userID, map.role); - if(UserManager.getInstance().getConference().amIThisUser(map.userID)) { + if(UsersUtil.isMe(map.userID)) { UserManager.getInstance().getConference().setMyRole(map.role); var e:ChangeMyRole = new ChangeMyRole(map.role); dispatcher.dispatchEvent(e); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml old mode 100644 new mode 100755 index 7148f74a81..c934b4ec66 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml @@ -32,16 +32,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import mx.collections.ArrayCollection; - import mx.controls.Alert; - - import org.bigbluebutton.core.PopUpUtil; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.main.events.BreakoutRoomEvent; - import org.bigbluebutton.main.model.users.BBBUser; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import mx.collections.ArrayCollection; + import mx.controls.Alert; + + import org.bigbluebutton.core.PopUpUtil; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.main.events.BreakoutRoomEvent; + import org.bigbluebutton.main.model.users.BBBUser; + import org.bigbluebutton.util.i18n.ResourceUtil; [Bindable] private var roomsProvider:Array; @@ -69,7 +70,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. var event:BreakoutRoomEvent = new BreakoutRoomEvent(BreakoutRoomEvent.CREATE_BREAKOUT_ROOMS); // event.meetingId is filled in the event handler for BreakoutRoomEvent in UserService class event.rooms = new Array(); - var parentMeetingName:String = UserManager.getInstance().getConference().meetingName; + var parentMeetingName:String = UsersUtil.getMeetingName(); var roomResource:String = ResourceUtil.getInstance().getString('bbb.users.breakout.room'); for (var i:int = 0; i < (roomsCombo.selectedIndex + 2); i++) { var users:Array = BreakoutList(roomsContainer.getChildAt(i)).users.source; @@ -127,7 +128,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. var me:BBBUser; // Copy users to avoid removing the references from the original ArrayCollection for (var l:int = 0; l < originalUsers.length; l++) { - if (!UserManager.getInstance().getConference().amIThisUser(BBBUser(originalUsers[l]).userID)) { + if (! UsersUtil.isMe((BBBUser(originalUsers[l]).userID))) { users.addItem(BBBUser.copy(originalUsers[l])); } // Put the current user to the unassigned box because he is the moderator else { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml old mode 100644 new mode 100755 index 3f5d331a45..78b3423579 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml @@ -79,7 +79,7 @@ private var myMenu:Menu = null; private function onCreationComplete():void{ - refreshRole(UserManager.getInstance().getConference().amIModerator()); + refreshRole(UsersUtil.amIModerator()); this.addEventListener(FlexEvent.DATA_CHANGE, dataChangeHandler); @@ -182,7 +182,7 @@ var ls:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings(); if (data != null) { - settingsBtn.visible = rolledOver && !data.me && !UserManager.getInstance().getConference().isBreakout; + settingsBtn.visible = rolledOver && !data.me && !UsersUtil.isBreakout(); if (!data.voiceJoined) { if (data.listenOnly) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as old mode 100644 new mode 100755 index 6306fa0b82..ed25885c3a --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as @@ -19,6 +19,7 @@ package org.bigbluebutton.modules.users.views { import com.asfusion.mate.events.Dispatcher; + import mx.collections.ArrayCollection; import mx.containers.VBox; import mx.controls.Button; @@ -27,11 +28,13 @@ package org.bigbluebutton.modules.users.views { import mx.events.FlexMouseEvent; import mx.events.MenuEvent; import mx.managers.PopUpManager; + import org.bigbluebutton.common.Images; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.main.model.users.events.EmojiStatusEvent; import org.bigbluebutton.main.views.WellPositionedMenu; - import org.bigbluebutton.util.i18n.ResourceUtil; + import org.bigbluebutton.util.i18n.ResourceUtil; public class MoodMenu extends VBox { private const MOODS:Array = [ @@ -78,7 +81,7 @@ package org.bigbluebutton.modules.users.views { private function drawMoodMenu():void { var moods:ArrayCollection = new ArrayCollection(); for each (var mood:String in MOODS) { - if (mood == "clear" && UserManager.getInstance().getConference().myEmojiStatus == "none") { + if (mood == "clear" && UsersUtil.myEmoji() == "none") { continue; } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml old mode 100644 new mode 100755 index 920f6873e0..bf0a724042 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml @@ -7,15 +7,16 @@ creationComplete="onCreationCompleteHandler(event)"> <fx:Script> <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import mx.events.FlexEvent; - - import org.bigbluebutton.common.Images; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.main.events.BreakoutRoomEvent; - import org.bigbluebutton.main.model.users.BreakoutRoom; - import org.bigbluebutton.util.i18n.ResourceUtil; + import com.asfusion.mate.events.Dispatcher; + + import mx.events.FlexEvent; + + import org.bigbluebutton.common.Images; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.main.events.BreakoutRoomEvent; + import org.bigbluebutton.main.model.users.BreakoutRoom; + import org.bigbluebutton.util.i18n.ResourceUtil; private var globalDispatch:Dispatcher = new Dispatcher(); @@ -26,7 +27,7 @@ private var moderator:Boolean = false; protected function onCreationCompleteHandler(event:FlexEvent):void { - moderator = UserManager.getInstance().getConference().amIModerator(); + moderator = UsersUtil.amIModerator(); this.addEventListener(FlexEvent.DATA_CHANGE, dataChangeHandler); } @@ -51,7 +52,7 @@ protected function requestBreakoutJoinUrl(event:MouseEvent):void { var e:BreakoutRoomEvent = new BreakoutRoomEvent(BreakoutRoomEvent.REQUEST_BREAKOUT_JOIN_URL); e.breakoutMeetingId = data.externalMeetingId as String; - e.userId = UserManager.getInstance().getConference().getMyUserId(); + e.userId = UsersUtil.getMyUserID(); globalDispatch.dispatchEvent(e); } ]]> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml index 1c37209d7b..639df7395d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml @@ -38,26 +38,25 @@ <fx:Script> <![CDATA[ - import mx.binding.utils.BindingUtils; - import mx.binding.utils.ChangeWatcher; - import mx.events.FlexEvent; - - import org.bigbluebutton.common.Images; - import org.bigbluebutton.common.Role; - import org.bigbluebutton.common.events.LocaleChangeEvent; - import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.main.model.users.events.ChangeMyRole; - import org.bigbluebutton.main.model.users.events.EmojiStatusEvent; - import org.bigbluebutton.main.model.users.events.RoleChangeEvent; - import org.bigbluebutton.modules.users.events.UsersRollEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; + import mx.binding.utils.BindingUtils; + import mx.binding.utils.ChangeWatcher; + import mx.events.FlexEvent; + import org.bigbluebutton.common.Images; + import org.bigbluebutton.common.Role; + import org.bigbluebutton.common.events.LocaleChangeEvent; + import org.bigbluebutton.core.UsersUtil; + import org.bigbluebutton.main.model.users.events.ChangeMyRole; + import org.bigbluebutton.main.model.users.events.EmojiStatusEvent; + import org.bigbluebutton.main.model.users.events.RoleChangeEvent; + import org.bigbluebutton.modules.users.events.UsersRollEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; private var images:Images = new Images(); private var rolledOver:Boolean = false; private var moderator:Boolean = false; private function onCreationComplete():void { - refreshRole(UserManager.getInstance().getConference().amIModerator()); + refreshRole(UsersUtil.amIModerator()); /* I was trying to the binds through actionscript, but every time the itemrenderer was recycled * the binds would stop functioning. I think it might have been because I was using strong diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml index 3d7e5f9d49..683b716d50 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml @@ -76,20 +76,19 @@ import org.bigbluebutton.core.events.LockControlEvent; import org.bigbluebutton.core.events.VoiceConfEvent; import org.bigbluebutton.core.managers.UserManager; - import org.bigbluebutton.core.model.MeetingModel; + import org.bigbluebutton.core.model.LiveMeeting; import org.bigbluebutton.core.vo.LockSettingsVO; import org.bigbluebutton.main.events.BreakoutRoomEvent; import org.bigbluebutton.main.events.ShortcutEvent; import org.bigbluebutton.main.model.users.BBBUser; import org.bigbluebutton.main.model.users.BreakoutRoom; import org.bigbluebutton.main.model.users.events.ChangeMyRole; - import org.bigbluebutton.main.model.users.events.ChangeRoleEvent; import org.bigbluebutton.main.model.users.events.EmojiStatusEvent; import org.bigbluebutton.main.model.users.events.KickUserEvent; import org.bigbluebutton.main.model.users.events.RoleChangeEvent; import org.bigbluebutton.main.views.MainCanvas; - import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand; import org.bigbluebutton.main.views.WellPositionedMenu; + import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand; import org.bigbluebutton.modules.users.events.MeetingMutedEvent; import org.bigbluebutton.modules.users.events.UsersRollEvent; import org.bigbluebutton.modules.users.model.BreakoutRoomsOptions; @@ -158,12 +157,12 @@ breakoutRoomsList = UserManager.getInstance().getConference().breakoutRooms; breakoutRoomsList.addEventListener(CollectionEvent.COLLECTION_CHANGE, breakoutRoomsListChangeListener); - amIModerator = UserManager.getInstance().getConference().amIModerator(); - amIPresenter = UserManager.getInstance().getConference().amIPresenter; + amIModerator = UsersUtil.amIModerator(); + amIPresenter = UsersUtil.amIPresenter(); settingsBtn.visible = settingsBtn.includeInLayout = partOptions.enableSettingsButton && amIModerator; closeRoomsBtn.visible = closeRoomsBtn.includeInLayout = amIModerator; - refreshRole(UserManager.getInstance().getConference().amIModerator()); + refreshRole(UsersUtil.amIModerator()); emojiStatusBtn.visible = emojiStatusBtn.includeInLayout = partOptions.enableEmojiStatus; BindingUtils.bindSetter(updateNumberofUsers, users, "length"); @@ -176,7 +175,7 @@ resourcesChanged(); - roomMuted = MeetingModel.getInstance().meetingMuted; + roomMuted = LiveMeeting.inst().meetingStatus.isMeetingMuted; var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings(); roomLocked = lockSettings.isAnythingLocked() && ( lockSettings.getLockOnJoin() || UsersUtil.isAnyoneLocked()); @@ -196,7 +195,7 @@ settingsBtn.visible = settingsBtn.includeInLayout = partOptions.enableSettingsButton && amIModerator; - changeButtons(UserManager.getInstance().getConference().amIPresenter); + changeButtons(UsersUtil.amIPresenter()); if (paramsMenu) paramsMenu.hide(); } @@ -303,7 +302,7 @@ paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.unmuteAll'), icon: images.audio, handler: muteAll}); paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.lockSettings'), icon: images.lock_open, handler: lockSettings}); - if (breakoutOptions.enabled && amIModerator && !UserManager.getInstance().getConference().isBreakout) { + if (breakoutOptions.enabled && amIModerator && ! UsersUtil.isBreakout()) { if (breakoutRoomsList.length == 0) { paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.breakoutRooms'), handler: breakoutRooms}); } else { @@ -391,7 +390,7 @@ } private function handleMeetingMuted(e:MeetingMutedEvent):void { - roomMuted = MeetingModel.getInstance().meetingMuted; + roomMuted = LiveMeeting.inst().meetingStatus.isMeetingMuted; } private function muteAll():void { @@ -455,7 +454,7 @@ private function loadKeyCombos(modifier:String):void { keyCombos = new Object(); // always start with a fresh array bbb.shortcutkey.users.muteall keyCombos[modifier + (ResourceUtil.getInstance().getString('bbb.shortcutkey.users.makePresenter') as String)] = MAKE_PRESENTER; - if (!UserManager.getInstance().getConference().isBreakout) { + if (! UsersUtil.isBreakout()) { keyCombos[modifier + (ResourceUtil.getInstance().getString('bbb.shortcutkey.users.kick') as String)] = KICK_USER; } keyCombos[modifier + (ResourceUtil.getInstance().getString('bbb.shortcutkey.users.mute') as String)] = MUTE_USER; @@ -507,7 +506,7 @@ } public function remoteRaiseHand(e:ShortcutEvent):void{ - if (UserManager.getInstance().getConference().myEmojiStatus == "raiseHand") + if (UsersUtil.myEmoji() == "raiseHand") dispatchEvent(new EmojiStatusEvent(EmojiStatusEvent.EMOJI_STATUS, "none")); else dispatchEvent(new EmojiStatusEvent(EmojiStatusEvent.EMOJI_STATUS, "raiseHand")); @@ -541,7 +540,7 @@ } public function remoteKickUser():void { - if (amIModerator && usersGrid.selectedIndex != -1 && partOptions.allowKickUser && !UserManager.getInstance().getConference().isBreakout) { + if (amIModerator && usersGrid.selectedIndex != -1 && partOptions.allowKickUser && !UsersUtil.isBreakout()) { var selData:Object = usersGrid.selectedItem; if (!selData.me) @@ -598,7 +597,7 @@ } private function handleOpenBreakoutRooms(e:ShortcutEvent):void{ - if (breakoutOptions.enabled && amIModerator && !UserManager.getInstance().getConference().isBreakout) { + if (breakoutOptions.enabled && amIModerator && !UsersUtil.isBreakout()) { breakoutRooms(); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as index 13b5b09dd0..3a23350355 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as @@ -114,13 +114,13 @@ package org.bigbluebutton.modules.videoconf.maps if (!_ready) return; LOGGER.debug("VideoEventMapDelegate:: [{0}] Viewing [{1} stream [{2}]", [me, userID, stream]); - if (! UserManager.getInstance().getConference().amIThisUser(userID)) { + if (! UsersUtil.isMe(userID)) { openViewWindowFor(userID); } } public function handleStreamStoppedEvent(event:StreamStoppedEvent):void { - if (UserManager.getInstance().getConference().amIThisUser(event.userId)) { + if (UsersUtil.isMe(event.userId)) { closePublishWindowByStream(event.streamId); } else { closeViewWindowWithStream(event.userId, event.streamId); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as index 00f999e090..d58fe2bc7b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as @@ -109,7 +109,7 @@ package org.bigbluebutton.modules.whiteboard if (o.type == AnnotationType.TEXT && o.status != AnnotationStatus.DRAW_END && - o.userId == UserManager.getInstance().getConference().getMyUserId()) { + o.userId == UsersUtil.getMyUserID()) { textUpdateListener.newTextObject(gobj as TextObject); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as index 1976c39d88..8239d35bae 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as @@ -22,6 +22,7 @@ package org.bigbluebutton.modules.whiteboard import mx.containers.Canvas; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.modules.whiteboard.business.shapes.ShapeFactory; import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel; @@ -115,7 +116,7 @@ package org.bigbluebutton.modules.whiteboard /** Helper method to test whether this user is the presenter */ private function get isPresenter():Boolean { - return UserManager.getInstance().getConference().amIPresenter; + return UsersUtil.amIPresenter(); } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as index b7c0732a47..23538ea57b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as @@ -27,6 +27,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes { import flash.text.TextFormat; import org.bigbluebutton.common.IMETextField; + import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.UserManager; import org.bigbluebutton.modules.whiteboard.models.Annotation; import org.bigbluebutton.modules.whiteboard.models.AnnotationStatus; @@ -57,7 +58,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes { maxChars = 1024; //determine editability - makeEditable(userId == UserManager.getInstance().getConference().getMyUserId() && status != AnnotationStatus.DRAW_END); + makeEditable(userId == UsersUtil.getMyUserID() && status != AnnotationStatus.DRAW_END); } public function get id():String { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as index cd7df04915..5a9bbc0269 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as @@ -18,7 +18,7 @@ */ package org.bigbluebutton.modules.whiteboard.views { - import org.bigbluebutton.core.managers.UserManager; + import org.bigbluebutton.core.UsersUtil; public class AnnotationIDGenerator { @@ -27,7 +27,7 @@ package org.bigbluebutton.modules.whiteboard.views public function AnnotationIDGenerator() { - _userid = UserManager.getInstance().getConference().getMyUserId(); + _userid = UsersUtil.getMyUserID(); } public function generateID():String { -- GitLab