Merge branch 'master' of https://github.com/bigbluebutton/bigbluebutton into fix-client-loggin
This commit is contained in:
commit
3f99fe6f19
@ -94,7 +94,7 @@ class JsonMessageSenderActor(val service: MessageSender)
|
||||
private def handleCreateBreakoutRoom(msg: CreateBreakoutRoom) {
|
||||
val payload = new CreateBreakoutRoomRequestPayload(msg.room.breakoutId, msg.room.parentId, msg.room.name,
|
||||
msg.room.voiceConfId, msg.room.viewerPassword, msg.room.moderatorPassword,
|
||||
msg.room.durationInMinutes, msg.room.defaultPresentationURL)
|
||||
msg.room.durationInMinutes, msg.room.defaultPresentationURL, msg.room.record)
|
||||
val request = new CreateBreakoutRoomRequest(payload)
|
||||
service.send(MessagingConstants.FROM_MEETING_CHANNEL, request.toJson())
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ case class CreateBreakoutRoom(meetingId: String, recorded: Boolean, room: Breako
|
||||
case class EndBreakoutRoom(breakoutId: String) extends IOutMessage
|
||||
case class BreakoutRoomOutPayload(breakoutId: String, name: String, parentId: String,
|
||||
voiceConfId: String, durationInMinutes: Int, moderatorPassword: String, viewerPassword: String,
|
||||
defaultPresentationURL: String)
|
||||
defaultPresentationURL: String, record: Boolean)
|
||||
case class BreakoutRoomJoinURLOutMessage(meetingId: String, recorded: Boolean, breakoutId: String, userId: String, joinURL: String) extends IOutMessage
|
||||
case class BreakoutRoomStartedOutMessage(meetingId: String, recorded: Boolean, breakout: BreakoutRoomBody) extends IOutMessage
|
||||
case class BreakoutRoomBody(name: String, breakoutId: String)
|
||||
|
@ -44,7 +44,7 @@ trait BreakoutRoomApp extends SystemConfiguration {
|
||||
val r = breakoutModel.createBreakoutRoom(breakoutMeetingId, room.name, voiceConfId, room.users, presURL)
|
||||
val p = new BreakoutRoomOutPayload(r.id, r.name, mProps.meetingID,
|
||||
r.voiceConfId, msg.durationInMinutes, bbbWebModeratorPassword, bbbWebViewerPassword,
|
||||
r.defaultPresentationURL)
|
||||
r.defaultPresentationURL, mProps.recorded)
|
||||
outGW.send(new CreateBreakoutRoom(mProps.meetingID, mProps.recorded, p))
|
||||
}
|
||||
meetingModel.breakoutRoomsdurationInMinutes = msg.durationInMinutes;
|
||||
|
@ -9,10 +9,11 @@ public class CreateBreakoutRoomRequestPayload {
|
||||
public final String moderatorPassword;
|
||||
public final Integer durationInMinutes; // The duration of the breakout room
|
||||
public final String defaultPresentationURL;
|
||||
public final Boolean record;
|
||||
|
||||
public CreateBreakoutRoomRequestPayload(String breakoutId, String parentId, String name,
|
||||
String voiceConfId, String viewerPassword, String moderatorPassword,
|
||||
Integer duration, String defaultPresentationURL) {
|
||||
Integer duration, String defaultPresentationURL, Boolean record) {
|
||||
this.breakoutId = breakoutId;
|
||||
this.parentId = parentId;
|
||||
this.name = name;
|
||||
@ -21,5 +22,6 @@ public class CreateBreakoutRoomRequestPayload {
|
||||
this.moderatorPassword = moderatorPassword;
|
||||
this.durationInMinutes = duration;
|
||||
this.defaultPresentationURL = defaultPresentationURL;
|
||||
this.record = record;
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
xmlns:s="library://ns.adobe.com/flex/spark"
|
||||
xmlns:mx="library://ns.adobe.com/flex/mx"
|
||||
xmlns:mate="http://mate.asfusion.com/"
|
||||
width="630" height="540"
|
||||
width="630" height="600"
|
||||
close="onCloseClicked()"
|
||||
creationComplete="creationCompleteHandler(event)"
|
||||
showCloseButton="false">
|
||||
@ -143,19 +143,20 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
</mx:Canvas>
|
||||
|
||||
<mx:HBox id="roomsBox" paddingTop="20" width="100%">
|
||||
<mx:HBox width="33%" horizontalAlign="left">
|
||||
<mx:HBox width="50%" height="100%" horizontalAlign="left" verticalAlign="middle">
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.users.breakout.rooms')}" />
|
||||
<mx:ComboBox id="roomsCombo" width="80%" change="{assignUsers()}" dataProvider="{roomsProvider}"/>
|
||||
</mx:HBox>
|
||||
<mx:HBox width="33%" horizontalAlign="center">
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.users.breakout.timeLimit')}" />
|
||||
<mx:NumericStepper id="durationStepper" value="15" minimum="1" maximum="600"/>
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.users.breakout.minutes')}"/>
|
||||
</mx:HBox>
|
||||
<mx:Button paddingLeft="20" width="33%" id="randomAssignBtn"
|
||||
<mx:Button paddingLeft="20" width="50%" id="randomAssignBtn"
|
||||
label="{ResourceUtil.getInstance().getString('bbb.users.breakout.randomAssign')}" click="assignUsers()"/>
|
||||
</mx:HBox>
|
||||
|
||||
<mx:HBox width="100%" paddingTop="12">
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.users.breakout.timeLimit')}" />
|
||||
<mx:NumericStepper id="durationStepper" value="15" minimum="1" maximum="600"/>
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.users.breakout.minutes')}"/>
|
||||
</mx:HBox>
|
||||
|
||||
<mx:Tile id="roomsContainer" styleName="roomsContainer" width="100%" height="100%"/>
|
||||
|
||||
<mx:HBox width="100%" horizontalAlign="right" verticalGap="15">
|
||||
|
@ -585,7 +585,7 @@
|
||||
<mx:VBox id="roomsBox" styleName="breakoutRoomsBox"
|
||||
visible="{breakoutRoomsList.length > 0 && amIModerator}"
|
||||
includeInLayout="{breakoutRoomsList.length > 0 && amIModerator}"
|
||||
width="100%" height="50%">
|
||||
width="100%" height="180">
|
||||
<mx:HBox width="100%">
|
||||
<mx:Label text="{ResourceUtil.getInstance().getString('bbb.users.breakout.breakoutRooms')}"/>
|
||||
<mx:Label width="100%" textAlign="right" id="breakoutTimeLabel"/>
|
||||
|
@ -1,5 +1,6 @@
|
||||
import React, { PropTypes } from 'react';
|
||||
import WhiteboardShapeModel from './shape-factory/component.jsx';
|
||||
import Cursor from './cursor/component.jsx';
|
||||
import { createContainer } from 'meteor/react-meteor-data';
|
||||
import Slide from './slide/component.jsx';
|
||||
import styles from './styles.scss';
|
||||
@ -62,6 +63,15 @@ export default class Whiteboard extends React.Component {
|
||||
/>
|
||||
)
|
||||
: null }
|
||||
<Cursor
|
||||
viewBoxWidth={viewBoxWidth}
|
||||
viewBoxHeight={viewBoxHeight}
|
||||
viewBoxX={x}
|
||||
viewBoxY={y}
|
||||
widthRatio={slideObj.width_ratio}
|
||||
cursorX={this.props.cursor[0].x}
|
||||
cursorY={this.props.cursor[0].y}
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
</ReactCSSTransitionGroup>
|
||||
|
@ -0,0 +1,81 @@
|
||||
import React, { Component, PropTypes } from 'react';
|
||||
import WhiteboardService from '/imports/ui/components/whiteboard/service.js';
|
||||
|
||||
const propTypes = {
|
||||
//Width of the view box
|
||||
viewBoxWidth: PropTypes.number.isRequired,
|
||||
|
||||
//Height of the view box
|
||||
viewBoxHeight: PropTypes.number.isRequired,
|
||||
|
||||
//x Position of the view box
|
||||
viewBoxX: PropTypes.number.isRequired,
|
||||
|
||||
//y Position of the view box
|
||||
viewBoxY: PropTypes.number.isRequired,
|
||||
|
||||
//Slide to view box width ratio
|
||||
widthRatio: PropTypes.number.isRequired,
|
||||
|
||||
//Defines the cursor x position
|
||||
cursorX: PropTypes.number.isRequired,
|
||||
|
||||
//Defines the cursor y position
|
||||
cursorY: PropTypes.number.isRequired,
|
||||
|
||||
/**
|
||||
* Defines the cursor fill colour
|
||||
* @defaultValue 'red'
|
||||
*/
|
||||
fill: PropTypes.string,
|
||||
|
||||
/**
|
||||
* Defines the cursor radius
|
||||
* @defaultValue 5
|
||||
*/
|
||||
radius: PropTypes.number,
|
||||
};
|
||||
|
||||
const defaultProps = {
|
||||
fill: 'red',
|
||||
radius: 5,
|
||||
};
|
||||
|
||||
export default class Cursor extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
viewBoxWidth,
|
||||
viewBoxHeight,
|
||||
viewBoxX,
|
||||
viewBoxY,
|
||||
widthRatio,
|
||||
cursorX,
|
||||
cursorY,
|
||||
fill,
|
||||
radius,
|
||||
} = this.props;
|
||||
|
||||
//Adjust the x,y cursor position according to zoom
|
||||
let cx = (cursorX * viewBoxWidth) + viewBoxX;
|
||||
let cy = (cursorY * viewBoxHeight) + viewBoxY;
|
||||
|
||||
//Adjust the radius of the cursor according to zoom
|
||||
let finalRadius = radius * widthRatio / 100;
|
||||
|
||||
return (
|
||||
<circle
|
||||
cx={cx}
|
||||
cy={cy}
|
||||
r={finalRadius}
|
||||
fill={fill}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Cursor.propTypes = propTypes;
|
||||
Cursor.defaultProps = defaultProps;
|
@ -1,10 +1,12 @@
|
||||
import Presentations from '/imports/api/presentations';
|
||||
import Shapes from '/imports/api/shapes';
|
||||
import Slides from '/imports/api/slides';
|
||||
import Cursor from '/imports/api/cursor';
|
||||
|
||||
let getWhiteboardData = () => {
|
||||
let currentSlide;
|
||||
let shapes;
|
||||
let cursor;
|
||||
let currentPresentation = Presentations.findOne({
|
||||
'presentation.current': true,
|
||||
});
|
||||
@ -20,11 +22,16 @@ let getWhiteboardData = () => {
|
||||
shapes = Shapes.find({
|
||||
whiteboardId: currentSlide.slide.id,
|
||||
}).fetch();
|
||||
|
||||
cursor = Cursor.find({
|
||||
meetingId: currentSlide.meetingId,
|
||||
}).fetch();
|
||||
}
|
||||
|
||||
return {
|
||||
currentSlide: currentSlide,
|
||||
shapes: shapes,
|
||||
cursor: cursor,
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -524,6 +524,7 @@ public class MeetingService implements MessageListener {
|
||||
params.put("moderatorPW", message.moderatorPassword);
|
||||
params.put("voiceBridge", message.voiceConfId);
|
||||
params.put("duration", message.durationInMinutes.toString());
|
||||
params.put("record", message.record.toString());
|
||||
|
||||
Meeting breakout = paramsProcessorUtil.processCreateParams(params);
|
||||
|
||||
|
@ -79,7 +79,8 @@ public class MeetingMessageHandler implements MessageHandler {
|
||||
msg.payload.viewerPassword,
|
||||
msg.payload.moderatorPassword,
|
||||
msg.payload.durationInMinutes,
|
||||
msg.payload.defaultPresentationURL));
|
||||
msg.payload.defaultPresentationURL,
|
||||
msg.payload.record));
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package org.bigbluebutton.api.messaging.messages;
|
||||
|
||||
|
||||
public class CreateBreakoutRoom implements IMessage {
|
||||
|
||||
public final String breakoutId;
|
||||
@ -11,10 +10,11 @@ public class CreateBreakoutRoom implements IMessage {
|
||||
public final String moderatorPassword;
|
||||
public final Integer durationInMinutes; // The duration of the breakout room
|
||||
public final String defaultPresentationURL;
|
||||
public final Boolean record;
|
||||
|
||||
public CreateBreakoutRoom(String breakoutId, String parentId, String name,
|
||||
String voiceConfId, String viewerPassword, String moderatorPassword,
|
||||
Integer duration, String defaultPresentationURL) {
|
||||
Integer duration, String defaultPresentationURL, Boolean record) {
|
||||
this.breakoutId = breakoutId;
|
||||
this.parentId = parentId;
|
||||
this.name = name;
|
||||
@ -23,5 +23,6 @@ public class CreateBreakoutRoom implements IMessage {
|
||||
this.moderatorPassword = moderatorPassword;
|
||||
this.durationInMinutes = duration;
|
||||
this.defaultPresentationURL = defaultPresentationURL;
|
||||
this.record = record;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user