Merge pull request #4918 from capilkey/update-air-client-2.0
Update air client 2.0
This commit is contained in:
commit
905991d9e5
@ -4,6 +4,7 @@
|
||||
@namespace main "org.bigbluebutton.air.main.views.*";
|
||||
@namespace participants "org.bigbluebutton.lib.participants.views.*";
|
||||
@namespace users "org.bigbluebutton.lib.user.views.*";
|
||||
@namespace usersAIR "org.bigbluebutton.air.users.views.*";
|
||||
@namespace settings "org.bigbluebutton.lib.settings.views.*";
|
||||
@namespace audio "org.bigbluebutton.lib.settings.views.audio.*";
|
||||
@namespace chat "org.bigbluebutton.lib.settings.views.chat.*";
|
||||
@ -95,6 +96,12 @@ participants|ParticipantsViewBase s|List{
|
||||
contentBackgroundColor : PropertyReference("white");
|
||||
}
|
||||
|
||||
usersAIR|UserDetailsView {
|
||||
color : PropertyReference("grey700");
|
||||
headerBackground : PropertyReference("blue500");
|
||||
separatorColor : PropertyReference("grey200");
|
||||
}
|
||||
|
||||
libChat|ChatViewBase {
|
||||
inputBackgroundColor : PropertyReference("grey100");
|
||||
inputBorderColor : PropertyReference("grey300");
|
||||
@ -103,6 +110,7 @@ libChat|ChatViewBase {
|
||||
s|ToggleSwitch {
|
||||
accentColor : PropertyReference("green500");
|
||||
color : PropertyReference("white");
|
||||
fontFamily : SourceSansProMX;
|
||||
skinClass : ClassReference("org.bigbluebutton.air.common.views.skins.MobileToggleSwitchSkin");
|
||||
}
|
||||
|
||||
@ -112,6 +120,7 @@ s|HSlider {
|
||||
|
||||
s|CheckBox {
|
||||
skinClass : ClassReference("org.bigbluebutton.air.common.views.skins.MobileCheckBoxSkin");
|
||||
fontFamily : SourceSansProMX;
|
||||
chromeColor : PropertyReference("white");
|
||||
}
|
||||
|
||||
|
5
clients/flash/air-client/src/css/xhdpi.css
Normal file → Executable file
5
clients/flash/air-client/src/css/xhdpi.css
Normal file → Executable file
@ -5,6 +5,7 @@
|
||||
@namespace views "org.bigbluebutton.air.common.views.*";
|
||||
@namespace libChat "org.bigbluebutton.lib.chat.views.*";
|
||||
@namespace users "org.bigbluebutton.lib.user.views.*";
|
||||
@namespace usersAIR "org.bigbluebutton.air.users.views.*";
|
||||
@namespace settings "org.bigbluebutton.lib.settings.views.*";
|
||||
@namespace audio "org.bigbluebutton.lib.settings.views.audio.*";
|
||||
@namespace chat "org.bigbluebutton.lib.settings.views.chat.*";
|
||||
@ -60,6 +61,10 @@
|
||||
padding: 30;
|
||||
}
|
||||
|
||||
usersAIR|UserDetailsView {
|
||||
groupsPadding : 40;
|
||||
}
|
||||
|
||||
settings|SettingsItemRenderer {
|
||||
fontSize : 34;
|
||||
iconSize : 44;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package org.bigbluebutton.air {
|
||||
|
||||
import org.bigbluebutton.air.main.commands.AuthenticationCommandAIR;
|
||||
import org.bigbluebutton.air.main.commands.ConnectingFinishedCommandAIR;
|
||||
import org.bigbluebutton.air.main.commands.DisconnectUserCommandAIR;
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
@ -15,7 +14,6 @@ package org.bigbluebutton.air {
|
||||
import org.bigbluebutton.lib.common.services.IBaseConnection;
|
||||
import org.bigbluebutton.lib.deskshare.services.DeskshareConnection;
|
||||
import org.bigbluebutton.lib.deskshare.services.IDeskshareConnection;
|
||||
import org.bigbluebutton.lib.main.commands.AuthenticationSignal;
|
||||
import org.bigbluebutton.lib.main.commands.ConnectCommand;
|
||||
import org.bigbluebutton.lib.main.commands.ConnectSignal;
|
||||
import org.bigbluebutton.lib.main.commands.ConnectingFinishedSignal;
|
||||
@ -26,7 +24,9 @@ package org.bigbluebutton.air {
|
||||
import org.bigbluebutton.lib.main.commands.PresenterSignal;
|
||||
import org.bigbluebutton.lib.main.models.ConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.MeetingData;
|
||||
import org.bigbluebutton.lib.main.models.UserSession;
|
||||
import org.bigbluebutton.lib.main.services.BigBlueButtonConnection;
|
||||
import org.bigbluebutton.lib.main.services.IBigBlueButtonConnection;
|
||||
@ -45,7 +45,7 @@ package org.bigbluebutton.air {
|
||||
|
||||
import robotlegs.bender.extensions.signalCommandMap.api.ISignalCommandMap;
|
||||
import robotlegs.bender.framework.api.IConfig;
|
||||
import robotlegs.bender.framework.api.IInjector;
|
||||
import robotlegs.bender.framework.api.IInjector;
|
||||
|
||||
public class AppConfig implements IConfig {
|
||||
|
||||
@ -59,6 +59,7 @@ package org.bigbluebutton.air {
|
||||
// Singleton mapping
|
||||
injector.map(IUISession).toSingleton(UISession);
|
||||
injector.map(IUserSession).toSingleton(UserSession);
|
||||
injector.map(IMeetingData).toSingleton(MeetingData);
|
||||
injector.map(IConferenceParameters).toSingleton(ConferenceParameters);
|
||||
injector.map(IUsersService).toSingleton(UsersService);
|
||||
injector.map(IPresentationService).toSingleton(PresentationService);
|
||||
@ -75,7 +76,6 @@ package org.bigbluebutton.air {
|
||||
injector.map(IVideoConnection).toType(VideoConnection);
|
||||
// Signal to Command mapping
|
||||
signalCommandMap.map(ConnectSignal).toCommand(ConnectCommand);
|
||||
signalCommandMap.map(AuthenticationSignal).toCommand(AuthenticationCommandAIR);
|
||||
signalCommandMap.map(DisconnectUserSignal).toCommand(DisconnectUserCommandAIR);
|
||||
signalCommandMap.map(ConnectingFinishedSignal).toCommand(ConnectingFinishedCommandAIR);
|
||||
signalCommandMap.map(PresenterSignal).toCommand(PresenterCommand);
|
||||
|
@ -12,7 +12,7 @@ package org.bigbluebutton.air.chat.views {
|
||||
|
||||
override protected function onListIndexChangeEvent(e:IndexChangeEvent):void {
|
||||
var item:Object = dataProvider.getItemAt(e.newIndex);
|
||||
uiSession.pushPage(PageEnum.CHAT, {userId: item.userId, publicChat: item.isPublic});
|
||||
uiSession.pushPage(PageEnum.CHAT, {intId: item.userId, publicChat: item.isPublic});
|
||||
//uiSession.chatInfo = new ChatRoomVO(item.userId, item.isPublic);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package org.bigbluebutton.air.chat.views {
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
import org.bigbluebutton.lib.chat.views.ChatViewMediatorBase;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
|
||||
public class ChatViewMediatorAIR extends ChatViewMediatorBase {
|
||||
|
||||
@ -18,11 +18,11 @@ package org.bigbluebutton.air.chat.views {
|
||||
_publicChat = true;
|
||||
openChat(chatMessagesSession.publicConversation);
|
||||
} else {
|
||||
var user:User = userSession.userList.getUserByUserId(data.userId);
|
||||
var user:User2x = meetingData.users.getUser(data.intId);
|
||||
_publicChat = false;
|
||||
if (user != null) {
|
||||
_user = user;
|
||||
openChat(chatMessagesSession.getPrivateMessages(user.userId, user.name));
|
||||
openChat(chatMessagesSession.getPrivateMessages(user.intId, user.name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ package org.bigbluebutton.air.common {
|
||||
import org.bigbluebutton.air.settings.views.camera.CameraSettingsView;
|
||||
import org.bigbluebutton.air.settings.views.chat.ChatSettingsView;
|
||||
import org.bigbluebutton.air.settings.views.lock.LockSettingsView;
|
||||
import org.bigbluebutton.air.users.views.UserDetailsView;
|
||||
|
||||
public class PageEnum {
|
||||
public static const MAIN:String = "main";
|
||||
@ -56,10 +57,9 @@ package org.bigbluebutton.air.common {
|
||||
dic[CHATSETTINGS] = ChatSettingsView;
|
||||
dic[LOCKSETTINGS] = LockSettingsView;
|
||||
// dic[PROFILE] = ProfileView;
|
||||
// dic[USER_DETAILS] = UserDetailsView;
|
||||
dic[USER_DETAILS] = UserDetailsView;
|
||||
// dic[VIDEO_CHAT] = VideoChatView;
|
||||
// dic[CHATROOMS] = ChatRoomsView;
|
||||
// dic[PARTICIPANTS] = ParticipantsView;
|
||||
// dic[SELECT_PARTICIPANT] = SelectParticipantView;
|
||||
// dic[DISCONNECT] = DisconnectPageView;
|
||||
// dic[DESKSHARE] = DeskshareView;
|
||||
|
@ -1,30 +0,0 @@
|
||||
package org.bigbluebutton.air.main.commands {
|
||||
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
|
||||
public class AuthenticationCommandAIR extends Command {
|
||||
|
||||
[Inject]
|
||||
public var command:String;
|
||||
|
||||
[Inject]
|
||||
public var uiSession:IUISession;
|
||||
|
||||
override public function execute():void {
|
||||
switch (command) {
|
||||
case "timeOut":
|
||||
uiSession.setLoading(false, "Auth token timed out");
|
||||
//userUISession.loading = false;
|
||||
//userUISession.joinFailureSignal.dispatch("authTokenTimedOut");
|
||||
break;
|
||||
case "invalid":
|
||||
default:
|
||||
uiSession.setLoading(false, "Auth token invalid");
|
||||
//userUISession.loading = false;
|
||||
//userUISession.joinFailureSignal.dispatch("authTokenInvalid");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -42,7 +42,8 @@ package org.bigbluebutton.air.main.views {
|
||||
//var url:String = "bigbluebutton://test-install.blindsidenetworks.com/bigbluebutton/api/join?fullName=AIR&meetingID=Demo+Meeting&password=mp&redirect=false&checksum=3fdf56e9915c1031c3ea012b4ec8823cedd7c272";
|
||||
//var url:String = "bigbluebutton://test-install.blindsidenetworks.com/bigbluebutton/api/join?fullName=User+2021828&meetingID=Demo+Meeting&password=ap&redirect=true&checksum=8751963df96437c7d435eac8124e4fb3ec147115";
|
||||
//var url:String = "bigbluebutton://bbb.riadvice.com/bigbluebutton/api/join?fullName=User+6571157&meetingID=Mobile+Meeting&password=mp&redirect=true&checksum=ed779570bbfa11a2e857ffb36eda5184d70bc6ca";
|
||||
var url:String = "bigbluebutton://dev.bigbluebutton.org/bigbluebutton/api/join?fullName=AIR+Client&meetingID=Demo+Meeting&password=ap&redirect=true&checksum=f1671c5e125522f69da92e46353cc6c75df4b31d";
|
||||
//var url:String = "bigbluebutton://dev.bigbluebutton.org/bigbluebutton/api/join?fullName=AIR+Client&meetingID=Demo+Meeting&password=ap&redirect=true&checksum=f1671c5e125522f69da92e46353cc6c75df4b31d";
|
||||
var url:String = "http://192.168.204.137/bigbluebutton/api/join?fullName=AIR+User&meetingID=Demo+Meeting&password=ap&redirect=true&checksum=83e3b776471db343fddd9dfd71e7f499157e0a00";
|
||||
joinRoom(url);
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ package org.bigbluebutton.air.main.views {
|
||||
import org.bigbluebutton.air.common.PageEnum;
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
import org.bigbluebutton.lib.main.views.TopToolbarMediatorBase;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
|
||||
public class TopToolbarMediatorAIR extends TopToolbarMediatorBase {
|
||||
|
||||
@ -13,20 +13,22 @@ package org.bigbluebutton.air.main.views {
|
||||
|
||||
override protected function setTitle():void {
|
||||
if (uiSession.currentPage == PageEnum.CHAT) {
|
||||
var data:Object = uiSession.currentPageDetails;
|
||||
var chatData:Object = uiSession.currentPageDetails;
|
||||
|
||||
if (data != null) {
|
||||
if (data.publicChat) {
|
||||
if (chatData != null) {
|
||||
if (chatData.publicChat) {
|
||||
view.titleLabel.text = "Public Chat";
|
||||
} else {
|
||||
var user:User = userSession.userList.getUserByUserId(data.userId);
|
||||
view.titleLabel.text = user.name;
|
||||
var userC:User2x = meetingData.users.getUser(chatData.intId);
|
||||
view.titleLabel.text = userC.name;
|
||||
}
|
||||
}
|
||||
} else if (uiSession.currentPage == PageEnum.PARTICIPANTS) {
|
||||
view.titleLabel.text = "Participants";
|
||||
} else if (uiSession && uiSession.currentPage.indexOf("Settings") > 0) {
|
||||
view.titleLabel.text = uiSession.currentPage.replace(/([A-Z])/g, ' $1');
|
||||
} else if (uiSession.currentPage == PageEnum.USER_DETAILS) {
|
||||
view.titleLabel.text = "User Details";
|
||||
} else {
|
||||
view.titleLabel.text = conferenceParameters.meetingName;
|
||||
}
|
||||
|
4
clients/flash/air-client/src/org/bigbluebutton/air/settings/views/camera/CameraSettingsViewMediatorAIR.as
Normal file → Executable file
4
clients/flash/air-client/src/org/bigbluebutton/air/settings/views/camera/CameraSettingsViewMediatorAIR.as
Normal file → Executable file
@ -101,9 +101,9 @@ package org.bigbluebutton.air.settings.views.camera {
|
||||
}
|
||||
|
||||
override protected function displayPreviewCamera():void {
|
||||
var profile:VideoProfile = userSession.videoConnection.selectedCameraQuality
|
||||
var profile:VideoProfile = userSession.videoConnection.selectedCameraQuality;
|
||||
var camera:Camera = getCamera(userSession.videoConnection.cameraPosition);
|
||||
if (camera) {
|
||||
if (camera && profile) {
|
||||
var myCam:Video = new Video();
|
||||
var screenAspectRatio:Number = (view.cameraHolder.width / profile.width) / (view.cameraHolder.height / profile.height);
|
||||
if (screenAspectRatio > 1) { //landscape
|
||||
|
@ -1,6 +1,12 @@
|
||||
package org.bigbluebutton.air.users {
|
||||
|
||||
import org.bigbluebutton.air.users.views.UserDetailsView;
|
||||
import org.bigbluebutton.air.users.views.UserDetailsViewMediator;
|
||||
import org.bigbluebutton.air.users.views.UsersViewMediatorAIR;
|
||||
import org.bigbluebutton.lib.main.commands.ClearUserStatusCommand;
|
||||
import org.bigbluebutton.lib.main.commands.ClearUserStatusSignal;
|
||||
import org.bigbluebutton.lib.main.commands.EmojiCommand;
|
||||
import org.bigbluebutton.lib.main.commands.EmojiSignal;
|
||||
import org.bigbluebutton.lib.user.views.UsersViewBase;
|
||||
|
||||
import robotlegs.bender.extensions.mediatorMap.api.IMediatorMap;
|
||||
@ -25,20 +31,18 @@ package org.bigbluebutton.air.users {
|
||||
*/
|
||||
private function mediators():void {
|
||||
mediatorMap.map(UsersViewBase).toMediator(UsersViewMediatorAIR);
|
||||
//mediatorMap.map(IUserDetailsView).toMediator(UserDetailsViewMediator);
|
||||
mediatorMap.map(UserDetailsView).toMediator(UserDetailsViewMediator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps signals to commands using the signalCommandMap.
|
||||
*/
|
||||
private function signals():void {
|
||||
/*
|
||||
signalCommandMap.map(EmojiSignal).toCommand(EmojiCommand);
|
||||
signalCommandMap.map(MuteAllUsersSignal).toCommand(MuteAllUsersCommand);
|
||||
signalCommandMap.map(MuteAllUsersExpectPresenterSignal).toCommand(MuteAllUsersExpectPresenterCommand);
|
||||
signalCommandMap.map(SaveLockSettingsSignal).toCommand(SaveLockSettingsCommand);
|
||||
//signalCommandMap.map(MuteAllUsersSignal).toCommand(MuteAllUsersCommand);
|
||||
//signalCommandMap.map(MuteAllUsersExpectPresenterSignal).toCommand(MuteAllUsersExpectPresenterCommand);
|
||||
//signalCommandMap.map(SaveLockSettingsSignal).toCommand(SaveLockSettingsCommand);
|
||||
signalCommandMap.map(ClearUserStatusSignal).toCommand(ClearUserStatusCommand);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
package org.bigbluebutton.air.users.views {
|
||||
import org.bigbluebutton.air.main.views.TopToolbarAIR;
|
||||
|
||||
public class TopToolbarUserDetails extends TopToolbarAIR {
|
||||
public function TopToolbarUserDetails() {
|
||||
super();
|
||||
|
||||
leftButton.styleName = "icon-left-arrow topButton topLeftButton";
|
||||
rightButton.styleName = "icon-presentation topButton topRightButton";
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,267 @@
|
||||
package org.bigbluebutton.air.users.views {
|
||||
import mx.core.ScrollPolicy;
|
||||
import mx.graphics.SolidColor;
|
||||
|
||||
import spark.components.Button;
|
||||
import spark.components.Group;
|
||||
import spark.components.HGroup;
|
||||
import spark.components.Image;
|
||||
import spark.components.Label;
|
||||
import spark.components.Scroller;
|
||||
import spark.components.SkinnableContainer;
|
||||
import spark.components.VGroup;
|
||||
import spark.layouts.VerticalLayout;
|
||||
import spark.primitives.Rect;
|
||||
|
||||
import org.bigbluebutton.air.common.views.NoTabView;
|
||||
import org.bigbluebutton.air.main.views.TopToolbarAIR;
|
||||
import org.bigbluebutton.air.users.views.models.UserDetailsVM;
|
||||
import org.bigbluebutton.lib.common.views.ParticipantIcon;
|
||||
import org.bigbluebutton.lib.user.models.EmojiStatus;
|
||||
import org.bigbluebutton.lib.user.utils.UserUtils;
|
||||
|
||||
public class UserDetailsView extends NoTabView {
|
||||
private var _participantIcon:ParticipantIcon;
|
||||
|
||||
private var _participantLabel:Label;
|
||||
|
||||
private var _participantBackground:Rect;
|
||||
|
||||
private var _showCameraButton:Button;
|
||||
|
||||
public function get showCameraButton():Button {
|
||||
return _showCameraButton;
|
||||
}
|
||||
|
||||
private var _privateChatButton:Button;
|
||||
|
||||
public function get privateChatButton():Button {
|
||||
return _privateChatButton;
|
||||
}
|
||||
|
||||
private var _clearStatusButton:Button;
|
||||
|
||||
public function get clearStatusButton():Button {
|
||||
return _clearStatusButton;
|
||||
}
|
||||
|
||||
private var _makePresenterButton:Button;
|
||||
|
||||
public function get makePresenterButton():Button {
|
||||
return _makePresenterButton;
|
||||
}
|
||||
|
||||
private var _promoteButton:Button;
|
||||
|
||||
public function get promoteButton():Button {
|
||||
return _promoteButton;
|
||||
}
|
||||
|
||||
private var _lockButton:Button;
|
||||
|
||||
public function get lockButton():Button {
|
||||
return _lockButton;
|
||||
}
|
||||
|
||||
private var _unlockButton:Button;
|
||||
|
||||
public function get unlockButton():Button {
|
||||
return _unlockButton;
|
||||
}
|
||||
|
||||
private var _viewModel:UserDetailsVM;
|
||||
|
||||
public function UserDetailsView() {
|
||||
super();
|
||||
|
||||
styleName = "mainView";
|
||||
|
||||
var l:VerticalLayout = new VerticalLayout();
|
||||
l.gap = 0;
|
||||
l.horizontalAlign = "center";
|
||||
layout = l;
|
||||
|
||||
var skinnableWrapper:SkinnableContainer = new SkinnableContainer();
|
||||
skinnableWrapper.styleName = "subViewContent";
|
||||
skinnableWrapper.percentWidth = 100;
|
||||
skinnableWrapper.percentHeight = 100;
|
||||
|
||||
var scroller:Scroller = new Scroller();
|
||||
scroller.percentWidth = 100;
|
||||
scroller.percentHeight = 100;
|
||||
scroller.setStyle("horizontalScrollPolicy", "off");
|
||||
|
||||
var sGroup:VGroup = new VGroup();
|
||||
sGroup.percentWidth = 100;
|
||||
sGroup.percentHeight = 100;
|
||||
sGroup.horizontalAlign = "center";
|
||||
sGroup.setStyle("horizontalScrollPolicy", "off");
|
||||
scroller.viewport = sGroup;
|
||||
|
||||
var participantHolder:Group = new Group();
|
||||
participantHolder.percentWidth = 100;
|
||||
sGroup.addElement(participantHolder);
|
||||
|
||||
_participantBackground = new Rect();
|
||||
_participantBackground.percentHeight = 100;
|
||||
_participantBackground.percentWidth = 100;
|
||||
_participantBackground.fill = new SolidColor();
|
||||
participantHolder.addElement(_participantBackground);
|
||||
|
||||
_participantIcon = new ParticipantIcon();
|
||||
_participantIcon.horizontalCenter = 0;
|
||||
_participantIcon.styleName = "participantIconSettings";
|
||||
participantHolder.addElement(_participantIcon);
|
||||
|
||||
_participantLabel = new Label();
|
||||
_participantLabel.horizontalCenter = 0;
|
||||
participantHolder.addElement(_participantLabel);
|
||||
|
||||
_showCameraButton = new Button();
|
||||
_showCameraButton.percentWidth = 90;
|
||||
_showCameraButton.label= "Show Camera"; //{resourceManager.getString('resources', 'userDetail.cameraBtn.text')}"
|
||||
_showCameraButton.styleName="userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_showCameraButton);
|
||||
|
||||
_privateChatButton = new Button();
|
||||
_privateChatButton.percentWidth = 90;
|
||||
_privateChatButton.label = "Private Chat"; //{resourceManager.getString('resources', 'userDetail.privateChatBtn.text')}"
|
||||
_privateChatButton.styleName = "userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_privateChatButton);
|
||||
|
||||
_clearStatusButton = new Button();
|
||||
_clearStatusButton.percentWidth = 90;
|
||||
_clearStatusButton.label = "Clear Status"; //{resourceManager.getString('resources', 'userDetail.clearStatus')}"
|
||||
_clearStatusButton.styleName = "userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_clearStatusButton);
|
||||
|
||||
_makePresenterButton = new Button();
|
||||
_makePresenterButton.percentWidth
|
||||
_makePresenterButton.label= "Make Presenter"; //{resourceManager.getString('resources', 'userDetail.presenterBtn.text')}"
|
||||
_makePresenterButton.styleName="userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_makePresenterButton);
|
||||
|
||||
_promoteButton = new Button();
|
||||
_promoteButton.percentWidth = 90;
|
||||
_promoteButton.label = "Promote to Moderator";
|
||||
_promoteButton.styleName="userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_promoteButton);
|
||||
|
||||
_lockButton = new Button();
|
||||
_lockButton.percentWidth = 90;
|
||||
_lockButton.label="Lock User"; //{resourceManager.getString('resources', 'userDetail.lockButton.text')}"
|
||||
_lockButton.styleName="userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_lockButton);
|
||||
|
||||
_unlockButton = new Button();
|
||||
_unlockButton.percentWidth = 90;
|
||||
_unlockButton.label="Unlock User"; //{resourceManager.getString('resources', 'userDetail.unlockButton.text')}"
|
||||
_unlockButton.styleName="userSettingsButton logoutButton contentFontSize";
|
||||
sGroup.addElement(_unlockButton);
|
||||
|
||||
skinnableWrapper.addElement(scroller);
|
||||
|
||||
addElement(skinnableWrapper);
|
||||
}
|
||||
|
||||
override protected function createToolbar():TopToolbarAIR {
|
||||
return new TopToolbarUserDetails();
|
||||
}
|
||||
|
||||
public function setViewModel(vm:UserDetailsVM):void {
|
||||
_viewModel = vm;
|
||||
}
|
||||
|
||||
public function update():void {
|
||||
if (_viewModel != null) {
|
||||
/*
|
||||
if (_isMe) {
|
||||
userNameText.text = _user.name + " " + resourceManager.getString('resources', 'userDetail.you');
|
||||
} else {
|
||||
userNameText.text = _user.name;
|
||||
}
|
||||
if (_user.presenter) {
|
||||
roleText.text = resourceManager.getString('resources', 'participants.status.presenter');
|
||||
if (_user.role == UserRole.MODERATOR) {
|
||||
roleText.text += "/" + resourceManager.getString('resources', 'participants.status.moderator');
|
||||
}
|
||||
} else if (_user.role == UserRole.MODERATOR) {
|
||||
roleText.text = resourceManager.getString('resources', 'participants.status.moderator');
|
||||
} else {
|
||||
roleText.text = "";
|
||||
}
|
||||
*/
|
||||
|
||||
_participantIcon.displayInitials = UserUtils.getInitials(_viewModel.userName);
|
||||
_participantLabel.text = _viewModel.userName;
|
||||
|
||||
if (_viewModel.userEmoji != EmojiStatus.NO_STATUS && _viewModel.amIModerator) {
|
||||
clearStatusButton.includeInLayout = true;
|
||||
clearStatusButton.visible = true;
|
||||
} else {
|
||||
clearStatusButton.includeInLayout = false;
|
||||
clearStatusButton.visible = false;
|
||||
}
|
||||
if (!_viewModel.userPresenter && _viewModel.amIModerator) {
|
||||
makePresenterButton.includeInLayout = true;
|
||||
makePresenterButton.visible = true;
|
||||
} else {
|
||||
makePresenterButton.includeInLayout = false;
|
||||
makePresenterButton.visible = false;
|
||||
}
|
||||
if (!_viewModel.userModerator && _viewModel.amIModerator) {
|
||||
promoteButton.includeInLayout = true;
|
||||
promoteButton.visible = true;
|
||||
} else {
|
||||
promoteButton.includeInLayout = false;
|
||||
promoteButton.visible = false;
|
||||
}
|
||||
//cameraIcon.visible = cameraIcon.includeInLayout = false;// _user.hasStream;
|
||||
//micIcon.visible = micIcon.includeInLayout = false; //(_user.voiceJoined && !_user.muted);
|
||||
//micOffIcon.visible = micOffIcon.includeInLayout = false; //(_user.voiceJoined && _user.muted);
|
||||
//noMediaText.visible = noMediaText.includeInLayout = false; //(!_user.voiceJoined && !_user.hasStream);
|
||||
//TODO: buttons
|
||||
showCameraButton.includeInLayout = false; //_user.hasStream;
|
||||
showCameraButton.visible = false; //_user.hasStream;
|
||||
privateChatButton.includeInLayout = !_viewModel.me;
|
||||
privateChatButton.visible = !_viewModel.me;
|
||||
|
||||
if (_viewModel.amIModerator && _viewModel.roomLocked && !_viewModel.userModerator) {
|
||||
if (_viewModel.userLocked) {
|
||||
unlockButton.visible = true;
|
||||
unlockButton.includeInLayout = true;
|
||||
lockButton.visible = false;
|
||||
lockButton.includeInLayout = false;
|
||||
} else {
|
||||
unlockButton.visible = false;
|
||||
unlockButton.includeInLayout = false;
|
||||
lockButton.visible = true;
|
||||
lockButton.includeInLayout = true;
|
||||
}
|
||||
} else {
|
||||
unlockButton.visible = false;
|
||||
unlockButton.includeInLayout = false;
|
||||
lockButton.visible = false;
|
||||
lockButton.includeInLayout = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override protected function updateDisplayList(w:Number, h:Number):void {
|
||||
super.updateDisplayList(w, h);
|
||||
|
||||
setParticipantStyle();
|
||||
}
|
||||
|
||||
private function setParticipantStyle():void {
|
||||
var groupsPadding:Number = getStyle("groupsPadding");
|
||||
|
||||
SolidColor(_participantBackground.fill).color = getStyle("headerBackground");
|
||||
_participantIcon.top = groupsPadding * 1.75;
|
||||
_participantLabel.setStyle("color", _participantIcon.getStyle("color"));
|
||||
_participantLabel.setStyle("fontSize", _participantIcon.getStyle("fontSize") * 0.65);
|
||||
_participantLabel.setStyle("paddingBottom", groupsPadding);
|
||||
_participantLabel.y = _participantIcon.y + _participantIcon.height + groupsPadding;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
package org.bigbluebutton.air.users.views {
|
||||
|
||||
import flash.events.MouseEvent;
|
||||
|
||||
import org.bigbluebutton.air.common.PageEnum;
|
||||
import org.bigbluebutton.air.common.TransitionAnimationEnum;
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
import org.bigbluebutton.air.users.views.models.UserDetailsVM;
|
||||
import org.bigbluebutton.lib.main.commands.ClearUserStatusSignal;
|
||||
import org.bigbluebutton.lib.main.commands.LockUserSignal;
|
||||
import org.bigbluebutton.lib.main.commands.PresenterSignal;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.main.models.LockSettings2x;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
import org.bigbluebutton.lib.user.models.UserChangeEnum;
|
||||
import org.bigbluebutton.lib.user.models.UserRole;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Mediator;
|
||||
|
||||
public class UserDetailsViewMediator extends Mediator {
|
||||
|
||||
[Inject]
|
||||
public var view:UserDetailsView;
|
||||
|
||||
[Inject]
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
[Inject]
|
||||
public var userUISession:IUISession;
|
||||
|
||||
[Inject]
|
||||
public var clearUserStatusSignal:ClearUserStatusSignal;
|
||||
|
||||
[Inject]
|
||||
public var presenterSignal:PresenterSignal;
|
||||
|
||||
[Inject]
|
||||
public var lockUserSignal:LockUserSignal;
|
||||
|
||||
protected var _user:User2x;
|
||||
|
||||
protected var _viewModel:UserDetailsVM;
|
||||
|
||||
override public function initialize():void {
|
||||
var selectedUserId:String = userUISession.currentPageDetails as String;
|
||||
meetingData.users.userChangeSignal.add(onUserChanged);
|
||||
_user = meetingData.users.getUser(selectedUserId);
|
||||
|
||||
_viewModel = new UserDetailsVM();
|
||||
_viewModel.userName = _user.name;
|
||||
_viewModel.userModerator = _user.role == UserRole.MODERATOR;
|
||||
_viewModel.userPresenter = _user.presenter;
|
||||
_viewModel.userEmoji = _user.emoji;
|
||||
_viewModel.userLocked = _user.locked;
|
||||
// user webcam, voicejoined, muted
|
||||
_viewModel.amIModerator = meetingData.users.me.role == UserRole.MODERATOR;
|
||||
_viewModel.me = _user.intId == meetingData.users.me.intId;
|
||||
_viewModel.roomLocked = meetingData.meetingStatus.lockSettings.isRoomLocked();
|
||||
view.setViewModel(_viewModel);
|
||||
view.update();
|
||||
|
||||
meetingData.meetingStatus.lockSettingsChangeSignal.add(onLockSettingsChange);
|
||||
view.showCameraButton.addEventListener(MouseEvent.CLICK, onShowCameraButton);
|
||||
view.privateChatButton.addEventListener(MouseEvent.CLICK, onShowPrivateChatButton);
|
||||
view.clearStatusButton.addEventListener(MouseEvent.CLICK, onClearStatusButton);
|
||||
view.makePresenterButton.addEventListener(MouseEvent.CLICK, onMakePresenterButton);
|
||||
view.lockButton.addEventListener(MouseEvent.CLICK, onLockUser);
|
||||
view.unlockButton.addEventListener(MouseEvent.CLICK, onUnlockUser);
|
||||
}
|
||||
|
||||
protected function onLockUser(event:MouseEvent):void {
|
||||
//dispatch lock signal
|
||||
lockUserSignal.dispatch(_user.intId, true);
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
protected function onUnlockUser(event:MouseEvent):void {
|
||||
//dispatch lock signal
|
||||
lockUserSignal.dispatch(_user.intId, false);
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
protected function onShowCameraButton(event:MouseEvent):void {
|
||||
trace("onShowCameraButton clicked - Implementation missing");
|
||||
//userUISession.pushPage(PageEnum.VIDEO_CHAT, _user, TransitionAnimationEnum.APPEAR);
|
||||
}
|
||||
|
||||
protected function onShowPrivateChatButton(event:MouseEvent):void {
|
||||
userUISession.pushPage(PageEnum.CHAT, {publicChat: false, intId: _user.intId}, TransitionAnimationEnum.APPEAR);
|
||||
}
|
||||
|
||||
protected function onClearStatusButton(event:MouseEvent):void {
|
||||
clearUserStatusSignal.dispatch(_user.intId);
|
||||
view.clearStatusButton.includeInLayout = false;
|
||||
view.clearStatusButton.visible = false;
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
protected function onMakePresenterButton(event:MouseEvent):void {
|
||||
presenterSignal.dispatch(_user);
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
private function onUserChanged(user:User2x, prop:int):void {
|
||||
if (_user.intId == user.intId) {
|
||||
switch (prop) {
|
||||
case UserChangeEnum.LEAVE:
|
||||
userUISession.popPage();
|
||||
break;
|
||||
case UserChangeEnum.EMOJI:
|
||||
_viewModel.userEmoji = user.emoji;
|
||||
view.update();
|
||||
break;
|
||||
case UserChangeEnum.LOCKED:
|
||||
_viewModel.userLocked = user.locked;
|
||||
view.update();
|
||||
break;
|
||||
case UserChangeEnum.PRESENTER:
|
||||
_viewModel.userPresenter = user.presenter;
|
||||
view.update();
|
||||
break;
|
||||
case UserChangeEnum.ROLE:
|
||||
_viewModel.userModerator = user.role == UserRole.MODERATOR;
|
||||
view.update();
|
||||
break;
|
||||
}
|
||||
} else if (_user.intId == meetingData.users.me.intId) {
|
||||
if (prop == UserChangeEnum.ROLE) {
|
||||
_viewModel.amIModerator = user.role == UserRole.MODERATOR;
|
||||
view.update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function onLockSettingsChange(lockSettings:LockSettings2x):void {
|
||||
_viewModel.roomLocked = lockSettings.isRoomLocked();
|
||||
view.update();
|
||||
}
|
||||
|
||||
override public function destroy():void {
|
||||
super.destroy();
|
||||
view.clearStatusButton.removeEventListener(MouseEvent.CLICK, onClearStatusButton);
|
||||
view.makePresenterButton.removeEventListener(MouseEvent.CLICK, onMakePresenterButton);
|
||||
view.lockButton.removeEventListener(MouseEvent.CLICK, onLockUser);
|
||||
view.unlockButton.removeEventListener(MouseEvent.CLICK, onUnlockUser);
|
||||
view.showCameraButton.removeEventListener(MouseEvent.CLICK, onShowCameraButton);
|
||||
view.privateChatButton.removeEventListener(MouseEvent.CLICK, onShowPrivateChatButton);
|
||||
meetingData.users.userChangeSignal.remove(onUserChanged);
|
||||
meetingData.meetingStatus.lockSettingsChangeSignal.remove(onLockSettingsChange);
|
||||
view = null;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,16 @@
|
||||
package org.bigbluebutton.air.users.views {
|
||||
import org.bigbluebutton.air.common.PageEnum;
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
import org.bigbluebutton.lib.user.events.UserItemSelectedEvent;
|
||||
import org.bigbluebutton.lib.user.views.UsersViewMediatorBase;
|
||||
|
||||
public class UsersViewMediatorAIR extends UsersViewMediatorBase {
|
||||
|
||||
[Inject]
|
||||
public var uiSession:IUISession;
|
||||
|
||||
override protected function onUserItemSelected(e:UserItemSelectedEvent):void {
|
||||
uiSession.pushPage(PageEnum.USER_DETAILS, e.user.intId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
package org.bigbluebutton.air.users.views.models {
|
||||
import org.bigbluebutton.lib.user.models.EmojiStatus;
|
||||
|
||||
public class UserDetailsVM {
|
||||
public var userName:String = "";
|
||||
|
||||
public var userModerator:Boolean = false;
|
||||
|
||||
public var userPresenter:Boolean = false;
|
||||
|
||||
public var userEmoji:String = EmojiStatus.NO_STATUS;
|
||||
|
||||
public var userLocked:Boolean = false;
|
||||
|
||||
public var userHasWebcam:Boolean = false;
|
||||
|
||||
public var userVoiceJoined:Boolean = false;
|
||||
|
||||
public var userMuted:Boolean = false;
|
||||
|
||||
public var amIModerator:Boolean = false;
|
||||
|
||||
public var me:Boolean = false;
|
||||
|
||||
public var roomLocked:Boolean = false;
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package org.bigbluebutton.air.users.views.userdetails {
|
||||
|
||||
import spark.components.Button;
|
||||
|
||||
import org.bigbluebutton.air.common.views.IView;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
|
||||
public interface IUserDetailsView extends IView {
|
||||
function set user(u:User):void;
|
||||
function set userMe(u:User):void;
|
||||
function get user():User;
|
||||
function get userMe():User;
|
||||
function update():void;
|
||||
function get showCameraButton():Button;
|
||||
function get showPrivateChat():Button;
|
||||
function get clearStatusButton():Button;
|
||||
function get makePresenterButton():Button;
|
||||
function get promoteButton():Button;
|
||||
function get lockButton():Button;
|
||||
function get unlockButton():Button;
|
||||
function updateLockButtons(isRoomLocked:Boolean):void;
|
||||
}
|
||||
}
|
@ -1,129 +0,0 @@
|
||||
package org.bigbluebutton.air.users.views.userdetails {
|
||||
|
||||
import mx.core.FlexGlobals;
|
||||
|
||||
import spark.components.Button;
|
||||
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
|
||||
public class UserDetailsView extends UserDetailsViewBase implements IUserDetailsView {
|
||||
|
||||
protected var _user:User;
|
||||
|
||||
protected var _userMe:User;
|
||||
|
||||
public function set user(u:User):void {
|
||||
_user = u;
|
||||
update();
|
||||
}
|
||||
|
||||
public function set userMe(u:User):void {
|
||||
_userMe = u;
|
||||
update();
|
||||
}
|
||||
|
||||
public function get user():User {
|
||||
return _user;
|
||||
}
|
||||
|
||||
public function get userMe():User {
|
||||
return _userMe;
|
||||
}
|
||||
|
||||
public function update():void {
|
||||
if (user != null && FlexGlobals.topLevelApplication.mainshell != null && userMe != null) {
|
||||
if (_user.me) {
|
||||
userNameText.text = _user.name + " " + resourceManager.getString('resources', 'userDetail.you');
|
||||
} else {
|
||||
userNameText.text = _user.name;
|
||||
}
|
||||
if (_user.presenter) {
|
||||
roleText.text = resourceManager.getString('resources', 'participants.status.presenter');
|
||||
if (_user.role == User.MODERATOR) {
|
||||
roleText.text += "/" + resourceManager.getString('resources', 'participants.status.moderator');
|
||||
}
|
||||
} else if (_user.role == User.MODERATOR) {
|
||||
roleText.text = resourceManager.getString('resources', 'participants.status.moderator');
|
||||
} else {
|
||||
roleText.text = "";
|
||||
}
|
||||
if (_user.status != User.NO_STATUS && _userMe.role == User.MODERATOR) {
|
||||
clearStatusButton.includeInLayout = true;
|
||||
clearStatusButton.visible = true;
|
||||
} else {
|
||||
clearStatusButton.includeInLayout = false;
|
||||
clearStatusButton.visible = false;
|
||||
}
|
||||
if (!_user.presenter && _userMe.role == User.MODERATOR) {
|
||||
makePresenterButton.includeInLayout = true;
|
||||
makePresenterButton.visible = true;
|
||||
} else {
|
||||
makePresenterButton.includeInLayout = false;
|
||||
makePresenterButton.visible = false;
|
||||
}
|
||||
clearStatusButton.label = resourceManager.getString('resources', 'profile.emojiStatus.clear');
|
||||
cameraIcon.visible = cameraIcon.includeInLayout = _user.hasStream;
|
||||
micIcon.visible = micIcon.includeInLayout = (_user.voiceJoined && !_user.muted);
|
||||
micOffIcon.visible = micOffIcon.includeInLayout = (_user.voiceJoined && _user.muted);
|
||||
noMediaText.visible = noMediaText.includeInLayout = (!_user.voiceJoined && !_user.hasStream);
|
||||
//TODO: buttons
|
||||
showCameraButton0.includeInLayout = _user.hasStream;
|
||||
showCameraButton0.visible = _user.hasStream;
|
||||
showPrivateChat0.includeInLayout = !_user.me;
|
||||
showPrivateChat0.visible = !_user.me;
|
||||
}
|
||||
}
|
||||
|
||||
public function updateLockButtons(isRoomLocked:Boolean):void {
|
||||
if (_userMe.role == User.MODERATOR && isRoomLocked && _user.role != User.MODERATOR) {
|
||||
if (_user.locked) {
|
||||
unlockButton.visible = true;
|
||||
unlockButton.includeInLayout = true;
|
||||
lockButton.visible = false;
|
||||
lockButton.includeInLayout = false;
|
||||
} else {
|
||||
unlockButton.visible = false;
|
||||
unlockButton.includeInLayout = false;
|
||||
lockButton.visible = true;
|
||||
lockButton.includeInLayout = true;
|
||||
}
|
||||
} else {
|
||||
unlockButton.visible = false;
|
||||
unlockButton.includeInLayout = false;
|
||||
lockButton.visible = false;
|
||||
lockButton.includeInLayout = false;
|
||||
}
|
||||
}
|
||||
|
||||
public function dispose():void {
|
||||
}
|
||||
|
||||
public function get showCameraButton():Button {
|
||||
return showCameraButton0;
|
||||
}
|
||||
|
||||
public function get showPrivateChat():Button {
|
||||
return showPrivateChat0;
|
||||
}
|
||||
|
||||
public function get clearStatusButton():Button {
|
||||
return clearStatusButton0;
|
||||
}
|
||||
|
||||
public function get promoteButton():Button {
|
||||
return promoteButton0;
|
||||
}
|
||||
|
||||
public function get makePresenterButton():Button {
|
||||
return makePresenterButton0;
|
||||
}
|
||||
|
||||
public function get lockButton():Button {
|
||||
return lockButton0;
|
||||
}
|
||||
|
||||
public function get unlockButton():Button {
|
||||
return unlockButton0;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,104 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<common:NoTabView xmlns:fx="http://ns.adobe.com/mxml/2009"
|
||||
xmlns:s="library://ns.adobe.com/flex/spark"
|
||||
xmlns:mx="library://ns.adobe.com/flex/mx"
|
||||
xmlns:common="org.bigbluebutton.air.common.views.*"
|
||||
styleName="userDetailView">
|
||||
<s:Scroller width="100%"
|
||||
height="100%"
|
||||
layoutDirection="">
|
||||
|
||||
<s:VGroup width="100%"
|
||||
height="100%"
|
||||
horizontalAlign="center">
|
||||
|
||||
<s:BorderContainer width="100%"
|
||||
height="40%"
|
||||
borderVisible="false"
|
||||
backgroundColor="{getStyle('bgColor')}">
|
||||
<s:layout>
|
||||
<s:VerticalLayout verticalAlign="middle"
|
||||
horizontalAlign="center" />
|
||||
</s:layout>
|
||||
<s:Image id="userDetailIcon"
|
||||
styleName="icon userDetailIcon" />
|
||||
<s:Label id="userNameText"
|
||||
width="100%"
|
||||
textAlign="center"
|
||||
styleName="userDetailsName contentFontSize" />
|
||||
<s:Label id="roleText"
|
||||
width="100%"
|
||||
textAlign="center"
|
||||
styleName="userDetailsStatus subContentFontSize" />
|
||||
</s:BorderContainer>
|
||||
<s:VGroup width="100%"
|
||||
height="30%"
|
||||
horizontalAlign="center"
|
||||
verticalAlign="middle">
|
||||
<s:Label width="50%"
|
||||
textAlign="center"
|
||||
styleName="userDetailsStatus contentFontSize"
|
||||
text="{resourceManager.getString('resources', 'userDetail.media')}" />
|
||||
<s:HGroup horizontalAlign="center">
|
||||
<s:Image id="cameraIcon"
|
||||
styleName="icon cameraIcon" />
|
||||
<s:Image id="micIcon"
|
||||
styleName="icon micIcon" />
|
||||
<s:Image id="micOffIcon"
|
||||
styleName="icon micOffIcon"
|
||||
visible="false"
|
||||
includeInLayout="false" />
|
||||
<s:Label id="noMediaText"
|
||||
width="100%"
|
||||
styleName="userDetailsStatus subContentFontSize"
|
||||
visible="false"
|
||||
includeInLayout="false"
|
||||
text="{resourceManager.getString('resources', 'userDetail.media.noMedia')}" />
|
||||
</s:HGroup>
|
||||
</s:VGroup>
|
||||
<s:VGroup width="100%"
|
||||
height="30%"
|
||||
horizontalAlign="center">
|
||||
<s:Button id="showCameraButton0"
|
||||
width="90%"
|
||||
label="{resourceManager.getString('resources', 'userDetail.cameraBtn.text')}"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
<s:Button id="showPrivateChat0"
|
||||
width="90%"
|
||||
label="{resourceManager.getString('resources', 'userDetail.privateChatBtn.text')}"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
<s:Button includeInLayout="false"
|
||||
visible="false"
|
||||
width="90%"
|
||||
label="{resourceManager.getString('resources', 'userDetail.clearStatus')}"
|
||||
id="clearStatusButton0"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
<s:Button includeInLayout="false"
|
||||
visible="false"
|
||||
id="makePresenterButton0"
|
||||
width="90%"
|
||||
label="{resourceManager.getString('resources', 'userDetail.presenterBtn.text')}"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
<s:Button includeInLayout="false"
|
||||
visible="false"
|
||||
width="90%"
|
||||
id="promoteButton0"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
<s:Button includeInLayout="false"
|
||||
visible="false"
|
||||
width="90%"
|
||||
id="lockButton0"
|
||||
label="{resourceManager.getString('resources', 'userDetail.lockButton.text')}"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
<s:Button includeInLayout="false"
|
||||
visible="false"
|
||||
width="90%"
|
||||
id="unlockButton0"
|
||||
label="{resourceManager.getString('resources', 'userDetail.unlockButton.text')}"
|
||||
styleName="userSettingsButton logoutButton contentFontSize" />
|
||||
</s:VGroup>
|
||||
|
||||
</s:VGroup>
|
||||
</s:Scroller>
|
||||
|
||||
</common:NoTabView>
|
@ -1,120 +0,0 @@
|
||||
package org.bigbluebutton.air.users.views.userdetails {
|
||||
|
||||
import flash.events.MouseEvent;
|
||||
|
||||
import mx.core.FlexGlobals;
|
||||
|
||||
import org.bigbluebutton.air.common.PageEnum;
|
||||
import org.bigbluebutton.air.common.TransitionAnimationEnum;
|
||||
import org.bigbluebutton.air.main.models.IUISession;
|
||||
import org.bigbluebutton.lib.main.commands.ClearUserStatusSignal;
|
||||
import org.bigbluebutton.lib.main.commands.LockUserSignal;
|
||||
import org.bigbluebutton.lib.main.commands.PresenterSignal;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Mediator;
|
||||
|
||||
public class UserDetailsViewMediator extends Mediator {
|
||||
|
||||
[Inject]
|
||||
public var view:IUserDetailsView;
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
|
||||
[Inject]
|
||||
public var userUISession:IUISession;
|
||||
|
||||
[Inject]
|
||||
public var clearUserStatusSignal:ClearUserStatusSignal;
|
||||
|
||||
[Inject]
|
||||
public var presenterSignal:PresenterSignal;
|
||||
|
||||
[Inject]
|
||||
public var lockUserSignal:LockUserSignal;
|
||||
|
||||
protected var _user:User;
|
||||
|
||||
override public function initialize():void {
|
||||
_user = userUISession.currentPageDetails as User;
|
||||
userSession.userList.userChangeSignal.add(userChanged);
|
||||
userSession.userList.userRemovedSignal.add(userRemoved);
|
||||
view.user = _user;
|
||||
view.userMe = userSession.userList.me;
|
||||
view.showCameraButton.addEventListener(MouseEvent.CLICK, onShowCameraButton);
|
||||
view.showPrivateChat.addEventListener(MouseEvent.CLICK, onShowPrivateChatButton);
|
||||
view.clearStatusButton.addEventListener(MouseEvent.CLICK, onClearStatusButton);
|
||||
view.makePresenterButton.addEventListener(MouseEvent.CLICK, onMakePresenterButton);
|
||||
view.updateLockButtons(isRoomLocked());
|
||||
view.lockButton.addEventListener(MouseEvent.CLICK, onLockUser);
|
||||
view.unlockButton.addEventListener(MouseEvent.CLICK, onUnlockUser);
|
||||
FlexGlobals.topLevelApplication.topActionBar.pageName.text = view.user.name;
|
||||
}
|
||||
|
||||
protected function onLockUser(event:MouseEvent):void {
|
||||
//dispatch lock signal
|
||||
lockUserSignal.dispatch(_user.userID, true);
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
protected function onUnlockUser(event:MouseEvent):void {
|
||||
//dispatch lock signal
|
||||
lockUserSignal.dispatch(_user.userID, false);
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
private function isRoomLocked():Boolean {
|
||||
return userSession.lockSettings.disableCam || userSession.lockSettings.disableMic || userSession.lockSettings.disablePrivateChat || userSession.lockSettings.disablePublicChat || userSession.lockSettings.lockedLayout;
|
||||
}
|
||||
|
||||
protected function onShowCameraButton(event:MouseEvent):void {
|
||||
userUISession.pushPage(PageEnum.VIDEO_CHAT, _user, TransitionAnimationEnum.APPEAR);
|
||||
}
|
||||
|
||||
protected function onShowPrivateChatButton(event:MouseEvent):void {
|
||||
userUISession.pushPage(PageEnum.CHAT, _user, TransitionAnimationEnum.APPEAR);
|
||||
}
|
||||
|
||||
protected function onClearStatusButton(event:MouseEvent):void {
|
||||
clearUserStatusSignal.dispatch(_user.userID);
|
||||
userSession.userList.getUser(_user.userID).status = User.NO_STATUS;
|
||||
view.clearStatusButton.includeInLayout = false;
|
||||
view.clearStatusButton.visible = false;
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
protected function onMakePresenterButton(event:MouseEvent):void {
|
||||
presenterSignal.dispatch(_user, userSession.userList.me.userID);
|
||||
userUISession.popPage();
|
||||
}
|
||||
|
||||
private function userRemoved(userID:String):void {
|
||||
if (_user.userID == userID) {
|
||||
userUISession.popPage();
|
||||
}
|
||||
}
|
||||
|
||||
private function userChanged(user:User, type:int):void {
|
||||
if (_user.userID == user.userID || user.me) {
|
||||
view.update();
|
||||
view.updateLockButtons(isRoomLocked());
|
||||
}
|
||||
}
|
||||
|
||||
override public function destroy():void {
|
||||
super.destroy();
|
||||
view.clearStatusButton.removeEventListener(MouseEvent.CLICK, onClearStatusButton);
|
||||
view.makePresenterButton.removeEventListener(MouseEvent.CLICK, onMakePresenterButton);
|
||||
view.lockButton.removeEventListener(MouseEvent.CLICK, onLockUser);
|
||||
view.unlockButton.removeEventListener(MouseEvent.CLICK, onUnlockUser);
|
||||
view.showCameraButton.removeEventListener(MouseEvent.CLICK, onShowCameraButton);
|
||||
view.showPrivateChat.removeEventListener(MouseEvent.CLICK, onShowPrivateChatButton);
|
||||
userSession.userList.userChangeSignal.remove(userChanged);
|
||||
userSession.userList.userRemovedSignal.remove(userRemoved);
|
||||
view.dispose();
|
||||
view = null;
|
||||
}
|
||||
}
|
||||
}
|
16
clients/flash/air-client/src/org/bigbluebutton/air/video/commands/ShareCameraCommand.as
Normal file → Executable file
16
clients/flash/air-client/src/org/bigbluebutton/air/video/commands/ShareCameraCommand.as
Normal file → Executable file
@ -89,13 +89,15 @@ package org.bigbluebutton.air.video.commands {
|
||||
}
|
||||
|
||||
private function enableCamera(position:String):void {
|
||||
userSession.videoConnection.camera = setupCamera(position);
|
||||
userSession.videoConnection.selectCameraQuality(userSession.videoConnection.selectedCameraQuality);
|
||||
var userId:String = userSession.userId;
|
||||
if (userSession.videoConnection.camera) {
|
||||
var streamName:String = buildStreamName(userSession.videoConnection.camera.width, userSession.videoConnection.camera.height, userId);
|
||||
usersService.addStream(userId, streamName);
|
||||
userSession.videoConnection.startPublishing(userSession.videoConnection.camera, streamName);
|
||||
if (position && userSession.videoConnection.selectedCameraQuality) {
|
||||
userSession.videoConnection.camera = setupCamera(position);
|
||||
userSession.videoConnection.selectCameraQuality(userSession.videoConnection.selectedCameraQuality);
|
||||
var userId:String = userSession.userId;
|
||||
if (userSession.videoConnection.camera) {
|
||||
var streamName:String = buildStreamName(userSession.videoConnection.camera.width, userSession.videoConnection.camera.height, userId);
|
||||
usersService.addStream(userId, streamName);
|
||||
userSession.videoConnection.startPublishing(userSession.videoConnection.camera, streamName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
20
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/models/ChatMessage.as
Normal file → Executable file
20
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/models/ChatMessage.as
Normal file → Executable file
@ -7,31 +7,15 @@ package org.bigbluebutton.lib.chat.models {
|
||||
|
||||
public var senderId:String;
|
||||
|
||||
public var senderLanguage:String;
|
||||
|
||||
public var receiverLanguage:String;
|
||||
|
||||
public var translate:Boolean;
|
||||
|
||||
public var senderColor:uint;
|
||||
|
||||
public var translateLocale:String = "";
|
||||
|
||||
public var translatedLocaleTooltip:String = "";
|
||||
|
||||
public var name:String;
|
||||
|
||||
public var time:String;
|
||||
|
||||
public var lastTime:String;
|
||||
|
||||
public var senderText:String;
|
||||
|
||||
public var translatedText:String;
|
||||
|
||||
public var translated:Boolean = false;
|
||||
|
||||
public var translatedColor:uint;
|
||||
public var message:String;
|
||||
|
||||
// Stores the time (millis) when the sender sent the message.
|
||||
public var fromTime:Number;
|
||||
@ -46,7 +30,7 @@ package org.bigbluebutton.lib.chat.models {
|
||||
public function toString():String {
|
||||
var result:String;
|
||||
// Remember to localize this later
|
||||
result = "Chat message " + name + " said " + stripTags(translatedText) + " at " + time;
|
||||
result = "Chat message " + name + " said " + stripTags(message) + " at " + time;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
15
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/models/ChatMessageVO.as
Normal file → Executable file
15
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/models/ChatMessageVO.as
Normal file → Executable file
@ -1,11 +1,8 @@
|
||||
package org.bigbluebutton.lib.chat.models {
|
||||
|
||||
public class ChatMessageVO {
|
||||
// The type of chat (PUBLIC or PRIVATE)
|
||||
public var chatType:String;
|
||||
|
||||
// The sender
|
||||
public var fromUserID:String;
|
||||
public var fromUserId:String;
|
||||
|
||||
public var fromUsername:String;
|
||||
|
||||
@ -18,10 +15,8 @@ package org.bigbluebutton.lib.chat.models {
|
||||
// sent. This is used by the receiver to convert to locale time.
|
||||
public var fromTimezoneOffset:Number;
|
||||
|
||||
public var fromLang:String;
|
||||
|
||||
// The receiver.
|
||||
public var toUserID:String = "public_chat_userid";
|
||||
public var toUserId:String = "public_chat_userid";
|
||||
|
||||
public var toUsername:String = "public_chat_username";
|
||||
|
||||
@ -29,15 +24,13 @@ package org.bigbluebutton.lib.chat.models {
|
||||
|
||||
public function toObj():Object {
|
||||
var m:Object = new Object();
|
||||
m.chatType = chatType;
|
||||
m.fromUserID = fromUserID;
|
||||
m.fromUserId = fromUserId;
|
||||
m.fromUsername = fromUsername;
|
||||
m.fromColor = fromColor;
|
||||
m.fromTime = fromTime;
|
||||
m.fromTimezoneOffset = fromTimezoneOffset;
|
||||
m.fromLang = fromLang;
|
||||
m.message = message;
|
||||
m.toUserID = toUserID;
|
||||
m.toUserId = toUserId;
|
||||
m.toUsername = toUsername;
|
||||
return m;
|
||||
}
|
||||
|
10
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/models/Conversation.as
Normal file → Executable file
10
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/models/Conversation.as
Normal file → Executable file
@ -30,14 +30,10 @@ package org.bigbluebutton.lib.chat.models {
|
||||
cm.lastSenderId = getLastSender();
|
||||
cm.lastTime = getLastTime();
|
||||
}
|
||||
cm.senderId = msg.fromUserID;
|
||||
cm.senderLanguage = msg.fromLang;
|
||||
cm.receiverLanguage = ChatUtil.getUserLang();
|
||||
cm.translatedText = msg.message;
|
||||
cm.senderText = msg.message;
|
||||
cm.senderId = msg.fromUserId;
|
||||
cm.name = msg.fromUsername;
|
||||
cm.senderColor = uint(msg.fromColor);
|
||||
cm.translatedColor = uint(msg.fromColor);
|
||||
cm.message = msg.message;
|
||||
cm.fromTime = msg.fromTime;
|
||||
cm.fromTimezoneOffset = msg.fromTimezoneOffset;
|
||||
var sentTime:Date = new Date();
|
||||
@ -61,7 +57,7 @@ package org.bigbluebutton.lib.chat.models {
|
||||
var allText:String = "";
|
||||
for (var i:int = 0; i < messages.length; i++) {
|
||||
var item:ChatMessage = messages.getItemAt(i) as ChatMessage;
|
||||
allText += "\n" + item.name + " - " + item.time + " : " + item.translatedText;
|
||||
allText += "\n" + item.name + " - " + item.time + " : " + item.message;
|
||||
}
|
||||
return allText;
|
||||
}
|
||||
|
96
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/services/ChatMessageReceiver.as
Normal file → Executable file
96
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/services/ChatMessageReceiver.as
Normal file → Executable file
@ -5,77 +5,89 @@ package org.bigbluebutton.lib.chat.services {
|
||||
import org.bigbluebutton.lib.chat.models.ChatMessageVO;
|
||||
import org.bigbluebutton.lib.chat.models.IChatMessagesSession;
|
||||
import org.bigbluebutton.lib.common.models.IMessageListener;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
|
||||
public class ChatMessageReceiver implements IMessageListener {
|
||||
public var userSession:IUserSession;
|
||||
private const LOG:String = "ChatMessageReceiver::";
|
||||
|
||||
public var chatMessagesSession:IChatMessagesSession;
|
||||
private var userSession:IUserSession;
|
||||
|
||||
public function ChatMessageReceiver(userSession:IUserSession, chatMessagesSession:IChatMessagesSession) {
|
||||
private var conferenceParameters:IConferenceParameters;
|
||||
|
||||
private var chatMessagesSession:IChatMessagesSession;
|
||||
|
||||
public function ChatMessageReceiver(userSession:IUserSession, conferenceParameters:IConferenceParameters, chatMessagesSession:IChatMessagesSession) {
|
||||
this.userSession = userSession;
|
||||
this.conferenceParameters = conferenceParameters;
|
||||
this.chatMessagesSession = chatMessagesSession;
|
||||
}
|
||||
|
||||
public function onMessage(messageName:String, message:Object):void {
|
||||
switch (messageName) {
|
||||
case "ChatReceivePublicMessageCommand":
|
||||
handleChatReceivePublicMessageCommand(message);
|
||||
case "GetChatHistoryRespMsg":
|
||||
handleGetChatHistoryRespMsg(message);
|
||||
break;
|
||||
case "ChatReceivePrivateMessageCommand":
|
||||
handleChatReceivePrivateMessageCommand(message);
|
||||
case "SendPublicMessageEvtMsg":
|
||||
handleSendPublicMessageEvtMsg(message);
|
||||
break;
|
||||
case "ChatRequestMessageHistoryReply":
|
||||
handleChatRequestMessageHistoryReply(message);
|
||||
case "SendPrivateMessageEvtMsg":
|
||||
handleSendPrivateMessageEvtMsg(message);
|
||||
break;
|
||||
case "ClearPublicChatHistoryEvtMsg":
|
||||
handleClearPublicChatHistoryEvtMsg(message);
|
||||
break;
|
||||
default:
|
||||
// LogUtil.warn("Cannot handle message [" + messageName + "]");
|
||||
}
|
||||
}
|
||||
|
||||
private function handleChatRequestMessageHistoryReply(message:Object):void {
|
||||
var messages:Array = JSON.parse(message.msg as String) as Array;
|
||||
private function handleGetChatHistoryRespMsg(msg:Object):void {
|
||||
trace(LOG + "Received [GetChatHistoryRespMsg] from server.");
|
||||
var messages:Array = msg.body.history as Array;
|
||||
var msgCount:Number = messages.length;
|
||||
|
||||
chatMessagesSession.publicConversation.messages = new ArrayCollection();
|
||||
chatMessagesSession.publicConversation.newMessages = 0; //resetNewMessages();
|
||||
for (var i:int = 0; i < msgCount; i++) {
|
||||
handleChatReceivePublicMessageCommand(messages[i]);
|
||||
var cm:ChatMessageVO = processIncomingChatMessage(messages[i]);
|
||||
chatMessagesSession.newPublicMessage(cm);
|
||||
}
|
||||
userSession.loadedMessageHistorySignal.dispatch();
|
||||
}
|
||||
|
||||
private function handleChatReceivePublicMessageCommand(message:Object):void {
|
||||
trace("Handling public chat message [" + message.message + "]");
|
||||
var msg:ChatMessageVO = new ChatMessageVO();
|
||||
msg.chatType = message.chatType;
|
||||
msg.fromUserID = message.fromUserID;
|
||||
msg.fromUsername = message.fromUsername;
|
||||
msg.fromColor = message.fromColor;
|
||||
msg.fromLang = message.fromLang;
|
||||
msg.fromTime = message.fromTime;
|
||||
msg.fromTimezoneOffset = message.fromTimezoneOffset;
|
||||
msg.toUserID = message.toUserID;
|
||||
msg.toUsername = message.toUsername;
|
||||
msg.message = message.message;
|
||||
chatMessagesSession.newPublicMessage(msg);
|
||||
private function handleSendPublicMessageEvtMsg(msg:Object):void {
|
||||
trace(LOG + "Received [SendPublicMessageEvtMsg] from server.");
|
||||
var cm:ChatMessageVO = processIncomingChatMessage(msg.body.message);
|
||||
|
||||
chatMessagesSession.newPublicMessage(cm);
|
||||
}
|
||||
|
||||
private function handleChatReceivePrivateMessageCommand(message:Object):void {
|
||||
trace("Handling private chat message");
|
||||
private function handleSendPrivateMessageEvtMsg(msg:Object):void {
|
||||
trace(LOG + "Received [SendPrivateMessageEvtMsg] from server.");
|
||||
var cm:ChatMessageVO = processIncomingChatMessage(msg.body.message);
|
||||
|
||||
var userId:String = (cm.fromUserId == userSession.userId ? cm.toUserId : cm.fromUserId);
|
||||
var userName:String = (cm.fromUserId == userSession.userId ? cm.toUsername : cm.fromUsername);
|
||||
chatMessagesSession.newPrivateMessage(userId, userName, cm);
|
||||
}
|
||||
|
||||
private function handleClearPublicChatHistoryEvtMsg(message:Object):void {
|
||||
trace(LOG + "Received [ClearPublicChatHistoryEvtMsg] from server.");
|
||||
trace("ClearPublicChatHistoryEvtMsg isn't being handled yet");
|
||||
}
|
||||
|
||||
private function processIncomingChatMessage(rawMessage:Object):ChatMessageVO {
|
||||
var msg:ChatMessageVO = new ChatMessageVO();
|
||||
msg.chatType = message.chatType;
|
||||
msg.fromUserID = message.fromUserID;
|
||||
msg.fromUsername = message.fromUsername;
|
||||
msg.fromColor = message.fromColor;
|
||||
msg.fromLang = message.fromLang;
|
||||
msg.fromTime = message.fromTime;
|
||||
msg.fromTimezoneOffset = message.fromTimezoneOffset;
|
||||
msg.toUserID = message.toUserID;
|
||||
msg.toUsername = message.toUsername;
|
||||
msg.message = message.message;
|
||||
var userId:String = (msg.fromUserID == userSession.userId ? msg.toUserID : msg.fromUserID);
|
||||
var userName:String = (msg.fromUserID == userSession.userId ? msg.toUsername : msg.fromUsername);
|
||||
chatMessagesSession.newPrivateMessage(userId, userName, msg);
|
||||
msg.fromUserId = rawMessage.fromUserId;
|
||||
msg.fromUsername = rawMessage.fromUsername;
|
||||
msg.fromColor = rawMessage.fromColor;
|
||||
msg.fromTime = rawMessage.fromTime;
|
||||
msg.fromTimezoneOffset = rawMessage.fromTimezoneOffset;
|
||||
msg.toUserId = rawMessage.toUserId;
|
||||
msg.toUsername = rawMessage.toUsername;
|
||||
msg.message = rawMessage.message;
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
75
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/services/ChatMessageSender.as
Normal file → Executable file
75
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/services/ChatMessageSender.as
Normal file → Executable file
@ -1,63 +1,72 @@
|
||||
package org.bigbluebutton.lib.chat.services {
|
||||
|
||||
import org.bigbluebutton.lib.chat.models.ChatMessageVO;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.osflash.signals.ISignal;
|
||||
import org.osflash.signals.Signal;
|
||||
import org.osflash.signals.ISignal;
|
||||
|
||||
public class ChatMessageSender {
|
||||
private const LOG:String = "ChatMessageSender::";
|
||||
|
||||
public var userSession:IUserSession;
|
||||
private var userSession:IUserSession;
|
||||
|
||||
private var conferenceParameters:IConferenceParameters;
|
||||
|
||||
private var successSendingMessageSignal:ISignal;
|
||||
|
||||
private var failureSendingMessageSignal:ISignal;
|
||||
|
||||
public function ChatMessageSender(userSession:IUserSession, successSendMessageSignal:ISignal, failureSendingMessageSignal:ISignal) {
|
||||
public function ChatMessageSender(userSession:IUserSession, conferenceParameters:IConferenceParameters, successSendMessageSignal:ISignal, failureSendingMessageSignal:ISignal) {
|
||||
this.userSession = userSession;
|
||||
this.conferenceParameters = conferenceParameters;
|
||||
this.successSendingMessageSignal = successSendMessageSignal;
|
||||
this.failureSendingMessageSignal = failureSendingMessageSignal;
|
||||
}
|
||||
|
||||
public function getPublicChatMessages():void {
|
||||
trace(LOG + "Sending [chat.getPublicMessages] to server.");
|
||||
userSession.mainConnection.sendMessage("chat.sendPublicChatHistory", function(result:String):void { // On successful result
|
||||
publicChatMessagesOnSuccessSignal.dispatch(result);
|
||||
}, function(status:String):void { // status - On error occurred
|
||||
publicChatMessagesOnFailureSignal.dispatch(status);
|
||||
});
|
||||
trace(LOG + "Sending [GetChatHistoryReqMsg] to server.");
|
||||
var message:Object = {
|
||||
header: {name: "GetChatHistoryReqMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function sendPublicMessage(message:ChatMessageVO):void {
|
||||
trace(LOG + "Sending [chat.sendPublicMessage] to server. [" + message.message + "]");
|
||||
userSession.mainConnection.sendMessage("chat.sendPublicMessage", function(result:String):void { // On successful result
|
||||
successSendingMessageSignal.dispatch(result);
|
||||
}, function(status:String):void { // status - On error occurred
|
||||
failureSendingMessageSignal.dispatch(status);
|
||||
}, message.toObj());
|
||||
public function sendPublicMessage(cm:ChatMessageVO):void {
|
||||
trace(LOG + "Sending [SendPublicMessagePubMsg] to server. [" + cm + "]");
|
||||
var message:Object = {
|
||||
header: {name: "SendPublicMessagePubMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {message: cm}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(sendChatSuccessResponse, sendChatFailureResponse, message);
|
||||
}
|
||||
|
||||
public function sendPrivateMessage(message:ChatMessageVO):void {
|
||||
trace(LOG + "Sending [chat.sendPrivateMessage] to server.");
|
||||
trace(LOG + "Sending fromUserID [" + message.fromUserID + "] to toUserID [" + message.toUserID + "]");
|
||||
userSession.mainConnection.sendMessage("chat.sendPrivateMessage", function(result:String):void { // On successful result
|
||||
successSendingMessageSignal.dispatch(result);
|
||||
}, function(status:String):void { // status - On error occurred
|
||||
failureSendingMessageSignal.dispatch(status);
|
||||
}, message.toObj());
|
||||
public function sendPrivateMessage(cm:ChatMessageVO):void {
|
||||
trace(LOG + "Sending [SendPrivateMessagePubMsg] to server.");
|
||||
trace(LOG + "Sending fromUserID [" + cm.fromUserId + "] to toUserID [" + cm.toUserId + "]");
|
||||
var message:Object = {
|
||||
header: {name: "SendPrivateMessagePubMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {message: cm}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(sendChatSuccessResponse, sendChatFailureResponse, message);
|
||||
}
|
||||
|
||||
private var _publicChatMessagesOnSuccessSignal:Signal = new Signal();
|
||||
// The default callbacks of userSession.mainconnection.sendMessage
|
||||
private function defaultSuccessResponse(result:String):void {
|
||||
trace(result);
|
||||
};
|
||||
|
||||
private var _publicChatMessagesOnFailureSignal:Signal = new Signal();
|
||||
private function defaultFailureResponse(status:String):void {
|
||||
trace(status);
|
||||
};
|
||||
|
||||
public function get publicChatMessagesOnSuccessSignal():Signal {
|
||||
return _publicChatMessagesOnSuccessSignal;
|
||||
}
|
||||
// The callbacks when sending chat messages
|
||||
private function sendChatSuccessResponse(result:String):void {
|
||||
successSendingMessageSignal.dispatch(result);
|
||||
};
|
||||
|
||||
public function get publicChatMessagesOnFailureSignal():Signal {
|
||||
return _publicChatMessagesOnFailureSignal;
|
||||
}
|
||||
private function sendChatFailureResponse(status:String):void {
|
||||
failureSendingMessageSignal.dispatch(status);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
12
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/services/ChatMessageService.as
Normal file → Executable file
12
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/services/ChatMessageService.as
Normal file → Executable file
@ -38,8 +38,8 @@ package org.bigbluebutton.lib.chat.services {
|
||||
}
|
||||
|
||||
public function setupMessageSenderReceiver():void {
|
||||
chatMessageSender = new ChatMessageSender(userSession, _sendMessageOnSuccessSignal, _sendMessageOnFailureSignal);
|
||||
chatMessageReceiver = new ChatMessageReceiver(userSession, chatMessagesSession);
|
||||
chatMessageSender = new ChatMessageSender(userSession, conferenceParameters, _sendMessageOnSuccessSignal, _sendMessageOnFailureSignal);
|
||||
chatMessageReceiver = new ChatMessageReceiver(userSession, conferenceParameters, chatMessagesSession);
|
||||
userSession.mainConnection.addMessageListener(chatMessageReceiver);
|
||||
}
|
||||
|
||||
@ -64,18 +64,16 @@ package org.bigbluebutton.lib.chat.services {
|
||||
var welcome:String = conferenceParameters.welcome;
|
||||
if (welcome != "") {
|
||||
var msg:ChatMessageVO = new ChatMessageVO();
|
||||
msg.chatType = "PUBLIC_CHAT"
|
||||
msg.fromUserID = " ";
|
||||
msg.fromUserId = " ";
|
||||
msg.fromUsername = " ";
|
||||
msg.fromColor = "86187";
|
||||
msg.fromLang = "en";
|
||||
msg.fromTime = new Date().time;
|
||||
msg.fromTimezoneOffset = new Date().timezoneOffset;
|
||||
msg.toUserID = " ";
|
||||
msg.toUserId = " ";
|
||||
msg.toUsername = " ";
|
||||
msg.message = welcome;
|
||||
// imitate new public message being sent
|
||||
chatMessageReceiver.onMessage("ChatReceivePublicMessageCommand", msg);
|
||||
chatMessagesSession.newPublicMessage(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
6
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/views/ChatItemRenderer.mxml
Normal file → Executable file
6
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/views/ChatItemRenderer.mxml
Normal file → Executable file
@ -29,10 +29,10 @@
|
||||
var m:ChatMessage = obj as ChatMessage;
|
||||
if (m) {
|
||||
time.text = m.time
|
||||
if (!isHTMLString(m.senderText)) {
|
||||
message.text = m.senderText;
|
||||
if (!isHTMLString(m.message)) {
|
||||
message.text = m.message;
|
||||
} else {
|
||||
message.textFlow = TextConverter.importToFlow(m.senderText, TextConverter.TEXT_FIELD_HTML_FORMAT);
|
||||
message.textFlow = TextConverter.importToFlow(m.message, TextConverter.TEXT_FIELD_HTML_FORMAT);
|
||||
}
|
||||
var sameUser:Boolean = (m.lastSenderId == m.senderId);
|
||||
var sameTime:Boolean = (m.lastTime == m.time);
|
||||
|
43
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/views/ChatViewMediatorBase.as
Normal file → Executable file
43
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/chat/views/ChatViewMediatorBase.as
Normal file → Executable file
@ -9,8 +9,9 @@ package org.bigbluebutton.lib.chat.views {
|
||||
import org.bigbluebutton.lib.chat.models.Conversation;
|
||||
import org.bigbluebutton.lib.chat.models.IChatMessagesSession;
|
||||
import org.bigbluebutton.lib.chat.services.IChatMessageService;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
import org.bigbluebutton.lib.user.models.UserChangeEnum;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Mediator;
|
||||
|
||||
@ -26,17 +27,16 @@ package org.bigbluebutton.lib.chat.views {
|
||||
public var chatMessagesSession:IChatMessagesSession;
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
protected var _publicChat:Boolean = true;
|
||||
|
||||
protected var _user:User;
|
||||
protected var _user:User2x;
|
||||
|
||||
override public function initialize():void {
|
||||
chatMessageService.sendMessageOnSuccessSignal.add(onSendSuccess);
|
||||
chatMessageService.sendMessageOnFailureSignal.add(onSendFailure);
|
||||
userSession.userList.userRemovedSignal.add(userRemoved);
|
||||
userSession.userList.userAddedSignal.add(userAdded);
|
||||
meetingData.users.userChangeSignal.add(onUserChange);
|
||||
|
||||
view.textInput.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
|
||||
view.sendButton.addEventListener(MouseEvent.CLICK, sendButtonClickHandler);
|
||||
@ -56,12 +56,23 @@ package org.bigbluebutton.lib.chat.views {
|
||||
view.textInput.enabled = true;
|
||||
}
|
||||
|
||||
private function onUserChange(user:User2x, prop:int):void {
|
||||
switch (prop) {
|
||||
case UserChangeEnum.JOIN:
|
||||
userAdded(user);
|
||||
break;
|
||||
case UserChangeEnum.LEAVE:
|
||||
userRemoved(user);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When user left the conference, add '[Offline]' to the username
|
||||
* and disable text input
|
||||
*/
|
||||
protected function userRemoved(userID:String):void {
|
||||
if (view != null && _user && _user.userId == userID) {
|
||||
protected function userRemoved(user:User2x):void {
|
||||
if (view != null && _user && _user.intId == user.intId) {
|
||||
view.textInput.enabled = false;
|
||||
}
|
||||
}
|
||||
@ -70,8 +81,8 @@ package org.bigbluebutton.lib.chat.views {
|
||||
* When user returned(refreshed the page) to the conference, remove '[Offline]' from the username
|
||||
* and enable text input
|
||||
*/
|
||||
protected function userAdded(newuser:User):void {
|
||||
if ((view != null) && (_user != null) && (_user.userId == newuser.userId)) {
|
||||
protected function userAdded(newuser:User2x):void {
|
||||
if ((view != null) && (_user != null) && (_user.intId == newuser.intId)) {
|
||||
view.textInput.enabled = true;
|
||||
}
|
||||
}
|
||||
@ -91,20 +102,17 @@ package org.bigbluebutton.lib.chat.views {
|
||||
var currentDate:Date = new Date();
|
||||
//TODO get info from the right source
|
||||
var m:ChatMessageVO = new ChatMessageVO();
|
||||
m.fromUserID = userSession.userId;
|
||||
m.fromUsername = userSession.userList.getUser(userSession.userId).name;
|
||||
m.fromUserId = meetingData.users.me.intId;
|
||||
m.fromUsername = meetingData.users.me.name;
|
||||
m.fromColor = "0";
|
||||
m.fromTime = currentDate.time;
|
||||
m.fromTimezoneOffset = currentDate.timezoneOffset;
|
||||
m.fromLang = "en";
|
||||
m.message = message;
|
||||
m.toUserID = _publicChat ? "public_chat_userid" : _user.userId;
|
||||
m.toUserId = _publicChat ? "public_chat_userid" : _user.intId;
|
||||
m.toUsername = _publicChat ? "public_chat_username" : _user.name;
|
||||
if (_publicChat) {
|
||||
m.chatType = "PUBLIC_CHAT";
|
||||
chatMessageService.sendPublicMessage(m);
|
||||
} else {
|
||||
m.chatType = "PRIVATE_CHAT";
|
||||
chatMessageService.sendPrivateMessage(m);
|
||||
}
|
||||
}
|
||||
@ -113,8 +121,7 @@ package org.bigbluebutton.lib.chat.views {
|
||||
override public function destroy():void {
|
||||
chatMessageService.sendMessageOnSuccessSignal.remove(onSendSuccess);
|
||||
chatMessageService.sendMessageOnFailureSignal.remove(onSendFailure);
|
||||
userSession.userList.userRemovedSignal.remove(userRemoved);
|
||||
userSession.userList.userAddedSignal.remove(userAdded);
|
||||
meetingData.users.userChangeSignal.remove(onUserChange);
|
||||
|
||||
view.textInput.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
|
||||
view.sendButton.removeEventListener(MouseEvent.CLICK, sendButtonClickHandler);
|
||||
|
@ -58,12 +58,7 @@ package org.bigbluebutton.lib.common.services {
|
||||
|
||||
public function connect(uri:String, ... parameters):void {
|
||||
_uri = uri;
|
||||
// The connect call needs to be done properly. At the moment lock settings
|
||||
// are not implemented in the mobile client, so parameters[7] and parameters[8]
|
||||
// are "faked" in order to connect (without them, I couldn't get the connect
|
||||
// call to work...) - Adam
|
||||
parameters[7] = false;
|
||||
parameters[8] = false;
|
||||
|
||||
try {
|
||||
trace("Trying to connect to [" + uri + "] ...");
|
||||
trace("parameters: " + parameters);
|
||||
@ -156,21 +151,26 @@ package org.bigbluebutton.lib.common.services {
|
||||
sendConnectionFailedSignal(ConnectionFailedEvent.UNKNOWN_REASON);
|
||||
}
|
||||
|
||||
public function sendMessage(service:String, onSuccess:Function, onFailure:Function, message:Object = null):void {
|
||||
trace(LOG + "SENDING MESSAGE: [" + service + "]");
|
||||
var responder:Responder = new Responder(function(result:Object):void { // On successful result
|
||||
onSuccess("SUCCESSFULLY SENT: [" + service + "].");
|
||||
}, function(status:Object):void { // status - On error occurred
|
||||
var errorReason:String = "FAILED TO SEND: [" + service + "]:";
|
||||
for (var x:Object in status) {
|
||||
errorReason += "\n - " + x + " : " + status[x];
|
||||
public function sendMessage2x(onSuccess:Function, onFailure:Function, message:Object):void {
|
||||
|
||||
var service: String = "onMessageFromClient";
|
||||
|
||||
var responder:Responder = new Responder(
|
||||
function(result:Object):void { // On successful result
|
||||
onSuccess("Successfully sent [" + service + "].");
|
||||
},
|
||||
function(status:Object):void { // status - On error occurred
|
||||
var errorReason:String = "Failed to send [" + service + "]:\n";
|
||||
for (var x:Object in status) {
|
||||
errorReason += "\t" + x + " : " + status[x];
|
||||
}
|
||||
}
|
||||
onFailure(errorReason);
|
||||
});
|
||||
);
|
||||
|
||||
if (message == null) {
|
||||
_netConnection.call(service, responder);
|
||||
} else {
|
||||
_netConnection.call(service, responder, message);
|
||||
_netConnection.call(service, responder, JSON.stringify(message));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
14
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/common/services/DefaultConnectionCallback.as
Normal file → Executable file
14
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/common/services/DefaultConnectionCallback.as
Normal file → Executable file
@ -28,6 +28,20 @@ package org.bigbluebutton.lib.common.services {
|
||||
notifyListeners(messageName, result);
|
||||
}
|
||||
|
||||
public function onMessageFromServer2x(messageName:String, msg:String):void {
|
||||
if (messageName != "SendCursorPositionEvtMsg" && messageName != "UpdateBreakoutUsersEvtMsg" && messageName != "BreakoutRoomsTimeRemainingUpdateEvtMsg" && messageName != "UserTalkingVoiceEvtMsg" && messageName != "MeetingTimeRemainingUpdateEvtMsg") {
|
||||
trace("onMessageFromServer2x - " + msg);
|
||||
}
|
||||
|
||||
var map:Object = JSON.parse(msg);
|
||||
var header:Object = map.header as Object;
|
||||
var body:Object = map.body as Object;
|
||||
|
||||
var msgName:String = header.name
|
||||
|
||||
notifyListeners(messageName, map);
|
||||
}
|
||||
|
||||
public function addMessageListener(listener:IMessageListener):void {
|
||||
_messageListeners.push(listener);
|
||||
}
|
||||
|
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/common/services/IBaseConnection.as
Normal file → Executable file
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/common/services/IBaseConnection.as
Normal file → Executable file
@ -8,7 +8,7 @@ package org.bigbluebutton.lib.common.services {
|
||||
function get connection():NetConnection;
|
||||
function connect(uri:String, ... parameters):void;
|
||||
function disconnect(onUserCommand:Boolean):void;
|
||||
function sendMessage(service:String, onSuccess:Function, onFailure:Function, message:Object = null):void;
|
||||
function sendMessage2x(onSuccess:Function, onFailure:Function, message:Object):void;
|
||||
function init(callback:DefaultConnectionCallback):void;
|
||||
function get connectionSuccessSignal():ISignal;
|
||||
function get connectionFailureSignal():ISignal;
|
||||
|
@ -1,10 +0,0 @@
|
||||
package org.bigbluebutton.lib.main.commands {
|
||||
|
||||
import org.osflash.signals.Signal;
|
||||
|
||||
public class AuthenticationSignal extends Signal {
|
||||
public function AuthenticationSignal() {
|
||||
super(String);
|
||||
}
|
||||
}
|
||||
}
|
4
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/ClearUserStatusCommand.as
Normal file → Executable file
4
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/ClearUserStatusCommand.as
Normal file → Executable file
@ -18,11 +18,11 @@ package org.bigbluebutton.lib.main.commands {
|
||||
public var userService:IUsersService;
|
||||
|
||||
[Inject]
|
||||
public var userID:String;
|
||||
public var userId:String;
|
||||
|
||||
override public function execute():void {
|
||||
trace("ClearUserStatusCommand.execute() - clear status");
|
||||
userService.clearUserStatus(userID);
|
||||
userService.clearUserStatus(userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,17 @@
|
||||
package org.bigbluebutton.lib.main.commands {
|
||||
|
||||
import flash.events.TimerEvent;
|
||||
import flash.utils.Timer;
|
||||
|
||||
import org.bigbluebutton.lib.chat.services.IChatMessageService;
|
||||
import org.bigbluebutton.lib.deskshare.services.IDeskshareConnection;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.services.IBigBlueButtonConnection;
|
||||
import org.bigbluebutton.lib.main.utils.DisconnectEnum;
|
||||
import org.bigbluebutton.lib.presentation.services.IPresentationService;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
import org.bigbluebutton.lib.user.services.IUsersService;
|
||||
import org.bigbluebutton.lib.video.commands.ShareCameraSignal;
|
||||
import org.bigbluebutton.lib.video.services.IVideoConnection;
|
||||
@ -14,7 +20,7 @@ package org.bigbluebutton.lib.main.commands {
|
||||
import org.bigbluebutton.lib.voice.services.IVoiceConnection;
|
||||
import org.bigbluebutton.lib.whiteboard.services.IWhiteboardService;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
|
||||
public class ConnectCommand extends Command {
|
||||
private const LOG:String = "ConnectCommand::";
|
||||
@ -22,6 +28,9 @@ package org.bigbluebutton.lib.main.commands {
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
|
||||
[Inject]
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
[Inject]
|
||||
public var conferenceParameters:IConferenceParameters;
|
||||
|
||||
@ -67,6 +76,8 @@ package org.bigbluebutton.lib.main.commands {
|
||||
[Inject]
|
||||
public var shareCameraSignal:ShareCameraSignal;
|
||||
|
||||
private var authTokenTimeout:Timer;
|
||||
|
||||
override public function execute():void {
|
||||
loadConfigOptions();
|
||||
connection.uri = uri;
|
||||
@ -81,14 +92,11 @@ package org.bigbluebutton.lib.main.commands {
|
||||
userSession.skipCamSettingsCheck = (userSession.config.getConfigFor("VideoconfModule").@skipCamSettingsCheck.toString().toUpperCase() == "TRUE") ? true : false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function connectionSuccess():void {
|
||||
trace(LOG + "successConnected()");
|
||||
userSession.mainConnection = connection;
|
||||
chatService.setupMessageSenderReceiver();
|
||||
whiteboardService.setupMessageSenderReceiver();
|
||||
userSession.userId = connection.userId;
|
||||
// Set up users message sender in order to send the "joinMeeting" message:
|
||||
usersService.setupMessageSenderReceiver();
|
||||
//send the join meeting message, then wait for the response
|
||||
@ -97,17 +105,30 @@ package org.bigbluebutton.lib.main.commands {
|
||||
usersService.validateToken();
|
||||
connection.connectionSuccessSignal.remove(connectionSuccess);
|
||||
connection.connectionFailureSignal.remove(connectionFailure);
|
||||
|
||||
authTokenTimeout = new Timer(10000, 1);
|
||||
authTokenTimeout.addEventListener(TimerEvent.TIMER, onAuthTokenTimeout);
|
||||
authTokenTimeout.start();
|
||||
}
|
||||
|
||||
private function onAuthTokenReply(tokenValid:Boolean):void {
|
||||
userSession.authTokenSignal.remove(onAuthTokenReply);
|
||||
authTokenTimeout.stop();
|
||||
|
||||
if (tokenValid) {
|
||||
joiningMeetingSuccess();
|
||||
} else {
|
||||
// TODO disconnect
|
||||
joiningMeetingFailure(DisconnectEnum.AUTH_TOKEN_INVALID);
|
||||
}
|
||||
}
|
||||
|
||||
private function onAuthTokenTimeout(e:TimerEvent):void {
|
||||
trace(LOG + "onAuthTokenTimeout - timeout hit");
|
||||
userSession.authTokenSignal.remove(onAuthTokenReply);
|
||||
|
||||
joiningMeetingFailure(DisconnectEnum.AUTH_TOKEN_TIMEOUT);
|
||||
}
|
||||
|
||||
private function joiningMeetingSuccess():void {
|
||||
// Set up remaining message sender and receivers:
|
||||
presentationService.setupMessageSenderReceiver();
|
||||
@ -142,22 +163,26 @@ package org.bigbluebutton.lib.main.commands {
|
||||
chatService.sendWelcomeMessage();
|
||||
chatService.getPublicChatMessages();
|
||||
presentationService.getPresentationInfo();
|
||||
userSession.userList.allUsersAddedSignal.add(successUsersAdded);
|
||||
meetingData.users.userChangeSignal.add(successUsersAdded);
|
||||
usersService.joinMeeting();
|
||||
usersService.queryForParticipants();
|
||||
usersService.queryForRecordingStatus();
|
||||
userSession.successJoiningMeetingSignal.remove(joiningMeetingSuccess);
|
||||
userSession.failureJoiningMeetingSignal.remove(joiningMeetingFailure);
|
||||
//usersService.getRoomLockState();
|
||||
usersService.getRoomLockState();
|
||||
}
|
||||
|
||||
private function joiningMeetingFailure():void {
|
||||
// reason is one of the DisconnectEnum types
|
||||
private function joiningMeetingFailure(reason:int):void {
|
||||
trace(LOG + "joiningMeetingFailure() -- Failed to join the meeting!!!");
|
||||
userSession.successJoiningMeetingSignal.remove(joiningMeetingSuccess);
|
||||
userSession.failureJoiningMeetingSignal.remove(joiningMeetingFailure);
|
||||
|
||||
disconnectUserSignal.dispatch(reason);
|
||||
}
|
||||
|
||||
protected function successUsersAdded():void {
|
||||
userSession.userList.allUsersAddedSignal.remove(successUsersAdded);
|
||||
protected function successUsersAdded(user:User2x, property:int):void {
|
||||
meetingData.users.userChangeSignal.remove(successUsersAdded);
|
||||
connectingFinishedSignal.dispatch();
|
||||
}
|
||||
|
||||
|
11
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/EmojiCommand.as
Normal file → Executable file
11
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/EmojiCommand.as
Normal file → Executable file
@ -1,9 +1,10 @@
|
||||
package org.bigbluebutton.lib.main.commands {
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.user.models.EmojiStatus;
|
||||
import org.bigbluebutton.lib.user.services.IUsersService;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
|
||||
public class EmojiCommand extends Command {
|
||||
|
||||
@ -17,8 +18,12 @@ package org.bigbluebutton.lib.main.commands {
|
||||
public var status:String;
|
||||
|
||||
override public function execute():void {
|
||||
trace("EmojiCommand.execute() - change emoji statu");
|
||||
userService.emojiStatus(status);
|
||||
trace("EmojiCommand.execute() - change emoji status");
|
||||
if (EmojiStatus.STATUS_ARRAY.indexOf(status) != -1) {
|
||||
userService.emojiStatus(status);
|
||||
} else {
|
||||
trace("Emoji status ["+status+"] not supported");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
7
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/GoToSlideCommand.as
Normal file → Executable file
7
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/GoToSlideCommand.as
Normal file → Executable file
@ -9,11 +9,14 @@ package org.bigbluebutton.lib.main.commands {
|
||||
public var presentationService:IPresentationService;
|
||||
|
||||
[Inject]
|
||||
public var slide:String;
|
||||
public var presentationId:String;
|
||||
|
||||
[Inject]
|
||||
public var pageId:String;
|
||||
|
||||
override public function execute():void {
|
||||
trace("GoToSlideCommand.execute()");
|
||||
presentationService.gotoSlide(slide);
|
||||
presentationService.setCurrentPage(presentationId, pageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/LockUserCommand.as
Normal file → Executable file
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/LockUserCommand.as
Normal file → Executable file
@ -1,26 +1,22 @@
|
||||
package org.bigbluebutton.lib.main.commands {
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.user.services.IUsersService;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
|
||||
public class LockUserCommand extends Command {
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
|
||||
[Inject]
|
||||
public var userService:IUsersService;
|
||||
|
||||
[Inject]
|
||||
public var userID:String;
|
||||
public var userId:String;
|
||||
|
||||
[Inject]
|
||||
public var lock:Boolean;
|
||||
|
||||
override public function execute():void {
|
||||
userService.setUserLock(userID, lock);
|
||||
userService.setUserLock(userId, lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
15
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/PresenterCommand.as
Normal file → Executable file
15
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/PresenterCommand.as
Normal file → Executable file
@ -1,28 +1,21 @@
|
||||
package org.bigbluebutton.lib.main.commands {
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
import org.bigbluebutton.lib.user.services.IUsersService;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
import robotlegs.bender.bundles.mvcs.Command;
|
||||
|
||||
public class PresenterCommand extends Command {
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
|
||||
[Inject]
|
||||
public var userService:IUsersService;
|
||||
|
||||
[Inject]
|
||||
public var user:User;
|
||||
|
||||
[Inject]
|
||||
public var userMeID:String;
|
||||
public var user:User2x;
|
||||
|
||||
override public function execute():void {
|
||||
trace("PresenterCommand.execute() -assign presenter");
|
||||
userService.assignPresenter(user.userId, user.name, userMeID);
|
||||
userService.assignPresenter(user.intId, user.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/PresenterSignal.as
Normal file → Executable file
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/commands/PresenterSignal.as
Normal file → Executable file
@ -1,14 +1,14 @@
|
||||
package org.bigbluebutton.lib.main.commands {
|
||||
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.osflash.signals.Signal;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
import org.osflash.signals.Signal;
|
||||
|
||||
public class PresenterSignal extends Signal {
|
||||
public function PresenterSignal() {
|
||||
/**
|
||||
* @1 user, userMe.userID
|
||||
* @1 user
|
||||
*/
|
||||
super(User, String);
|
||||
super(User2x);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
14
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/models/ConferenceParameters.as
Normal file → Executable file
14
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/models/ConferenceParameters.as
Normal file → Executable file
@ -72,11 +72,6 @@ package org.bigbluebutton.lib.main.models {
|
||||
*/
|
||||
private var _connection:NetConnection;
|
||||
|
||||
/**
|
||||
* The unique userid internal to bbb-client.
|
||||
*/
|
||||
private var _userid:String;
|
||||
|
||||
private var _record:Boolean;
|
||||
|
||||
private var _authToken:String;
|
||||
@ -224,15 +219,6 @@ package org.bigbluebutton.lib.main.models {
|
||||
_changedSignal.dispatch();
|
||||
}
|
||||
|
||||
public function get userid():String {
|
||||
return _userid;
|
||||
}
|
||||
|
||||
public function set userid(userid:String):void {
|
||||
_userid = userid;
|
||||
_changedSignal.dispatch();
|
||||
}
|
||||
|
||||
public function get record():Boolean {
|
||||
return _record;
|
||||
}
|
||||
|
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/models/IConferenceParameters.as
Normal file → Executable file
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/models/IConferenceParameters.as
Normal file → Executable file
@ -33,8 +33,6 @@ package org.bigbluebutton.lib.main.models {
|
||||
function set logoutUrl(logoutUrl:String):void;
|
||||
function get connection():NetConnection;
|
||||
function set connection(connection:NetConnection):void;
|
||||
function get userid():String;
|
||||
function set userid(userid:String):void;
|
||||
function get record():Boolean;
|
||||
function set record(record:Boolean):void;
|
||||
function get authToken():String;
|
||||
|
@ -0,0 +1,8 @@
|
||||
package org.bigbluebutton.lib.main.models {
|
||||
import org.bigbluebutton.lib.user.models.Users2x;
|
||||
|
||||
public interface IMeetingData {
|
||||
function get users():Users2x;
|
||||
function get meetingStatus():MeetingStatus;
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package org.bigbluebutton.lib.main.models {
|
||||
|
||||
public class LockSettings2x {
|
||||
public var disableCam:Boolean;
|
||||
|
||||
public var disableMic:Boolean;
|
||||
|
||||
public var disablePrivChat:Boolean;
|
||||
|
||||
public var disablePubChat:Boolean;
|
||||
|
||||
public var lockedLayout:Boolean;
|
||||
|
||||
public var lockOnJoin:Boolean;
|
||||
|
||||
public var lockOnJoinConfigurable:Boolean;
|
||||
|
||||
public function LockSettings2x() {
|
||||
disableCam = false;
|
||||
disableMic = false;
|
||||
disablePrivChat = false;
|
||||
disablePubChat = false;
|
||||
lockedLayout = false;
|
||||
lockOnJoin = true;
|
||||
lockOnJoinConfigurable = false;
|
||||
}
|
||||
|
||||
public function isRoomLocked():Boolean {
|
||||
return disableCam || disableMic || disablePrivChat || disablePubChat || lockedLayout;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package org.bigbluebutton.lib.main.models {
|
||||
import org.bigbluebutton.lib.user.models.Users2x;
|
||||
|
||||
public class MeetingData implements IMeetingData {
|
||||
private var _users:Users2x = new Users2x();
|
||||
|
||||
public function get users():Users2x {
|
||||
return _users;
|
||||
}
|
||||
|
||||
//public var webcams: Webcams = new Webcams();
|
||||
//public var voiceUsers: VoiceUsers2x = new VoiceUsers2x();
|
||||
//public var guestsWaiting: GuestsApp = new GuestsApp();
|
||||
|
||||
private var _meetingStatus: MeetingStatus = new MeetingStatus();
|
||||
|
||||
public function get meetingStatus():MeetingStatus {
|
||||
return _meetingStatus;
|
||||
}
|
||||
|
||||
//public var meeting: Meeting = new Meeting();
|
||||
//public var config: Config;
|
||||
//public var sharedNotes: SharedNotes = new SharedNotes();
|
||||
|
||||
//public var breakoutRooms: BreakoutRooms = new BreakoutRooms();
|
||||
//public var whiteboardModel: WhiteboardModel = new WhiteboardModel();
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package org.bigbluebutton.lib.main.models {
|
||||
import org.osflash.signals.Signal;
|
||||
|
||||
public class MeetingStatus {
|
||||
private var _lockSettings:LockSettings2x = new LockSettings2x();
|
||||
|
||||
private var _lockSettingsChangeSignal:Signal = new Signal();
|
||||
|
||||
public function get lockSettingsChangeSignal():Signal {
|
||||
return _lockSettingsChangeSignal;
|
||||
}
|
||||
|
||||
public function get lockSettings():LockSettings2x {
|
||||
return _lockSettings;
|
||||
}
|
||||
|
||||
//public var isRecording: Boolean = false;
|
||||
//public var isMeetingMuted: Boolean = false;
|
||||
//public var guestPolicy: String = "ASK_MODERATOR";
|
||||
//public var guestPolicySetBy: String = null;
|
||||
|
||||
public function changeLockSettings(newSettings:LockSettings2x):void {
|
||||
_lockSettings = newSettings;
|
||||
_lockSettingsChangeSignal.dispatch(newSettings);
|
||||
}
|
||||
}
|
||||
}
|
@ -25,8 +25,6 @@ package org.bigbluebutton.lib.main.services {
|
||||
|
||||
private var _tried_tunneling:Boolean = false;
|
||||
|
||||
private var _userId:String;
|
||||
|
||||
[PostConstruct]
|
||||
public function init():void {
|
||||
baseConnection.init(this);
|
||||
@ -39,19 +37,7 @@ package org.bigbluebutton.lib.main.services {
|
||||
}
|
||||
|
||||
private function onConnectionSuccess():void {
|
||||
getMyUserId();
|
||||
}
|
||||
|
||||
private function getMyUserId():void {
|
||||
baseConnection.connection.call("participants.getMyUserId", new Responder(function(result:String):void {
|
||||
trace("Success connected: My user ID is [" + result + "]");
|
||||
_userId = result;
|
||||
connectionSuccessSignal.dispatch();
|
||||
}, function(status:Object):void {
|
||||
trace("Error occurred");
|
||||
trace(ObjectUtil.toString(status));
|
||||
connectionFailureSignal.dispatch("Failed to get the userId");
|
||||
}));
|
||||
connectionSuccessSignal.dispatch();
|
||||
}
|
||||
|
||||
public function get connectionFailureSignal():ISignal {
|
||||
@ -87,8 +73,20 @@ package org.bigbluebutton.lib.main.services {
|
||||
_conferenceParameters = params;
|
||||
_tried_tunneling = tunnel;
|
||||
var uri:String = _applicationURI + "/" + _conferenceParameters.room;
|
||||
var lockSettings:Object = {disableCam: false, disableMic: false, disablePrivateChat: false, disablePublicChat: false, lockedLayout: false, lockOnJoin: false, lockOnJoinConfigurable: false};
|
||||
var connectParams:Array = [_conferenceParameters.username, _conferenceParameters.role, _conferenceParameters.room, _conferenceParameters.voicebridge, _conferenceParameters.record, _conferenceParameters.externUserID, _conferenceParameters.internalUserID, _conferenceParameters.muteOnStart, lockSettings];
|
||||
|
||||
var username:String = _conferenceParameters.username;
|
||||
var role:String = _conferenceParameters.role;
|
||||
var intMeetingId:String = _conferenceParameters.room;
|
||||
var voiceConf:String = _conferenceParameters.voicebridge;
|
||||
var recorded:Boolean = _conferenceParameters.record;
|
||||
var extUserId:String = _conferenceParameters.externUserID;
|
||||
var intUserId:String = _conferenceParameters.internalUserID;
|
||||
var muteOnStart:Boolean = _conferenceParameters.muteOnStart;
|
||||
var guest:Boolean = false; // false for now because no guest support
|
||||
var authToken:String = _conferenceParameters.authToken;
|
||||
|
||||
var connectParams:Array = [username, role, intMeetingId, voiceConf, recorded, extUserId, intUserId, muteOnStart, guest, authToken];
|
||||
|
||||
trace("BBB Apps connect: " + connectParams);
|
||||
baseConnection.connect.apply(null, new Array(uri).concat(connectParams));
|
||||
}
|
||||
@ -97,12 +95,13 @@ package org.bigbluebutton.lib.main.services {
|
||||
baseConnection.disconnect(onUserCommand);
|
||||
}
|
||||
|
||||
public function get userId():String {
|
||||
return _userId;
|
||||
/**** NEED TO REMOVE THIS BEFORE CONVERSION IS FINISHED ******/
|
||||
public function sendMessage(service:String, onSuccess:Function, onFailure:Function, message:Object = null):void {
|
||||
//baseConnection.sendMessage(service, onSuccess, onFailure, message);
|
||||
}
|
||||
|
||||
public function sendMessage(service:String, onSuccess:Function, onFailure:Function, message:Object = null):void {
|
||||
baseConnection.sendMessage(service, onSuccess, onFailure, message);
|
||||
public function sendMessage2x(onSuccess:Function, onFailure:Function, message:Object):void {
|
||||
baseConnection.sendMessage2x(onSuccess, onFailure, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/services/IBigBlueButtonConnection.as
Normal file → Executable file
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/services/IBigBlueButtonConnection.as
Normal file → Executable file
@ -13,9 +13,9 @@ package org.bigbluebutton.lib.main.services {
|
||||
function connect(params:IConferenceParameters, tunnel:Boolean = false):void;
|
||||
function disconnect(logoutOnUserCommand:Boolean):void;
|
||||
function sendMessage(service:String, onSuccess:Function, onFailure:Function, message:Object = null):void;
|
||||
function sendMessage2x(onSuccess:Function, onFailure:Function, message:Object):void;
|
||||
function get connectionFailureSignal():ISignal;
|
||||
function get connectionSuccessSignal():ISignal;
|
||||
function get userId():String;
|
||||
function addMessageListener(listener:IMessageListener):void
|
||||
function removeMessageListener(listener:IMessageListener):void
|
||||
}
|
||||
|
4
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/utils/DisconnectEnum.as
Normal file → Executable file
4
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/main/utils/DisconnectEnum.as
Normal file → Executable file
@ -8,5 +8,9 @@ package org.bigbluebutton.lib.main.utils {
|
||||
public static const CONNECTION_STATUS_USER_LOGGED_OUT:int = 3;
|
||||
|
||||
public static const CONNECTION_STATUS_USER_KICKED_OUT:int = 4;
|
||||
|
||||
public static const AUTH_TOKEN_TIMEOUT:int = 5;
|
||||
|
||||
public static const AUTH_TOKEN_INVALID:int = 6;
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ package org.bigbluebutton.lib.main.views {
|
||||
import flash.events.MouseEvent;
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Mediator;
|
||||
|
||||
@ -12,7 +12,7 @@ package org.bigbluebutton.lib.main.views {
|
||||
public var view:TopToolbarBase;
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
[Inject]
|
||||
public var conferenceParameters:IConferenceParameters;
|
||||
|
9
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/commands/LoadSlideCommand.as
Normal file → Executable file
9
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/commands/LoadSlideCommand.as
Normal file → Executable file
@ -25,8 +25,13 @@ package org.bigbluebutton.lib.presentation.commands {
|
||||
|
||||
override public function execute():void {
|
||||
if (slide != null) {
|
||||
_loadSlideService = new LoadSlideService(slide);
|
||||
whiteboardService.getAnnotationHistory(presentationID, slide.slideNumber);
|
||||
if (!slide.loadRequested) {
|
||||
slide.loadRequested = true;
|
||||
_loadSlideService = new LoadSlideService(slide);
|
||||
whiteboardService.getAnnotationHistory(presentationID, slide.slideNumber);
|
||||
} else {
|
||||
trace("LoadSlideCommand: load request has already been received, ignoring the repeat request");
|
||||
}
|
||||
} else {
|
||||
trace("LoadSlideCommand: requested slide is null and cannot be loaded");
|
||||
}
|
||||
|
76
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/models/Presentation.as
Normal file → Executable file
76
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/models/Presentation.as
Normal file → Executable file
@ -1,5 +1,7 @@
|
||||
package org.bigbluebutton.lib.presentation.models {
|
||||
|
||||
import mx.collections.ArrayCollection;
|
||||
|
||||
import org.bigbluebutton.lib.whiteboard.models.AnnotationStatus;
|
||||
import org.bigbluebutton.lib.whiteboard.models.IAnnotation;
|
||||
import org.osflash.signals.ISignal;
|
||||
@ -10,24 +12,27 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
|
||||
private var _id:String = "";
|
||||
|
||||
private var _slides:Vector.<Slide> = new Vector.<Slide>();
|
||||
private var _slides:ArrayCollection;
|
||||
|
||||
private var _changePresentation:Function;
|
||||
|
||||
private var _currentSlideNum:int = -1;
|
||||
private var _currentSlide:Slide;
|
||||
|
||||
private var _current:Boolean = false;
|
||||
|
||||
private var _downloadable:Boolean = false;
|
||||
|
||||
private var _slideChangeSignal:ISignal = new Signal();
|
||||
|
||||
private var _loaded:Boolean = false;
|
||||
|
||||
public function Presentation(fileName:String, id:String, changePresentation:Function, numOfSlides:int, isCurrent:Boolean):void {
|
||||
public function Presentation(fileName:String, id:String, changePresentation:Function, numOfSlides:int, isCurrent:Boolean, downloadable:Boolean):void {
|
||||
_fileName = fileName;
|
||||
_id = id;
|
||||
_slides = new Vector.<Slide>(numOfSlides);
|
||||
_slides = new ArrayCollection();
|
||||
_changePresentation = changePresentation;
|
||||
_current = isCurrent;
|
||||
_downloadable = downloadable;
|
||||
}
|
||||
|
||||
public function get fileName():String {
|
||||
@ -38,22 +43,25 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
return _id;
|
||||
}
|
||||
|
||||
public function get slides():Vector.<Slide> {
|
||||
public function get slides():ArrayCollection {
|
||||
return _slides;
|
||||
}
|
||||
|
||||
public function getSlideAt(num:int):Slide {
|
||||
if (_slides.length > num) {
|
||||
return _slides[num];
|
||||
public function getSlideById(slideId:String):Slide {
|
||||
for each (var slide:Slide in _slides) {
|
||||
if (slide.id == slideId) {
|
||||
return slide;
|
||||
}
|
||||
}
|
||||
trace("getSlideAt failed: Slide index out of bounds");
|
||||
|
||||
trace("getSlideById failed: Slide not found");
|
||||
return null;
|
||||
}
|
||||
|
||||
public function add(slide:Slide):void {
|
||||
_slides[slide.slideNumber - 1] = slide;
|
||||
_slides.addItem(slide);
|
||||
if (slide.current == true) {
|
||||
_currentSlideNum = slide.slideNumber - 1;
|
||||
_currentSlide = slide;
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,17 +82,8 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
return _loaded;
|
||||
}
|
||||
|
||||
public function set currentSlideNum(n:int):void {
|
||||
if (_currentSlideNum >= 0) {
|
||||
_slides[_currentSlideNum].current = false;
|
||||
}
|
||||
_currentSlideNum = n - 1;
|
||||
_slides[_currentSlideNum].current = true;
|
||||
_slideChangeSignal.dispatch();
|
||||
}
|
||||
|
||||
public function get currentSlideNum():int {
|
||||
return _currentSlideNum;
|
||||
public function get currentSlide():Slide {
|
||||
return _currentSlide;
|
||||
}
|
||||
|
||||
public function set current(b:Boolean):void {
|
||||
@ -103,6 +102,29 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
_slides = new Vector.<Slide>();
|
||||
}
|
||||
|
||||
public function setCurrentSlide(slideId:String):void {
|
||||
if (_currentSlide) {
|
||||
_currentSlide.current = false;
|
||||
_currentSlide = null;
|
||||
}
|
||||
var newCurrentSlide:Slide = getSlideById(slideId);
|
||||
if (newCurrentSlide) {
|
||||
newCurrentSlide.current = true;
|
||||
_currentSlide = newCurrentSlide;
|
||||
}
|
||||
_slideChangeSignal.dispatch();
|
||||
}
|
||||
|
||||
public function setViewedRegion(slideId:String, x:Number, y:Number, widthPercent:Number, heightPercent:Number):Boolean {
|
||||
var slide:Slide = getSlideById(slideId);
|
||||
if (slide != null) {
|
||||
slide.setViewedRegion(x, y, widthPercent, heightPercent);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
public function addAnnotationHistory(slideNum:int, annotationHistory:Array):Boolean {
|
||||
var slide:Slide = getSlideAt(slideNum);
|
||||
if (slide != null) {
|
||||
@ -143,14 +165,6 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function setViewedRegion(slideNum:Number, x:Number, y:Number, widthPercent:Number, heightPercent:Number):Boolean {
|
||||
var slide:Slide = getSlideAt(slideNum);
|
||||
if (slide != null) {
|
||||
slide.setViewedRegion(x, y, widthPercent, heightPercent);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
52
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/models/PresentationList.as
Normal file → Executable file
52
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/models/PresentationList.as
Normal file → Executable file
@ -26,8 +26,6 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
|
||||
private var _viewedRegionChangeSignal:ISignal = new Signal();
|
||||
|
||||
private var _cursorUpdateSignal:ISignal = new Signal();
|
||||
|
||||
private var _annotationHistorySignal:ISignal = new Signal();
|
||||
|
||||
private var _annotationUpdatedSignal:ISignal = new Signal();
|
||||
@ -36,14 +34,10 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
|
||||
private var _annotationClearSignal:ISignal = new Signal();
|
||||
|
||||
private var _cursorXPercent:Number = -1;
|
||||
|
||||
private var _cursorYPercent:Number = -1;
|
||||
|
||||
public function PresentationList() {
|
||||
}
|
||||
|
||||
public function addPresentation(presentationName:String, id:String, numberOfSlides:int, current:Boolean):Presentation {
|
||||
public function addPresentation(presentationName:String, id:String, numberOfSlides:int, current:Boolean, downloadable:Boolean):Presentation {
|
||||
trace("Adding presentation " + presentationName);
|
||||
for (var i:int = 0; i < _presentations.length; i++) {
|
||||
var p:Presentation = _presentations[i];
|
||||
@ -51,7 +45,7 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
var presentation:Presentation = new Presentation(presentationName, id, changeCurrentPresentation, numberOfSlides, current);
|
||||
var presentation:Presentation = new Presentation(presentationName, id, changeCurrentPresentation, numberOfSlides, current, downloadable);
|
||||
presentation.slideChangeSignal.add(slideChangeSignal.dispatch);
|
||||
_presentations.addItem(presentation);
|
||||
return presentation;
|
||||
@ -89,16 +83,8 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
return null;
|
||||
}
|
||||
|
||||
public function cursorUpdate(xPercent:Number, yPercent:Number):void {
|
||||
_cursorXPercent = xPercent;
|
||||
_cursorYPercent = yPercent;
|
||||
if (_currentPresentation != null && _currentPresentation.currentSlideNum >= 0) {
|
||||
_cursorUpdateSignal.dispatch(xPercent, yPercent);
|
||||
}
|
||||
}
|
||||
|
||||
public function addAnnotationHistory(whiteboardID:String, annotationArray:Array):void {
|
||||
var whiteboardIDParts:Array = whiteboardID.split("/");
|
||||
/* var whiteboardIDParts:Array = whiteboardID.split("/");
|
||||
var presentationID:String = whiteboardIDParts[0];
|
||||
var pageNumber:int = parseInt(whiteboardIDParts[1]) - 1;
|
||||
var presentation:Presentation = getPresentationByID(presentationID);
|
||||
@ -108,36 +94,36 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
_annotationHistorySignal.dispatch();
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public function addAnnotation(annotation:IAnnotation):void {
|
||||
var newAnnotation:IAnnotation = _currentPresentation.addAnnotation(_currentPresentation.currentSlideNum, annotation);
|
||||
/* var newAnnotation:IAnnotation = _currentPresentation.addAnnotation(_currentPresentation.currentSlideNum, annotation);
|
||||
if (newAnnotation != null) {
|
||||
_annotationUpdatedSignal.dispatch(newAnnotation);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public function clearAnnotations():void {
|
||||
if (_currentPresentation != null && _currentPresentation.currentSlideNum >= 0) {
|
||||
/* if (_currentPresentation != null && _currentPresentation.currentSlideNum >= 0) {
|
||||
if (_currentPresentation.clearAnnotations(_currentPresentation.currentSlideNum)) {
|
||||
_annotationClearSignal.dispatch();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public function undoAnnotation():void {
|
||||
if (_currentPresentation != null && _currentPresentation.currentSlideNum >= 0) {
|
||||
/* if (_currentPresentation != null && _currentPresentation.currentSlideNum >= 0) {
|
||||
var removedAnnotation:IAnnotation = _currentPresentation.undoAnnotation(_currentPresentation.currentSlideNum);
|
||||
if (removedAnnotation != null) {
|
||||
_annotationUndoSignal.dispatch(removedAnnotation);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public function setViewedRegion(x:Number, y:Number, widthPercent:Number, heightPercent:Number):void {
|
||||
if (_currentPresentation != null && _currentPresentation.currentSlideNum >= 0) {
|
||||
if (_currentPresentation.setViewedRegion(_currentPresentation.currentSlideNum, x, y, widthPercent, heightPercent)) {
|
||||
public function setViewedRegion(presentationId:String, pageId:String, x:Number, y:Number, widthPercent:Number, heightPercent:Number):void {
|
||||
if (_currentPresentation != null) {
|
||||
if (_currentPresentation.setViewedRegion(pageId, x, y, widthPercent, heightPercent)) {
|
||||
_viewedRegionChangeSignal.dispatch(x, y, widthPercent, heightPercent);
|
||||
}
|
||||
}
|
||||
@ -172,10 +158,6 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
return _viewedRegionChangeSignal;
|
||||
}
|
||||
|
||||
public function get cursorUpdateSignal():ISignal {
|
||||
return _cursorUpdateSignal;
|
||||
}
|
||||
|
||||
public function get annotationHistorySignal():ISignal {
|
||||
return _annotationHistorySignal;
|
||||
}
|
||||
@ -191,13 +173,5 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
public function get annotationClearSignal():ISignal {
|
||||
return _annotationClearSignal;
|
||||
}
|
||||
|
||||
public function get cursorXPercent():Number {
|
||||
return _cursorXPercent;
|
||||
}
|
||||
|
||||
public function get cursorYPercent():Number {
|
||||
return _cursorYPercent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
11
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/models/Slide.as
Normal file → Executable file
11
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/models/Slide.as
Normal file → Executable file
@ -9,8 +9,12 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
import org.osflash.signals.Signal;
|
||||
|
||||
public class Slide {
|
||||
public var loadRequested:Boolean = false;
|
||||
|
||||
private var _loaded:Boolean = false;
|
||||
|
||||
private var _id:String;
|
||||
|
||||
private var _slideURI:String;
|
||||
|
||||
private var _slideNum:Number;
|
||||
@ -39,7 +43,8 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
|
||||
private var _slideLoadedSignal:ISignal = new Signal;
|
||||
|
||||
public function Slide(slideNum:Number, slideURI:String, thumbURI:String, txtURI:String, current:Boolean, x:Number, y:Number, widthPercent:Number, heightPercent:Number) {
|
||||
public function Slide(id:String, slideNum:Number, slideURI:String, thumbURI:String, txtURI:String, current:Boolean, x:Number, y:Number, widthPercent:Number, heightPercent:Number) {
|
||||
_id = id;
|
||||
_slideNum = slideNum;
|
||||
_slideURI = slideURI;
|
||||
_thumbURI = thumbURI;
|
||||
@ -52,6 +57,10 @@ package org.bigbluebutton.lib.presentation.models {
|
||||
_sizeSynced = true;
|
||||
}
|
||||
|
||||
public function get id():String {
|
||||
return _id;
|
||||
}
|
||||
|
||||
public function get thumb():String {
|
||||
return _thumbURI;
|
||||
}
|
||||
|
9
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/IPresentationService.as
Normal file → Executable file
9
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/IPresentationService.as
Normal file → Executable file
@ -3,10 +3,9 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
public interface IPresentationService {
|
||||
function setupMessageSenderReceiver():void;
|
||||
function getPresentationInfo():void;
|
||||
function gotoSlide(id:String):void;
|
||||
function move(xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void;
|
||||
function removePresentation(name:String):void;
|
||||
function sendCursorUpdate(xPercent:Number, yPercent:Number):void;
|
||||
function sharePresentation(share:Boolean, presentationName:String):void;
|
||||
function setCurrentPage(presentationId: String, pageId: String):void;
|
||||
function move(presentationId:String, pageId:String, xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void;
|
||||
function removePresentation(presentationId:String):void;
|
||||
function setCurrentPresentation(presentationId:String):void;
|
||||
}
|
||||
}
|
||||
|
140
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/PresentMessageReceiver.as
Normal file → Executable file
140
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/PresentMessageReceiver.as
Normal file → Executable file
@ -6,16 +6,6 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
import org.bigbluebutton.lib.presentation.models.Slide;
|
||||
|
||||
public class PresentMessageReceiver implements IMessageListener {
|
||||
private static const SO_NAME:String = "presentationSO";
|
||||
|
||||
private static const PRESENTER:String = "presenter";
|
||||
|
||||
private static const SHARING:String = "sharing";
|
||||
|
||||
private static const UPDATE_MESSAGE:String = "updateMessage";
|
||||
|
||||
private static const CURRENT_PAGE:String = "currentPage";
|
||||
|
||||
private static const OFFICE_DOC_CONVERSION_SUCCESS_KEY:String = "OFFICE_DOC_CONVERSION_SUCCESS";
|
||||
|
||||
private static const OFFICE_DOC_CONVERSION_FAILED_KEY:String = "OFFICE_DOC_CONVERSION_FAILED";
|
||||
@ -43,27 +33,13 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
|
||||
public function onMessage(messageName:String, message:Object):void {
|
||||
switch (messageName) {
|
||||
case "PresentationCursorUpdateCommand":
|
||||
handlePresentationCursorUpdateCommand(message);
|
||||
break;
|
||||
case "moveCallback":
|
||||
handleMoveCallback(message);
|
||||
break;
|
||||
case "goToSlideCallback":
|
||||
handleGoToSlideCallback(message);
|
||||
break;
|
||||
case "conversionCompletedUpdateMessageCallback":
|
||||
handleConversionCompletedUpdateMessageCallback(message);
|
||||
break;
|
||||
|
||||
case "conversionUpdateMessageCallback":
|
||||
handleConversionUpdateMessageCallback(message);
|
||||
break;
|
||||
case "generatedSlideUpdateMessageCallback":
|
||||
handleGeneratedSlideUpdateMessageCallback(message);
|
||||
break;
|
||||
case "getPresentationInfoReply":
|
||||
handleGetPresentationInfoReply(message)
|
||||
break;
|
||||
case "pageCountExceededUpdateMessageCallback":
|
||||
handlePageCountExceededUpdateMessageCallback(message);
|
||||
break;
|
||||
@ -72,60 +48,72 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
break;
|
||||
case "sharePresentationCallback":
|
||||
handleSharePresentationCallback(message);
|
||||
|
||||
|
||||
|
||||
|
||||
case "GetPresentationInfoRespMsg":
|
||||
handleGetPresentationInfoRespMsg(message)
|
||||
break;
|
||||
case "PresentationConversionCompletedEvtMsg":
|
||||
handlePresentationConversionCompletedEvtMsg(message);
|
||||
break;
|
||||
case "SetCurrentPageEvtMsg":
|
||||
handleSetCurrentPageEvtMsg(message);
|
||||
break;
|
||||
case "ResizeAndMovePageEvtMsg":
|
||||
handleResizeAndMovePageEvtMsg(message);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function handleGetPresentationInfoReply(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
if (msg.presentations) {
|
||||
for (var i:int = 0; i < msg.presentations.length; i++) {
|
||||
addPresentation(msg.presentations[i]);
|
||||
private function handleGetPresentationInfoRespMsg(msg:Object):void {
|
||||
trace("PresentMessageReceiver::handleGetPresentationInfoRespMsg()");
|
||||
var presentations:Array = msg.body.presentations as Array;
|
||||
if (msg.body.presentations) {
|
||||
for (var i:int = 0; i < presentations.length; i++) {
|
||||
addPresentation(presentations[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function handleGoToSlideCallback(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("PresentMessageReceiver::handleGoToSlideCallback() -- going to slide number [" + msg.num + "]");
|
||||
userSession.presentationList.currentPresentation.currentSlideNum = int(msg.num);
|
||||
private function addPresentation(presentationObject:Object):void {
|
||||
var length:int = presentationObject.pages.length;
|
||||
var presentation:Presentation = userSession.presentationList.addPresentation(presentationObject.name, presentationObject.id, length, presentationObject.current, presentationObject.downloadable);
|
||||
// Add all the slides to the presentation:
|
||||
for (var i:int = 0; i < length; i++) {
|
||||
var s:Object = presentationObject.pages[i];
|
||||
presentation.add(new Slide(s.id, s.num, s.swfUri, s.thumbUri, s.txtUri, s.current, s.xOffset, s.yOffset, s.widthRatio, s.heightRatio));
|
||||
}
|
||||
if (presentation.current) {
|
||||
presentation.show();
|
||||
}
|
||||
}
|
||||
|
||||
private function handleMoveCallback(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("PresentMessageReceiver::handleMoveCallback()");
|
||||
userSession.presentationList.setViewedRegion(msg.xOffset, msg.yOffset, msg.widthRatio, msg.heightRatio);
|
||||
/* Properties of msg:
|
||||
current
|
||||
heightRatio
|
||||
id
|
||||
num
|
||||
pngUri
|
||||
swfUri
|
||||
thumbUri
|
||||
txtUri
|
||||
widthRatio
|
||||
xOffset
|
||||
yOffset
|
||||
/*
|
||||
|
||||
/*
|
||||
var e:MoveEvent = new MoveEvent(MoveEvent.MOVE);
|
||||
e.xOffset = xOffset;
|
||||
e.yOffset = yOffset;
|
||||
e.slideToCanvasWidthRatio = widthRatio;
|
||||
e.slideToCanvasHeightRatio = heightRatio;
|
||||
dispatcher.dispatchEvent(e);
|
||||
*/
|
||||
public function handlePresentationConversionCompletedEvtMsg(msg:Object):void {
|
||||
trace("PresentMessageReceiver::handlePresentationConversionCompletedEvtMsg() -- new presentation [" + msg.body.presentation.name + "] uploaded");
|
||||
addPresentation(msg.body.presentation);
|
||||
}
|
||||
|
||||
private function handlePresentationCursorUpdateCommand(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("PresentMessageReceiver::handlePresentationCursorUpdateCommand() -- cursing moving [" + msg.xPercent + ", " + msg.yPercent + "]");
|
||||
userSession.presentationList.cursorUpdate(msg.xPercent, msg.yPercent);
|
||||
private function handleSetCurrentPageEvtMsg(msg:Object):void {
|
||||
trace("PresentMessageReceiver::handleSetCurrentPageEvtMsg() -- going to slide number [" + msg.body.pageId + "]");
|
||||
userSession.presentationList.currentPresentation.setCurrentSlide(msg.body.pageId);
|
||||
}
|
||||
|
||||
private function handleResizeAndMovePageEvtMsg(msg:Object):void {
|
||||
trace("PresentMessageReceiver::handleResizeAndMovePageEvtMsg()");
|
||||
userSession.presentationList.setViewedRegion(msg.body.presentationId, msg.body.pageId, msg.body.xOffset, msg.body.yOffset, msg.body.widthRatio, msg.body.heightRatio);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private function handleRemovePresentationCallback(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("PresentMessageReceiver::handleRemovePresentationCallback() -- removing presentation [" + msg.name + "]");
|
||||
@ -160,30 +148,6 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
*/
|
||||
}
|
||||
|
||||
public function handleConversionCompletedUpdateMessageCallback(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("PresentMessageReceiver::handleConversionCompletedUpdateMessageCallback() -- new presentation [" + msg.presentation.name + "] uploaded");
|
||||
addPresentation(msg.presentation);
|
||||
}
|
||||
|
||||
private function addPresentation(presentationObject:Object):void {
|
||||
var length:int = presentationObject.pages.length;
|
||||
trace("PresentMessageReceiver::handleGetPresentationInfoReply() -- adding presentation [" + presentationObject.name + "] to the presentation list");
|
||||
var presentation:Presentation = userSession.presentationList.addPresentation(presentationObject.name, presentationObject.id, length, presentationObject.current);
|
||||
// Add all the slides to the presentation:
|
||||
for (var i:int = 0; i < length; i++) {
|
||||
var s:Object = presentationObject.pages[i];
|
||||
if (s.swfUri) {
|
||||
presentation.add(new Slide(s.num, s.swfUri, s.thumbUri, s.txtUri, s.current, s.xOffset, s.yOffset, s.widthRatio, s.heightRatio));
|
||||
} else if (s.swf_uri) {
|
||||
presentation.add(new Slide(s.num, s.swf_uri, s.thumb_uri, s.txt_uri, s.current, s.x_offset, s.y_offset, s.width_ratio, s.height_ratio));
|
||||
}
|
||||
}
|
||||
if (presentation.current) {
|
||||
presentation.show();
|
||||
}
|
||||
}
|
||||
|
||||
public function handleConversionUpdateMessageCallback(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("PresentMessageReceiver::handleConversionUpdateMessageCallback()");
|
||||
|
89
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/PresentMessageSender.as
Normal file → Executable file
89
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/PresentMessageSender.as
Normal file → Executable file
@ -1,10 +1,13 @@
|
||||
package org.bigbluebutton.lib.presentation.services {
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
|
||||
public class PresentMessageSender {
|
||||
public var userSession:IUserSession;
|
||||
|
||||
public var conferenceParameters:IConferenceParameters;
|
||||
|
||||
// The default callbacks of userSession.mainconnection.sendMessage
|
||||
private var defaultSuccessResponse:Function = function(result:String):void {
|
||||
trace(result);
|
||||
@ -14,65 +17,49 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
trace(status);
|
||||
};
|
||||
|
||||
private var presenterViewedRegionX:Number = 0;
|
||||
|
||||
private var presenterViewedRegionY:Number = 0;
|
||||
|
||||
private var presenterViewedRegionW:Number = 100;
|
||||
|
||||
private var presenterViewedRegionH:Number = 100;
|
||||
|
||||
public function getPresentationInfo():void {
|
||||
trace("PresentMessageSender::getPresentationInfo() -- Sending [presentation.getPresentationInfo] message to server");
|
||||
userSession.mainConnection.sendMessage("presentation.getPresentationInfo", defaultSuccessResponse, defaultFailureResponse);
|
||||
trace("PresentMessageSender::getPresentationInfo() -- Sending [GetPresentationInfoReqMsg] message to server");
|
||||
var message:Object = {
|
||||
header: {name: "GetPresentationInfoReqMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {userId: conferenceParameters.internalUserID}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function gotoSlide(id:String):void {
|
||||
trace("PresentMessageSender::gotoSlide() -- Sending [presentation.gotoSlide] message to server with message [page:" + String + "]");
|
||||
var message:Object = new Object();
|
||||
message["page"] = id;
|
||||
userSession.mainConnection.sendMessage("presentation.gotoSlide", defaultSuccessResponse, defaultFailureResponse, message);
|
||||
public function setCurrentPage(presentationId: String, pageId: String):void {
|
||||
trace("PresentMessageSender::setCurrentPage() -- Sending [SetCurrentPagePubMsg] message to server with message [page:" + pageId + "]");
|
||||
var message:Object = {
|
||||
header: {name: "SetCurrentPagePubMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {presentationId: presentationId, pageId: pageId}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
/***
|
||||
* A hack for the viewer to sync with the presenter. Have the viewer query the presenter for it's x,y,width and height info.
|
||||
*/
|
||||
public function move(xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void {
|
||||
trace("PresentMessageSender::move() -- Sending [presentation.resizeAndMoveSlide] message to server with message " + "[xOffset:" + xOffset + ", yOffset:" + yOffset + ", widthRatio:" + widthRatio + ", heightRatio:" + heightRatio + "]");
|
||||
var message:Object = new Object();
|
||||
message["xOffset"] = xOffset;
|
||||
message["yOffset"] = yOffset;
|
||||
message["widthRatio"] = widthRatio;
|
||||
message["heightRatio"] = heightRatio;
|
||||
userSession.mainConnection.sendMessage("presentation.resizeAndMoveSlide", defaultSuccessResponse, defaultFailureResponse, message);
|
||||
presenterViewedRegionX = xOffset;
|
||||
presenterViewedRegionY = yOffset;
|
||||
presenterViewedRegionW = widthRatio;
|
||||
presenterViewedRegionH = heightRatio;
|
||||
public function move(presentationId: String, pageId: String, xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void {
|
||||
trace("PresentMessageSender::move() -- Sending [ResizeAndMovePagePubMsg] message to server with message " + "[xOffset:" + xOffset + ", yOffset:" + yOffset + ", widthRatio:" + widthRatio + ", heightRatio:" + heightRatio + "]");
|
||||
var message:Object = {
|
||||
header: {name: "ResizeAndMovePagePubMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {presentationId: presentationId, pageId: pageId, xOffset: xOffset, yOffset: yOffset, widthRatio: widthRatio, heightRatio: heightRatio}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function removePresentation(name:String):void {
|
||||
trace("PresentMessageSender::removePresentation() -- Sending [presentation.removePresentation] message to server with message [presentationID:" + name + "]");
|
||||
trace(" |- name : " + name);
|
||||
var message:Object = new Object();
|
||||
message["presentationID"] = name;
|
||||
userSession.mainConnection.sendMessage("presentation.removePresentation", defaultSuccessResponse, defaultFailureResponse, message);
|
||||
public function removePresentation(presentationId:String):void {
|
||||
trace("PresentMessageSender::removePresentation() -- Sending [RemovePresentationPubMsg] message to server with message [presentationId:" + presentationId + "]");
|
||||
var message:Object = {
|
||||
header: {name: "RemovePresentationPubMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {presentationId: presentationId}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function sendCursorUpdate(xPercent:Number, yPercent:Number):void {
|
||||
trace("PresentMessageSender::sendCursorUpdate() -- Sending [presentation.sendCursorUpdate] message to server with message [xPercent:" + xPercent + ", yPercent:" + yPercent);
|
||||
var message:Object = new Object();
|
||||
message["xPercent"] = xPercent;
|
||||
message["yPercent"] = yPercent;
|
||||
userSession.mainConnection.sendMessage("presentation.sendCursorUpdate", defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function sharePresentation(share:Boolean, presentationID:String):void {
|
||||
trace("PresentMessageSender::sharePresentation() -- Sending [presentation.sharePresentation] message to server with message [presentationID:" + presentationID + ", share:" + share);
|
||||
var message:Object = new Object();
|
||||
message["presentationID"] = presentationID;
|
||||
message["share"] = share;
|
||||
userSession.mainConnection.sendMessage("presentation.sharePresentation", defaultSuccessResponse, defaultFailureResponse, message);
|
||||
public function setCurrentPresentation(presentationId:String):void {
|
||||
trace("PresentMessageSender::setCurrentPresentation() -- Sending [SetCurrentPresentationPubMsg] message to server with message [presentationId:" + presentationId + "]");
|
||||
var message:Object = {
|
||||
header: {name: "SetCurrentPresentationPubMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {presentationId: presentationId}
|
||||
};
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
21
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/PresentationService.as
Normal file → Executable file
21
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/services/PresentationService.as
Normal file → Executable file
@ -22,6 +22,7 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
|
||||
public function setupMessageSenderReceiver():void {
|
||||
presentMessageSender.userSession = userSession;
|
||||
presentMessageSender.conferenceParameters = conferenceParameters;
|
||||
presentMessageReceiver.userSession = userSession;
|
||||
userSession.mainConnection.addMessageListener(presentMessageReceiver);
|
||||
}
|
||||
@ -30,24 +31,20 @@ package org.bigbluebutton.lib.presentation.services {
|
||||
presentMessageSender.getPresentationInfo();
|
||||
}
|
||||
|
||||
public function gotoSlide(id:String):void {
|
||||
presentMessageSender.gotoSlide(id);
|
||||
public function setCurrentPage(presentationId: String, pageId: String):void {
|
||||
presentMessageSender.setCurrentPage(presentationId, pageId);
|
||||
}
|
||||
|
||||
public function move(xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void {
|
||||
presentMessageSender.move(xOffset, yOffset, widthRatio, heightRatio);
|
||||
public function move(presentationId:String, pageId:String, xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void {
|
||||
presentMessageSender.move(presentationId, pageId, xOffset, yOffset, widthRatio, heightRatio);
|
||||
}
|
||||
|
||||
public function removePresentation(name:String):void {
|
||||
presentMessageSender.removePresentation(name);
|
||||
public function removePresentation(presentationId:String):void {
|
||||
presentMessageSender.removePresentation(presentationId);
|
||||
}
|
||||
|
||||
public function sendCursorUpdate(xPercent:Number, yPercent:Number):void {
|
||||
presentMessageSender.sendCursorUpdate(xPercent, yPercent);
|
||||
}
|
||||
|
||||
public function sharePresentation(share:Boolean, presentationName:String):void {
|
||||
presentMessageSender.sharePresentation(share, presentationName);
|
||||
public function setCurrentPresentation(presentationId:String):void {
|
||||
presentMessageSender.setCurrentPresentation(presentationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
33
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/views/PresentationMediatorBase.as
Normal file → Executable file
33
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/presentation/views/PresentationMediatorBase.as
Normal file → Executable file
@ -25,19 +25,14 @@ package org.bigbluebutton.lib.presentation.views {
|
||||
|
||||
protected var _currentPresentation:Presentation;
|
||||
|
||||
protected var _currentSlideNum:int = -1;
|
||||
|
||||
protected var _currentSlide:Slide;
|
||||
|
||||
protected var _slideModel:SlideModel = new SlideModel();
|
||||
|
||||
protected var _cursor:CursorIndicator = new CursorIndicator();
|
||||
|
||||
override public function initialize():void {
|
||||
view.addEventListener(ResizeEvent.RESIZE, viewResizeHandler);
|
||||
userSession.presentationList.presentationChangeSignal.add(presentationChangeHandler);
|
||||
userSession.presentationList.viewedRegionChangeSignal.add(viewedRegionChangeHandler);
|
||||
userSession.presentationList.cursorUpdateSignal.add(cursorUpdateHandler);
|
||||
view.swfLoader.addEventListener(Event.COMPLETE, handleLoadingComplete);
|
||||
_slideModel.parentChange(view.width, view.height);
|
||||
setPresentation(userSession.presentationList.currentPresentation);
|
||||
@ -47,8 +42,8 @@ package org.bigbluebutton.lib.presentation.views {
|
||||
if (_currentSlide != null) {
|
||||
_currentSlide.slideLoadedSignal.remove(slideLoadedHandler);
|
||||
}
|
||||
if (_currentPresentation != null && _currentSlideNum >= 0) {
|
||||
_currentSlide = _currentPresentation.getSlideAt(_currentSlideNum);
|
||||
if (_currentPresentation != null) {
|
||||
_currentSlide = _currentPresentation.currentSlide;
|
||||
if (_currentSlide != null) {
|
||||
// @fixme: needs to be improved as the view is sometimes null
|
||||
if (_currentSlide.loaded && view != null) {
|
||||
@ -76,10 +71,9 @@ package org.bigbluebutton.lib.presentation.views {
|
||||
if (_slideModel && view && view.swfLoader) {
|
||||
_slideModel.resetForNewSlide(view.swfLoader.contentWidth, view.swfLoader.contentHeight);
|
||||
if (userSession.presentationList.currentPresentation) {
|
||||
var currentSlide:Slide = userSession.presentationList.currentPresentation.getSlideAt(_currentSlideNum);
|
||||
var currentSlide:Slide = userSession.presentationList.currentPresentation.currentSlide;
|
||||
if (currentSlide) {
|
||||
resetSize(currentSlide.x, currentSlide.y, currentSlide.widthPercent, currentSlide.heightPercent);
|
||||
_cursor.draw(view.viewport, userSession.presentationList.cursorXPercent, userSession.presentationList.cursorYPercent);
|
||||
//resetSize(_currentSlide.x, _currentSlide.y, _currentSlide.widthPercent, _currentSlide.heightPercent);
|
||||
}
|
||||
}
|
||||
@ -126,30 +120,27 @@ package org.bigbluebutton.lib.presentation.views {
|
||||
view.wbCanvas.y = view.swfLoader.y;
|
||||
}
|
||||
|
||||
protected function cursorUpdateHandler(xPercent:Number, yPercent:Number):void {
|
||||
_cursor.draw(view.viewport, xPercent, yPercent);
|
||||
}
|
||||
|
||||
protected function presentationChangeHandler():void {
|
||||
setPresentation(userSession.presentationList.currentPresentation);
|
||||
}
|
||||
|
||||
protected function slideChangeHandler():void {
|
||||
setCurrentSlideNum(userSession.presentationList.currentPresentation.currentSlideNum);
|
||||
_cursor.remove(view.viewport);
|
||||
setCurrentSlide();
|
||||
}
|
||||
|
||||
protected function setPresentation(p:Presentation):void {
|
||||
_currentPresentation = p;
|
||||
if (_currentPresentation != null) {
|
||||
_currentPresentation.slideChangeSignal.remove(slideChangeHandler);
|
||||
}
|
||||
|
||||
_currentPresentation = p;
|
||||
if (_currentPresentation != null) {
|
||||
_currentPresentation.slideChangeSignal.add(slideChangeHandler);
|
||||
setCurrentSlideNum(p.currentSlideNum);
|
||||
setCurrentSlide();
|
||||
}
|
||||
}
|
||||
|
||||
protected function setCurrentSlideNum(n:int):void {
|
||||
_currentSlideNum = n;
|
||||
protected function setCurrentSlide():void {
|
||||
displaySlide();
|
||||
}
|
||||
|
||||
@ -161,10 +152,12 @@ package org.bigbluebutton.lib.presentation.views {
|
||||
view.swfLoader.removeEventListener(Event.COMPLETE, handleLoadingComplete);
|
||||
userSession.presentationList.presentationChangeSignal.remove(presentationChangeHandler);
|
||||
userSession.presentationList.viewedRegionChangeSignal.remove(viewedRegionChangeHandler);
|
||||
userSession.presentationList.cursorUpdateSignal.remove(cursorUpdateHandler);
|
||||
if (_currentPresentation != null) {
|
||||
_currentPresentation.slideChangeSignal.remove(slideChangeHandler);
|
||||
}
|
||||
if (_currentSlide != null) {
|
||||
_currentSlide.slideLoadedSignal.remove(slideLoadedHandler);
|
||||
}
|
||||
super.destroy();
|
||||
view = null;
|
||||
}
|
||||
|
6
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/SettingsViewBase.as
Normal file → Executable file
6
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/SettingsViewBase.as
Normal file → Executable file
@ -69,8 +69,8 @@ package org.bigbluebutton.lib.settings.views {
|
||||
|
||||
_settingsList = new List();
|
||||
_settingsList.percentWidth = 100;
|
||||
// @fixme height must be dynamic depending on the resolùution
|
||||
_settingsList.height = 560;
|
||||
// TODO @fixme height must be dynamic depending on the resolùution
|
||||
//_settingsList.height = 560;
|
||||
_settingsList.itemRenderer = new ClassFactory(getItemRendererClass());
|
||||
|
||||
var listLayout:VerticalLayout = new VerticalLayout();
|
||||
@ -92,6 +92,8 @@ package org.bigbluebutton.lib.settings.views {
|
||||
}
|
||||
|
||||
private function setParticipantStyle():void {
|
||||
var groupsPadding:Number = getStyle("groupsPadding")
|
||||
|
||||
SolidColor(_participantBackground.fill).color = getStyle("headerBackground");
|
||||
_participantIcon.top = getStyle("groupsPadding") * 1.75;
|
||||
_participantLabel.setStyle("color", _participantIcon.getStyle("color"));
|
||||
|
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/SettingsViewMediatorBase.as
Normal file → Executable file
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/SettingsViewMediatorBase.as
Normal file → Executable file
@ -3,7 +3,7 @@ package org.bigbluebutton.lib.settings.views {
|
||||
|
||||
import spark.events.IndexChangeEvent;
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.user.utils.UserUtils;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Mediator;
|
||||
@ -14,13 +14,13 @@ package org.bigbluebutton.lib.settings.views {
|
||||
public var view:SettingsViewBase;
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
protected var dataProvider:ArrayCollection;
|
||||
|
||||
override public function initialize():void {
|
||||
view.participantIcon.displayInitials = UserUtils.getInitials(userSession.userList.me.name);
|
||||
view.participantLabel.text = userSession.userList.me.name;
|
||||
view.participantIcon.displayInitials = UserUtils.getInitials(meetingData.users.me.name);
|
||||
view.participantLabel.text = meetingData.users.me.name;
|
||||
view.settingsList.dataProvider = dataProvider = new ArrayCollection([{label: "Audio", icon: "icon-unmute", page: "audio"}, {label: "Video", icon: "icon-video", page: "camera"}, {label: "Application", icon: "icon-application", page: "chat"}, {label: "Participants", icon: "icon-user", page: "lock"}, {label: "Leave Session", icon: "icon-logout", page: "exit"}]);
|
||||
|
||||
view.settingsList.addEventListener(IndexChangeEvent.CHANGE, onListIndexChangeEvent);
|
||||
|
4
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/audio/AudioSettingsViewBase.as
Normal file → Executable file
4
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/audio/AudioSettingsViewBase.as
Normal file → Executable file
@ -67,7 +67,7 @@ package org.bigbluebutton.lib.settings.views.audio {
|
||||
addElement(microphoneGroup);
|
||||
|
||||
var microphoneLabel:Label = new Label();
|
||||
microphoneLabel.text = "Enable mirohpone";
|
||||
microphoneLabel.text = "Enable microphone";
|
||||
microphoneLabel.percentWidth = 100;
|
||||
microphoneGroup.addElement(microphoneLabel);
|
||||
|
||||
@ -85,7 +85,7 @@ package org.bigbluebutton.lib.settings.views.audio {
|
||||
addElement(gainGroup);
|
||||
|
||||
var gainLabel:Label = new Label();
|
||||
gainLabel.text = "Mirohpone level";
|
||||
gainLabel.text = "Microphone level";
|
||||
gainGroup.addElement(gainLabel);
|
||||
|
||||
// Gain sub-group
|
||||
|
11
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/camera/CameraProfileItemRenderer.mxml
Normal file → Executable file
11
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/settings/views/camera/CameraProfileItemRenderer.mxml
Normal file → Executable file
@ -15,11 +15,20 @@
|
||||
labelField.setStyle('paddingLeft', getStyle('padding'));
|
||||
labelField.setStyle('fontSize', getStyle('fontSize'));
|
||||
}
|
||||
|
||||
override public function set data(value:Object):void {
|
||||
super.data = value;
|
||||
|
||||
if (value != null) {
|
||||
labelField.text = value.name;
|
||||
} else {
|
||||
labelField.text = "";
|
||||
}
|
||||
}
|
||||
]]>
|
||||
</fx:Script>
|
||||
|
||||
<s:Label id="labelField"
|
||||
text="{data.name}"
|
||||
width="100%" />
|
||||
|
||||
</s:ItemRenderer>
|
||||
|
6
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/events/UserItemSelectedEvent.as
Normal file → Executable file
6
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/events/UserItemSelectedEvent.as
Normal file → Executable file
@ -2,17 +2,17 @@ package org.bigbluebutton.lib.user.events {
|
||||
import flash.events.Event;
|
||||
import flash.geom.Point;
|
||||
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.user.views.models.UserVM;
|
||||
|
||||
public class UserItemSelectedEvent extends Event {
|
||||
public static var SELECTED:String = "USER_ITEM_SELECTED_EVENT";
|
||||
|
||||
public var user:User;
|
||||
public var user:UserVM;
|
||||
public var globalPos:Point;
|
||||
public var width:Number;
|
||||
public var height:Number;
|
||||
|
||||
public function UserItemSelectedEvent(u:User, gp:Point, w:Number, h:Number) {
|
||||
public function UserItemSelectedEvent(u:UserVM, gp:Point, w:Number, h:Number) {
|
||||
super(SELECTED, true, false);
|
||||
|
||||
user = u;
|
||||
|
@ -0,0 +1,22 @@
|
||||
package org.bigbluebutton.lib.user.models {
|
||||
|
||||
public class EmojiStatus {
|
||||
public static const NO_STATUS:String = "none";
|
||||
|
||||
public static const RAISE_HAND:String = "raiseHand";
|
||||
|
||||
public static const HAPPY:String = "happy";
|
||||
|
||||
public static const SMILE:String = "smile";
|
||||
|
||||
public static const NEUTRAL:String = "neutral";
|
||||
|
||||
public static const SAD:String = "sad";
|
||||
|
||||
public static const CONFUSED:String = "confused";
|
||||
|
||||
public static const AWAY:String = "away";
|
||||
|
||||
public static const STATUS_ARRAY:Array = [RAISE_HAND, HAPPY, SMILE, NEUTRAL, SAD, CONFUSED, AWAY];
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package org.bigbluebutton.lib.user.models {
|
||||
|
||||
public class User2x {
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package org.bigbluebutton.lib.user.models {
|
||||
|
||||
public class UserChangeEnum {
|
||||
public static const JOIN:int = 0;
|
||||
|
||||
public static const LEAVE:int = 1;
|
||||
|
||||
public static const PRESENTER:int = 2;
|
||||
|
||||
public static const LOCKED:int = 3;
|
||||
|
||||
public static const EMOJI:int = 4;
|
||||
|
||||
public static const ROLE:int = 5;
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package org.bigbluebutton.lib.user.models {
|
||||
|
||||
public class UserRole {
|
||||
public static const MODERATOR:String = "MODERATOR";
|
||||
|
||||
public static const VIEWER:String = "VIEWER";
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package org.bigbluebutton.lib.user.models {
|
||||
import mx.collections.ArrayCollection;
|
||||
|
||||
import org.osflash.signals.Signal;
|
||||
|
||||
public class Users2x {
|
||||
private var _users:ArrayCollection;
|
||||
|
||||
private var _userChangeSignal:Signal = new Signal();
|
||||
|
||||
public var me:User2x;
|
||||
|
||||
public function get userChangeSignal():Signal {
|
||||
return _userChangeSignal;
|
||||
}
|
||||
|
||||
public function Users2x() {
|
||||
_users = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getUsers():Array {
|
||||
return _users.toArray();
|
||||
}
|
||||
|
||||
public function add(user:User2x):void {
|
||||
if (getUserIndex(user.intId) == -1) {
|
||||
_users.addItem(user);
|
||||
_userChangeSignal.dispatch(user, UserChangeEnum.JOIN);
|
||||
}
|
||||
}
|
||||
|
||||
public function remove(intId:String):User2x {
|
||||
var index:int = getUserIndex(intId);
|
||||
if (index >= 0) {
|
||||
var removedUser:User2x = _users.removeItemAt(index) as User2x;
|
||||
_userChangeSignal.dispatch(removedUser, UserChangeEnum.LEAVE);
|
||||
return removedUser;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getUser(intId:String):User2x {
|
||||
var user:User2x;
|
||||
for (var i:int = 0; i < _users.length; i++) {
|
||||
user = _users.getItemAt(i) as User2x;
|
||||
|
||||
if (user.intId == intId) {
|
||||
return user;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getUserIndex(intId:String):int {
|
||||
var user:User2x;
|
||||
for (var i:int = 0; i < _users.length; i++) {
|
||||
user = _users.getItemAt(i) as User2x;
|
||||
|
||||
if (user.intId == intId) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public function changeUserLocked(intId:String, locked:Boolean):void {
|
||||
var user:User2x = getUser(intId);
|
||||
if (user != null) {
|
||||
user.locked = locked;
|
||||
_userChangeSignal.dispatch(user, UserChangeEnum.LOCKED);
|
||||
}
|
||||
}
|
||||
|
||||
public function changePresenter(intId:String, presenter:Boolean):void {
|
||||
var user:User2x = getUser(intId);
|
||||
if (user != null) {
|
||||
user.presenter = presenter;
|
||||
_userChangeSignal.dispatch(user, UserChangeEnum.PRESENTER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
19
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/services/IUsersService.as
Normal file → Executable file
19
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/services/IUsersService.as
Normal file → Executable file
@ -4,23 +4,23 @@ package org.bigbluebutton.lib.user.services {
|
||||
|
||||
public interface IUsersService {
|
||||
function setupMessageSenderReceiver():void;
|
||||
function kickUser(userID:String):void;
|
||||
function kickUser(userId:String):void;
|
||||
function queryForParticipants():void;
|
||||
function assignPresenter(userid:String, name:String, assignedBy:String):void;
|
||||
function assignPresenter(userId:String, name:String):void;
|
||||
function emojiStatus(status:String):void;
|
||||
function clearUserStatus(userID:String):void
|
||||
function addStream(userID:String, streamName:String):void;
|
||||
function removeStream(userID:String, streamName:String):void;
|
||||
function clearUserStatus(userId:String):void
|
||||
function addStream(userId:String, streamName:String):void;
|
||||
function removeStream(userId:String, streamName:String):void;
|
||||
function queryForRecordingStatus():void;
|
||||
function changeRecordingStatus(userID:String, recording:Boolean):void;
|
||||
function changeRecordingStatus(userId:String, recording:Boolean):void;
|
||||
function muteAllUsers(mute:Boolean):void;
|
||||
function muteAllUsersExceptPresenter(mute:Boolean):void;
|
||||
function muteUnmuteUser(userid:String, mute:Boolean):void;
|
||||
function ejectUser(userid:String):void;
|
||||
function muteUnmuteUser(userId:String, mute:Boolean):void;
|
||||
function ejectUser(userId:String):void;
|
||||
function getRoomMuteState():void;
|
||||
function getRoomLockState():void;
|
||||
function setAllUsersLock(lock:Boolean, except:Array = null):void;
|
||||
function setUserLock(internalUserID:String, lock:Boolean):void;
|
||||
function setUserLock(internalUserId:String, lock:Boolean):void;
|
||||
function getLockSettings():void;
|
||||
function saveLockSettings(newLockSettings:Object):void;
|
||||
function muteMe():void;
|
||||
@ -28,5 +28,6 @@ package org.bigbluebutton.lib.user.services {
|
||||
function mute(user:User):void;
|
||||
function unmute(user:User):void;
|
||||
function validateToken():void;
|
||||
function joinMeeting():void;
|
||||
}
|
||||
}
|
||||
|
@ -2,38 +2,33 @@ package org.bigbluebutton.lib.user.services {
|
||||
import mx.utils.ObjectUtil;
|
||||
|
||||
import org.bigbluebutton.lib.common.models.IMessageListener;
|
||||
import org.bigbluebutton.lib.main.commands.AuthenticationSignal;
|
||||
import org.bigbluebutton.lib.main.commands.DisconnectUserSignal;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.LockSettings2x;
|
||||
import org.bigbluebutton.lib.main.utils.DisconnectEnum;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
|
||||
public class UsersMessageReceiver implements IMessageListener {
|
||||
private const LOG:String = "UsersMessageReceiver::";
|
||||
|
||||
public var userSession:IUserSession;
|
||||
|
||||
public var authenticationSignal:AuthenticationSignal;
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
public var conferenceParameters:IConferenceParameters;
|
||||
|
||||
public var disconnectUserSignal:DisconnectUserSignal;
|
||||
|
||||
private var lastSipEvent:Object = null;
|
||||
|
||||
public function UsersMessageReceiver() {
|
||||
}
|
||||
|
||||
public function onMessage(messageName:String, message:Object):void {
|
||||
trace(LOG + "RECEIVED MESSAGE: [" + messageName + "]");
|
||||
switch (messageName) {
|
||||
case "voiceUserTalking":
|
||||
handleVoiceUserTalking(message);
|
||||
break;
|
||||
case "participantJoined":
|
||||
handleParticipantJoined(message);
|
||||
break;
|
||||
case "participantLeft":
|
||||
handleParticipantLeft(message);
|
||||
break;
|
||||
case "userJoinedVoice":
|
||||
handleUserJoinedVoice(message);
|
||||
break;
|
||||
@ -50,9 +45,6 @@ package org.bigbluebutton.lib.user.services {
|
||||
case "userListeningOnly":
|
||||
handleUserListeningOnly(message);
|
||||
break;
|
||||
case "assignPresenterCallback":
|
||||
handleAssignPresenterCallback(message);
|
||||
break;
|
||||
case "voiceUserMuted":
|
||||
handleVoiceUserMuted(message);
|
||||
break;
|
||||
@ -62,9 +54,6 @@ package org.bigbluebutton.lib.user.services {
|
||||
case "joinMeetingReply":
|
||||
handleJoinedMeeting(message);
|
||||
break
|
||||
case "getUsersReply":
|
||||
handleGetUsersReply(message);
|
||||
break;
|
||||
case "getRecordingStatusReply":
|
||||
handleGetRecordingStatusReply(message);
|
||||
break;
|
||||
@ -75,40 +64,52 @@ package org.bigbluebutton.lib.user.services {
|
||||
case "userEmojiStatus":
|
||||
handleEmojiStatus(message);
|
||||
break;
|
||||
case "validateAuthTokenTimedOut":
|
||||
handleValidateAuthTokenTimedOut(message);
|
||||
break;
|
||||
case "validateAuthTokenReply":
|
||||
handleValidateAuthTokenReply(message);
|
||||
break;
|
||||
case "meetingState":
|
||||
handleMeetingState(message);
|
||||
break;
|
||||
case "permissionsSettingsChanged":
|
||||
handlePermissionsSettingsChanged(message);
|
||||
break;
|
||||
case "meetingMuted":
|
||||
handleMeetingMuted(message);
|
||||
break;
|
||||
case "userLocked":
|
||||
handleUserLocked(message);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case "GetUsersMeetingRespMsg":
|
||||
handleGetUsersMeetingRespMsg(message);
|
||||
break;
|
||||
case "UserJoinedMeetingEvtMsg":
|
||||
handleUserJoinedMeetingEvtMsg(message);
|
||||
break;
|
||||
case "UserLeftMeetingEvtMsg":
|
||||
handleUserLeftMeetingEvtMsg(message);
|
||||
break;
|
||||
case "UserLockedInMeetingEvtMsg":
|
||||
handleUserLockedInMeetingEvtMsg(message);
|
||||
break;
|
||||
case "PresenterAssignedEvtMsg":
|
||||
handlePresenterAssignedEvtMsg(message);
|
||||
break;
|
||||
case "PresenterUnassignedEvtMsg":
|
||||
handlePresenterUnassignedEvtMsg(message);
|
||||
break;
|
||||
case "LockSettingsInMeetingChangedEvtMsg":
|
||||
handleLockSettingsInMeetingChangedEvtMsg(message);
|
||||
break;
|
||||
case "GetLockSettingsRespMsg":
|
||||
handleGetLockSettingsRespMsg(message);
|
||||
break;
|
||||
case "LockSettingsNotInitializedRespMsg":
|
||||
handleLockSettingsNotInitializedRespMsg(message);
|
||||
break;
|
||||
case "ValidateAuthTokenRespMsg":
|
||||
handleValidateAuthTokenRespMsg(message);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function handleUserLocked(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("handleUserLocked: " + ObjectUtil.toString(msg));
|
||||
trace("your id: " + userSession.userList.me.userId);
|
||||
var user:User = userSession.userList.getUserByUserId(msg.user);
|
||||
user.locked = msg.lock;
|
||||
if (userSession.userList.me.userId == msg.user) {
|
||||
userSession.dispatchLockSettings();
|
||||
}
|
||||
}
|
||||
|
||||
private function handleMeetingMuted(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("handleMeetingMuted: " + ObjectUtil.toString(msg));
|
||||
@ -121,24 +122,6 @@ package org.bigbluebutton.lib.user.services {
|
||||
updateLockSettings(msg.permissions);
|
||||
}
|
||||
|
||||
private function handlePermissionsSettingsChanged(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("permissionsSettingsChanged: " + ObjectUtil.toString(msg));
|
||||
updateLockSettings(msg);
|
||||
}
|
||||
|
||||
private function updateLockSettings(msg:Object):void {
|
||||
userSession.lockSettings.disableCam = msg.disableCam;
|
||||
userSession.lockSettings.disableMic = msg.disableMic;
|
||||
// bbb 1.0 compatibility: different variable names
|
||||
userSession.lockSettings.disablePrivateChat = msg.hasOwnProperty("disablePrivChat") ? msg.disablePrivChat : msg.disablePrivateChat;
|
||||
userSession.lockSettings.disablePublicChat = msg.hasOwnProperty("disablePubChat") ? msg.disablePubChat : msg.disablePublicChat;
|
||||
userSession.lockSettings.lockedLayout = msg.lockedLayout;
|
||||
userSession.lockSettings.lockOnJoin = msg.lockOnJoin;
|
||||
userSession.lockSettings.lockOnJoinConfigurable = msg.lockOnJoinConfigurable;
|
||||
userSession.dispatchLockSettings();
|
||||
}
|
||||
|
||||
private function handleEmojiStatus(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace("UsersMessageReceiver::handleEmojiStatusHand() -- user [" + msg.userId + "," + msg.emojiStatus + "] ");
|
||||
@ -151,52 +134,6 @@ package org.bigbluebutton.lib.user.services {
|
||||
userSession.userList.userTalkingChange(msg.voiceUserId, msg.talking);
|
||||
}
|
||||
|
||||
private function handleGetUsersReply(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
for (var i:int; i < msg.users.length; i++) {
|
||||
var newUser:Object = msg.users[i];
|
||||
addParticipant(newUser);
|
||||
}
|
||||
userSession.userList.allUsersAddedSignal.dispatch();
|
||||
}
|
||||
|
||||
private function handleParticipantJoined(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
var newUser:Object = msg.user;
|
||||
addParticipant(newUser);
|
||||
}
|
||||
|
||||
private function addParticipant(newUser:Object):void {
|
||||
var user:User = new User;
|
||||
user.hasStream = newUser.hasStream;
|
||||
user.streamName = newUser.webcamStream;
|
||||
user.locked = newUser.locked;
|
||||
user.name = newUser.name;
|
||||
user.phoneUser = newUser.phoneUser;
|
||||
user.presenter = newUser.presenter;
|
||||
user.role = newUser.role;
|
||||
user.userId = newUser.userId;
|
||||
user.voiceJoined = newUser.voiceUser.joined;
|
||||
user.voiceUserId = newUser.voiceUser.userId;
|
||||
user.isLeavingFlag = false;
|
||||
user.listenOnly = newUser.listenOnly;
|
||||
user.muted = newUser.voiceUser.muted;
|
||||
user.status = newUser.status;
|
||||
userSession.userList.addUser(user);
|
||||
}
|
||||
|
||||
private function handleParticipantLeft(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace(LOG + "handleParticipantLeft() -- user [" + msg.user.userId + "] has left the meeting");
|
||||
userSession.userList.removeUser(msg.user.userId);
|
||||
}
|
||||
|
||||
private function handleAssignPresenterCallback(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
trace(LOG + "handleAssignPresenterCallback() -- user [" + msg.newPresenterID + "] is now the presenter");
|
||||
userSession.userList.assignPresenter(msg.newPresenterID);
|
||||
}
|
||||
|
||||
private function handleUserJoinedVoice(m:Object):void {
|
||||
var msg:Object = JSON.parse(m.msg);
|
||||
var voiceUser:Object = msg.user.voiceUser;
|
||||
@ -259,27 +196,105 @@ package org.bigbluebutton.lib.user.services {
|
||||
userSession.recordingStatusChanged(msg.recording);
|
||||
}
|
||||
|
||||
private function handleValidateAuthTokenTimedOut(msg:Object):void {
|
||||
trace(LOG + "handleValidateAuthTokenTimedOut() " + msg.msg);
|
||||
authenticationSignal.dispatch("timedOut");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private function handleGetUsersMeetingRespMsg(msg:Object):void {
|
||||
var users:Array = msg.body.users as Array;
|
||||
|
||||
for (var i:int; i < users.length; i++) {
|
||||
var newUser:Object = users[i];
|
||||
addUser(newUser);
|
||||
}
|
||||
}
|
||||
|
||||
private function handleValidateAuthTokenReply(msg:Object):void {
|
||||
trace(LOG + "*** handleValidateAuthTokenReply " + msg.msg);
|
||||
var map:Object = JSON.parse(msg.msg);
|
||||
var tokenValid:Boolean = map.valid as Boolean;
|
||||
var userId:String = map.userId as String;
|
||||
trace(LOG + "handleValidateAuthTokenReply() valid=" + tokenValid);
|
||||
if (!tokenValid) {
|
||||
authenticationSignal.dispatch("invalid");
|
||||
} else {
|
||||
// why 2 different signals for authentication??
|
||||
//userUISession.loading = false; in authentication command can break order of functions
|
||||
trace(LOG + "got here!");
|
||||
if (userSession == null)
|
||||
trace(LOG + "User Session is NULL!!!!");
|
||||
userSession.authTokenSignal.dispatch(true);
|
||||
private function handleUserJoinedMeetingEvtMsg(msg:Object):void {
|
||||
addUser(msg.body);
|
||||
}
|
||||
|
||||
private function addUser(newUser:Object):void {
|
||||
var user:User2x = new User2x();
|
||||
user.intId = newUser.intId;
|
||||
user.extId = newUser.extId;
|
||||
user.name = newUser.name;
|
||||
user.role = newUser.role;
|
||||
user.guest = newUser.guest;
|
||||
user.authed = newUser.authed;
|
||||
user.waitingForAcceptance = newUser.waitingForAcceptance;
|
||||
user.emoji = newUser.emoji;
|
||||
user.locked = newUser.locked;
|
||||
user.presenter = newUser.presenter;
|
||||
user.avatar = newUser.avatar;
|
||||
|
||||
if (user.intId == conferenceParameters.internalUserID) {
|
||||
meetingData.users.me = user;
|
||||
}
|
||||
meetingData.users.add(user);
|
||||
}
|
||||
|
||||
private function handleUserLeftMeetingEvtMsg(msg:Object):void {
|
||||
trace(LOG + "handleUserLeftMeetingEvtMsg() -- user [" + msg.body.intId + "] has left the meeting");
|
||||
meetingData.users.remove(msg.intId);
|
||||
}
|
||||
|
||||
private function handleUserLockedInMeetingEvtMsg(msg:Object):void {
|
||||
trace(LOG + "handleUserLockedInMeetingEvtMsg: " + ObjectUtil.toString(msg));
|
||||
meetingData.users.changeUserLocked(msg.body.userId, msg.body.locked);
|
||||
}
|
||||
|
||||
private function handlePresenterAssignedEvtMsg(msg:Object):void {
|
||||
trace(LOG + "handlePresenterAssignedEvtMsg() -- user [" + msg.body.presenterId + "] is now the presenter");
|
||||
meetingData.users.changePresenter(msg.body.presenterId, true);
|
||||
}
|
||||
|
||||
private function handlePresenterUnassignedEvtMsg(msg:Object):void {
|
||||
trace(LOG + "handlePresenterUnassignedEvtMsg() -- user [" + msg.body.intId + "] is no longer the presenter");
|
||||
meetingData.users.changePresenter(msg.body.intId, false);
|
||||
}
|
||||
|
||||
private function handleLockSettingsInMeetingChangedEvtMsg(msg:Object):void {
|
||||
trace(LOG + "handleLockSettingsInMeetingChangedEvtMsg: " + ObjectUtil.toString(msg));
|
||||
updateLockSettings(msg.body);
|
||||
}
|
||||
|
||||
private function handleGetLockSettingsRespMsg(msg:Object):void {
|
||||
trace(LOG + "handleGetLockSettingsRespMsg: " + ObjectUtil.toString(msg));
|
||||
updateLockSettings(msg.body);
|
||||
}
|
||||
|
||||
private function updateLockSettings(body:Object):void {
|
||||
var newLockSettings:LockSettings2x = new LockSettings2x();
|
||||
newLockSettings.disableCam = body.disableCam;
|
||||
newLockSettings.disableMic = body.disableMic;
|
||||
newLockSettings.disablePrivChat = body.disablePrivChat;
|
||||
newLockSettings.disablePubChat = body.disablePubChat;
|
||||
newLockSettings.lockedLayout = body.lockedLayout;
|
||||
newLockSettings.lockOnJoin = body.lockOnJoin;
|
||||
newLockSettings.lockOnJoinConfigurable = body.lockOnJoinConfigurable;
|
||||
meetingData.meetingStatus.changeLockSettings(newLockSettings);
|
||||
}
|
||||
|
||||
private function handleLockSettingsNotInitializedRespMsg(msg:Object):void {
|
||||
trace(LOG + "handleLockSettingsNotInitializedRespMsg: " + ObjectUtil.toString(msg));
|
||||
trace("***** NEED TO ACTUALLY HANDLE THE LOCK INITIALIZATION *****");
|
||||
}
|
||||
|
||||
private function handleValidateAuthTokenRespMsg(msg:Object):void {
|
||||
var tokenValid:Boolean = msg.body.valid as Boolean;
|
||||
trace(LOG + "handleValidateAuthTokenReply() valid=" + tokenValid);
|
||||
userSession.userId = msg.body.userId;
|
||||
userSession.authTokenSignal.dispatch(tokenValid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
35
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/services/UsersMessageSender.as
Normal file → Executable file
35
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/services/UsersMessageSender.as
Normal file → Executable file
@ -1,9 +1,11 @@
|
||||
package org.bigbluebutton.lib.user.services {
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
|
||||
public class UsersMessageSender {
|
||||
public var userSession:IUserSession;
|
||||
public var conferenceParameters:IConferenceParameters;
|
||||
|
||||
// The default callbacks of userSession.mainconnection.sendMessage
|
||||
private var defaultSuccessResponse:Function = function(result:String):void {
|
||||
@ -17,6 +19,15 @@ package org.bigbluebutton.lib.user.services {
|
||||
public function UsersMessageSender() {
|
||||
}
|
||||
|
||||
public function joinMeeting():void {
|
||||
var message:Object = {
|
||||
header: {name: "UserJoinMeetingReqMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {userId: conferenceParameters.internalUserID, authToken: conferenceParameters.authToken}
|
||||
};
|
||||
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function kickUser(userID:String):void {
|
||||
trace("UsersMessageSender::kickUser() -- Sending [participants.kickUser] message to server.. with message [userID:" + userID + "]");
|
||||
var message:Object = new Object();
|
||||
@ -25,8 +36,14 @@ package org.bigbluebutton.lib.user.services {
|
||||
}
|
||||
|
||||
public function queryForParticipants():void {
|
||||
trace("UsersMessageSender::queryForParticipants() -- Sending [participants.getParticipants] message to server");
|
||||
userSession.mainConnection.sendMessage("participants.getParticipants", defaultSuccessResponse, defaultFailureResponse);
|
||||
trace("UsersMessageSender::queryForParticipants() -- Sending [GetUsersMeetingReqMsg] message to server");
|
||||
|
||||
var message:Object = {
|
||||
header: {name: "GetUsersMeetingReqMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {userId: conferenceParameters.internalUserID}
|
||||
};
|
||||
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
|
||||
public function assignPresenter(userid:String, name:String, assignedBy:String):void {
|
||||
@ -130,11 +147,13 @@ package org.bigbluebutton.lib.user.services {
|
||||
}
|
||||
|
||||
public function validateToken(internalUserID:String, authToken:String):void {
|
||||
trace("UsersMessageSender::validateToken() -- Sending [validateToken] message to server");
|
||||
var message:Object = new Object();
|
||||
message["userId"] = internalUserID;
|
||||
message["authToken"] = authToken;
|
||||
userSession.mainConnection.sendMessage("validateToken", defaultSuccessResponse, defaultFailureResponse, message);
|
||||
trace("UsersMessageSender::validateToken() -- Sending [ValidateAuthTokenReqMsg] message to server");
|
||||
var message:Object = {
|
||||
header: {name: "ValidateAuthTokenReqMsg", meetingId: conferenceParameters.meetingID, userId: conferenceParameters.internalUserID},
|
||||
body: {userId: internalUserID, authToken: authToken}
|
||||
};
|
||||
|
||||
userSession.mainConnection.sendMessage2x(defaultSuccessResponse, defaultFailureResponse, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
42
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/services/UsersService.as
Normal file → Executable file
42
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/services/UsersService.as
Normal file → Executable file
@ -1,9 +1,10 @@
|
||||
package org.bigbluebutton.lib.user.services {
|
||||
|
||||
import org.bigbluebutton.lib.main.commands.AuthenticationSignal;
|
||||
import org.bigbluebutton.lib.main.commands.DisconnectUserSignal;
|
||||
import org.bigbluebutton.lib.main.models.IConferenceParameters;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.user.models.EmojiStatus;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
|
||||
public class UsersService implements IUsersService {
|
||||
@ -15,7 +16,7 @@ package org.bigbluebutton.lib.user.services {
|
||||
public var userSession:IUserSession;
|
||||
|
||||
[Inject]
|
||||
public var authenticationSignal:AuthenticationSignal;
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
[Inject]
|
||||
public var disconnectUserSignal:DisconnectUserSignal;
|
||||
@ -31,9 +32,11 @@ package org.bigbluebutton.lib.user.services {
|
||||
|
||||
public function setupMessageSenderReceiver():void {
|
||||
usersMessageReceiver.userSession = userSession;
|
||||
usersMessageReceiver.authenticationSignal = authenticationSignal;
|
||||
usersMessageReceiver.meetingData = meetingData;
|
||||
usersMessageReceiver.conferenceParameters = conferenceParameters;
|
||||
usersMessageReceiver.disconnectUserSignal = disconnectUserSignal;
|
||||
usersMessageSender.userSession = userSession;
|
||||
usersMessageSender.conferenceParameters = conferenceParameters;
|
||||
userSession.mainConnection.addMessageListener(usersMessageReceiver);
|
||||
userSession.logoutSignal.add(logout);
|
||||
}
|
||||
@ -81,28 +84,28 @@ package org.bigbluebutton.lib.user.services {
|
||||
usersMessageSender.emojiStatus(userSession.userList.me.userId, status);
|
||||
}
|
||||
|
||||
public function clearUserStatus(userID:String):void {
|
||||
usersMessageSender.emojiStatus(userID, User.NO_STATUS);
|
||||
public function clearUserStatus(userId:String):void {
|
||||
usersMessageSender.emojiStatus(userId, EmojiStatus.NO_STATUS);
|
||||
}
|
||||
|
||||
public function kickUser(userID:String):void {
|
||||
usersMessageSender.kickUser(userID);
|
||||
public function kickUser(userId:String):void {
|
||||
usersMessageSender.kickUser(userId);
|
||||
}
|
||||
|
||||
public function queryForParticipants():void {
|
||||
usersMessageSender.queryForParticipants();
|
||||
}
|
||||
|
||||
public function assignPresenter(userid:String, name:String, assignedBy:String):void {
|
||||
usersMessageSender.assignPresenter(userid, name, assignedBy);
|
||||
public function assignPresenter(userId:String, name:String):void {
|
||||
usersMessageSender.assignPresenter(userId, name, meetingData.users.me.intId);
|
||||
}
|
||||
|
||||
public function queryForRecordingStatus():void {
|
||||
usersMessageSender.queryForRecordingStatus();
|
||||
}
|
||||
|
||||
public function changeRecordingStatus(userID:String, recording:Boolean):void {
|
||||
usersMessageSender.changeRecordingStatus(userID, recording);
|
||||
public function changeRecordingStatus(userId:String, recording:Boolean):void {
|
||||
usersMessageSender.changeRecordingStatus(userId, recording);
|
||||
}
|
||||
|
||||
public function muteAllUsers(mute:Boolean):void {
|
||||
@ -113,12 +116,12 @@ package org.bigbluebutton.lib.user.services {
|
||||
usersMessageSender.muteAllUsersExceptPresenter(mute);
|
||||
}
|
||||
|
||||
public function muteUnmuteUser(userid:String, mute:Boolean):void {
|
||||
usersMessageSender.muteUnmuteUser(userid, mute);
|
||||
public function muteUnmuteUser(userId:String, mute:Boolean):void {
|
||||
usersMessageSender.muteUnmuteUser(userId, mute);
|
||||
}
|
||||
|
||||
public function ejectUser(userid:String):void {
|
||||
usersMessageSender.ejectUser(userid);
|
||||
public function ejectUser(userId:String):void {
|
||||
usersMessageSender.ejectUser(userId);
|
||||
}
|
||||
|
||||
public function getRoomMuteState():void {
|
||||
@ -133,8 +136,8 @@ package org.bigbluebutton.lib.user.services {
|
||||
usersMessageSender.setAllUsersLock(lock, except);
|
||||
}
|
||||
|
||||
public function setUserLock(internalUserID:String, lock:Boolean):void {
|
||||
usersMessageSender.setUserLock(internalUserID, lock);
|
||||
public function setUserLock(internalUserId:String, lock:Boolean):void {
|
||||
usersMessageSender.setUserLock(internalUserId, lock);
|
||||
}
|
||||
|
||||
public function getLockSettings():void {
|
||||
@ -148,6 +151,9 @@ package org.bigbluebutton.lib.user.services {
|
||||
public function validateToken():void {
|
||||
usersMessageSender.validateToken(conferenceParameters.internalUserID, conferenceParameters.authToken);
|
||||
}
|
||||
|
||||
|
||||
public function joinMeeting():void {
|
||||
usersMessageSender.joinMeeting();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/utils/UserUtils.as
Normal file → Executable file
8
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/user/utils/UserUtils.as
Normal file → Executable file
@ -6,8 +6,12 @@ package org.bigbluebutton.lib.user.utils {
|
||||
* words number is used
|
||||
*/
|
||||
public static function getInitials(name:String):String {
|
||||
var matches:Array = name.match(/\b\w/g) || [];
|
||||
return ((matches.shift() || '') + (matches.pop() || '')).toUpperCase();
|
||||
if (name) {
|
||||
var matches:Array = name.match(/\b\w/g) || [];
|
||||
return ((matches.shift() || '') + (matches.pop() || '')).toUpperCase();
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,8 +19,8 @@
|
||||
<fx:Script>
|
||||
<![CDATA[
|
||||
import org.bigbluebutton.lib.user.events.UserItemSelectedEvent;
|
||||
import org.bigbluebutton.lib.user.models.User;
|
||||
import org.bigbluebutton.lib.user.utils.UserUtils;
|
||||
import org.bigbluebutton.lib.user.views.models.UserVM;
|
||||
|
||||
private function onClick():void {
|
||||
sendSelectedEvent();
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
private function sendSelectedEvent():void {
|
||||
if (currentState == "selected") {
|
||||
dispatchEvent(new UserItemSelectedEvent(data as User, localToGlobal(new Point()), width, height));
|
||||
dispatchEvent(new UserItemSelectedEvent(data as UserVM, localToGlobal(new Point()), width, height));
|
||||
}
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@
|
||||
if (obj) {
|
||||
cameraIcon.visible = obj.hasStream;
|
||||
|
||||
if (obj.voiceJoined) {
|
||||
if (obj.inVoiceConf) {
|
||||
if (obj.muted) {
|
||||
audioIcon.styleName = "icon icon-audio-off";
|
||||
} else if (obj.talking) {
|
||||
@ -74,7 +74,7 @@
|
||||
audioIcon.styleName = "";
|
||||
}
|
||||
|
||||
lockIcon.visible = obj.locked;
|
||||
lockIcon.visible = obj.locked && obj.roomLocked;
|
||||
|
||||
if (obj.me) {
|
||||
labelDisplay.text = obj.name + " " + "(you)"; //resourceManager.getString('resources', 'userDetail.you');
|
||||
|
@ -1,8 +1,10 @@
|
||||
package org.bigbluebutton.lib.user.views {
|
||||
import mx.collections.ArrayCollection;
|
||||
|
||||
import org.bigbluebutton.lib.main.models.IUserSession;
|
||||
import org.bigbluebutton.lib.main.models.IMeetingData;
|
||||
import org.bigbluebutton.lib.user.events.UserItemSelectedEvent;
|
||||
import org.bigbluebutton.lib.user.models.User2x;
|
||||
import org.bigbluebutton.lib.user.models.UserChangeEnum;
|
||||
import org.bigbluebutton.lib.user.views.models.UserVM;
|
||||
import org.bigbluebutton.lib.user.views.models.UsersVMCollection;
|
||||
|
||||
import robotlegs.bender.bundles.mvcs.Mediator;
|
||||
|
||||
@ -12,22 +14,115 @@ package org.bigbluebutton.lib.user.views {
|
||||
public var view:UsersViewBase;
|
||||
|
||||
[Inject]
|
||||
public var userSession:IUserSession;
|
||||
public var meetingData:IMeetingData;
|
||||
|
||||
private var _userCollection:ArrayCollection;
|
||||
[Bindable]
|
||||
private var _userCollection:UsersVMCollection;
|
||||
|
||||
override public function initialize():void {
|
||||
_userCollection = userSession.userList.users;
|
||||
initializeUserCollection();
|
||||
view.userList.dataProvider = _userCollection;
|
||||
|
||||
meetingData.users.userChangeSignal.add(onUserChangeSignal);
|
||||
|
||||
view.userList.addEventListener(UserItemSelectedEvent.SELECTED, onUserItemSelected);
|
||||
}
|
||||
|
||||
private function initializeUserCollection():void {
|
||||
_userCollection = new UsersVMCollection();
|
||||
var users:Array = meetingData.users.getUsers();
|
||||
var userVM:UserVM;
|
||||
var roomLocked:Boolean = meetingData.meetingStatus.lockSettings.isRoomLocked();
|
||||
|
||||
for each (var user:User2x in users) {
|
||||
addUser(user);
|
||||
}
|
||||
|
||||
//TODO: Add voice only users
|
||||
|
||||
_userCollection.refresh();
|
||||
}
|
||||
|
||||
private function onUserChangeSignal(user:User2x, property:int):void {
|
||||
var userVM:UserVM;
|
||||
|
||||
switch (property) {
|
||||
case UserChangeEnum.JOIN:
|
||||
addUser(user);
|
||||
break;
|
||||
case UserChangeEnum.LEAVE:
|
||||
removeUser(user);
|
||||
break;
|
||||
case UserChangeEnum.PRESENTER:
|
||||
userVM = findUser(user.intId);
|
||||
if (userVM) {
|
||||
userVM.presenter = user.presenter;
|
||||
_userCollection.refresh();
|
||||
}
|
||||
break;
|
||||
case UserChangeEnum.LOCKED:
|
||||
userVM = findUser(user.intId);
|
||||
if (userVM) {
|
||||
userVM.locked = user.locked;
|
||||
_userCollection.refresh();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private function addUser(user:User2x, initLoad:Boolean=false):void {
|
||||
var userVM:UserVM = new UserVM();
|
||||
userVM.intId = user.intId;
|
||||
userVM.extId = user.extId;
|
||||
userVM.name = user.name;
|
||||
userVM.role = user.role;
|
||||
userVM.presenter = user.presenter;
|
||||
userVM.locked = user.locked;
|
||||
userVM.avatarURL = user.avatar;
|
||||
userVM.emoji = user.emoji;
|
||||
|
||||
// Needs to be grabbed from the new VoiceUser info
|
||||
userVM.talking = false;
|
||||
userVM.phoneUser = false;
|
||||
userVM.listenOnly = false;
|
||||
|
||||
// Needs to be grabbed from room lock state
|
||||
userVM.roomLocked = false;
|
||||
|
||||
//TODO: Add webcam state
|
||||
|
||||
_userCollection.addItem(userVM);
|
||||
|
||||
if (!initLoad)
|
||||
_userCollection.refresh();
|
||||
}
|
||||
|
||||
private function removeUser(userToRemove:User2x):void {
|
||||
for (var i:int = 0; i < _userCollection.length; i++) {
|
||||
var user:UserVM = _userCollection.getItemAt(i) as UserVM;
|
||||
if (user.intId == userToRemove.intId) {
|
||||
_userCollection.removeItemAt(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function findUser(intId:String):UserVM {
|
||||
for (var i:int = 0; i < _userCollection.length; i++) {
|
||||
var user:UserVM = _userCollection.getItemAt(i) as UserVM;
|
||||
if (user.intId == intId) {
|
||||
return user;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function onUserItemSelected(e:UserItemSelectedEvent):void {
|
||||
// leave the implementation to the specific client
|
||||
}
|
||||
|
||||
override public function destroy():void {
|
||||
meetingData.users.userChangeSignal.remove(onUserChangeSignal);
|
||||
view.userList.removeEventListener(UserItemSelectedEvent.SELECTED, onUserItemSelected);
|
||||
|
||||
super.destroy();
|
||||
|
@ -0,0 +1,50 @@
|
||||
package org.bigbluebutton.lib.user.views.models {
|
||||
import org.bigbluebutton.lib.user.models.EmojiStatus;
|
||||
import org.bigbluebutton.lib.user.models.UserRole;
|
||||
|
||||
[Bindable]
|
||||
public class UserVM {
|
||||
// Base User properties
|
||||
|
||||
public var me:Boolean = false;
|
||||
|
||||
public var intId:String = "UNKNOWN USER";
|
||||
|
||||
public var extId:String = "UNKNOWN USER";
|
||||
|
||||
public var name:String;
|
||||
|
||||
public var role:String = UserRole.VIEWER;
|
||||
|
||||
public var presenter:Boolean = false;
|
||||
|
||||
public var locked:Boolean = false;
|
||||
|
||||
public var roomLocked:Boolean = false;
|
||||
|
||||
public var avatarURL:String = "";
|
||||
|
||||
public var emoji:String = EmojiStatus.NO_STATUS;
|
||||
|
||||
// Voice properties
|
||||
|
||||
public var inVoiceConf:Boolean = false;
|
||||
|
||||
public var muted:Boolean = false;
|
||||
|
||||
public var talking:Boolean = false;
|
||||
|
||||
public var phoneUser:Boolean = false;
|
||||
|
||||
public var listenOnly:Boolean = false;
|
||||
|
||||
// Webcam properties
|
||||
|
||||
public var hasStream:Boolean = false;
|
||||
|
||||
|
||||
|
||||
public function UserVM() {
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package org.bigbluebutton.lib.user.views.models {
|
||||
import mx.collections.ArrayCollection;
|
||||
import mx.collections.Sort;
|
||||
|
||||
import org.bigbluebutton.lib.user.models.EmojiStatus;
|
||||
import org.bigbluebutton.lib.user.models.UserRole;
|
||||
|
||||
public class UsersVMCollection extends ArrayCollection {
|
||||
public function UsersVMCollection(source:Array = null) {
|
||||
super(source);
|
||||
|
||||
sort = new Sort(null, sortFunction);
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom sort function for the users ArrayCollection. Need to put dial-in users at the very bottom.
|
||||
*/
|
||||
private function sortFunction(a:Object, b:Object, array:Array = null):int {
|
||||
var au:UserVM = a as UserVM, bu:UserVM = b as UserVM;
|
||||
/*if (a.presenter)
|
||||
return -1;
|
||||
else if (b.presenter)
|
||||
return 1;*/
|
||||
if (au.role == UserRole.MODERATOR && bu.role == UserRole.MODERATOR) {
|
||||
// do nothing go to the end and check names
|
||||
} else if (au.role == UserRole.MODERATOR)
|
||||
return -1;
|
||||
else if (bu.role == UserRole.MODERATOR)
|
||||
return 1;
|
||||
else if ((EmojiStatus.STATUS_ARRAY.indexOf(au.emoji) > -1) && (EmojiStatus.STATUS_ARRAY.indexOf(bu.emoji) > -1)) {
|
||||
// do nothing go to the end and check names
|
||||
} else if (EmojiStatus.STATUS_ARRAY.indexOf(au.emoji) > -1)
|
||||
return -1;
|
||||
else if (EmojiStatus.STATUS_ARRAY.indexOf(au.emoji) > -1)
|
||||
return 1;
|
||||
else if (au.phoneUser && bu.phoneUser) {
|
||||
} else if (au.phoneUser)
|
||||
return -1;
|
||||
else if (bu.phoneUser)
|
||||
return 1;
|
||||
/**
|
||||
* Check name (case-insensitive) in the event of a tie up above. If the name
|
||||
* is the same then use userID which should be unique making the order the same
|
||||
* across all clients.
|
||||
*/
|
||||
if (au.name.toLowerCase() < bu.name.toLowerCase())
|
||||
return -1;
|
||||
else if (au.name.toLowerCase() > bu.name.toLowerCase())
|
||||
return 1;
|
||||
else if (au.intId.toLowerCase() > bu.intId.toLowerCase())
|
||||
return -1;
|
||||
else if (au.intId.toLowerCase() < bu.intId.toLowerCase())
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/whiteboard/views/WhiteboardCanvasMediator.as
Normal file → Executable file
2
clients/flash/common-library/src/main/actionscript/org/bigbluebutton/lib/whiteboard/views/WhiteboardCanvasMediator.as
Normal file → Executable file
@ -53,7 +53,7 @@ package org.bigbluebutton.lib.whiteboard.views {
|
||||
|
||||
private function drawAllAnnotations():void {
|
||||
trace("++ draw draw Draw");
|
||||
var annotations:Array = userSession.presentationList.currentPresentation.getSlideAt(userSession.presentationList.currentPresentation.currentSlideNum).annotations;
|
||||
var annotations:Array = userSession.presentationList.currentPresentation.currentSlide.annotations;
|
||||
for (var i:int = 0; i < annotations.length; i++) {
|
||||
var an:IAnnotation = annotations[i] as IAnnotation;
|
||||
an.draw(view, _zoom);
|
||||
|
Loading…
Reference in New Issue
Block a user