Merge remote-tracking branch 'bigbluebutton/master' into speedup-getrecordings
This commit is contained in:
commit
1edc10f000
@ -1,2 +1,2 @@
|
||||
<p/>
|
||||
<small>These API demos use the <a href="http://code.google.com/p/bigbluebutton/wiki/081API">BigBlueButton API</a>. The source code for these demos is available <a href="https://github.com/bigbluebutton/bigbluebutton/tree/master/bbb-api-demo/src/main/webapp/"> here</a>.</small>
|
||||
<small>These API demos use the <a href="http://docs.bigbluebutton.org/dev/api.html">BigBlueButton API</a>. The source code for these demos is available <a href="https://github.com/bigbluebutton/bigbluebutton/tree/master/bbb-api-demo/src/main/webapp/"> here</a>.</small>
|
||||
|
@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory;
|
||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||
* @author Trustin Lee (tlee@redhat.com)
|
||||
*
|
||||
* @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 (금, 28 8 2009) $
|
||||
* @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 $
|
||||
*
|
||||
*/
|
||||
public class ChannelEventRunnable implements Runnable, EstimatableObjectWrapper {
|
||||
|
@ -54,7 +54,7 @@ import org.jboss.netty.util.internal.ExecutorUtil;
|
||||
* @author The Netty Project (netty-dev@lists.jboss.org)
|
||||
* @author Trustin Lee (tlee@redhat.com)
|
||||
*
|
||||
* @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 (금, 28 8 2009) $
|
||||
* @version $Rev: 1685 $, $Date: 2009-08-28 16:15:49 +0900 $
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has java.util.concurrent.ThreadPoolExecutor
|
||||
|
@ -174,13 +174,16 @@ bbb.users.usersGrid.mediaItemRenderer.micOff = Microphone off
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = Microphone on
|
||||
bbb.users.usersGrid.mediaItemRenderer.noAudio = Not in audio conference
|
||||
bbb.users.emojiStatus.clear = Clear
|
||||
bbb.users.emojiStatus.raiseHand = Raise hand
|
||||
bbb.users.emojiStatus.happy = Happy
|
||||
bbb.users.emojiStatus.smile = Smile
|
||||
bbb.users.emojiStatus.sad = Sad
|
||||
bbb.users.emojiStatus.confused = Confused
|
||||
bbb.users.emojiStatus.neutral = Neutral
|
||||
bbb.users.emojiStatus.away = Away
|
||||
bbb.users.emojiStatus.clear.toolTip = Clear status
|
||||
bbb.users.emojiStatus.close = Close
|
||||
bbb.users.emojiStatus.close.toolTip = Close status popup
|
||||
bbb.users.emojiStatus.raiseHand = Raise hand status
|
||||
bbb.users.emojiStatus.happy = Happy status
|
||||
bbb.users.emojiStatus.smile = Smile status
|
||||
bbb.users.emojiStatus.sad = Sad status
|
||||
bbb.users.emojiStatus.confused = Confused status
|
||||
bbb.users.emojiStatus.neutral = Neutral status
|
||||
bbb.users.emojiStatus.away = Away status
|
||||
bbb.presentation.title = Presentation
|
||||
bbb.presentation.titleWithPres = Presentation: {0}
|
||||
bbb.presentation.quickLink.label = Presentation Window
|
||||
|
17
bigbluebutton-client/src/org/bigbluebutton/modules/users/views/EmojiGrid.as
Normal file → Executable file
17
bigbluebutton-client/src/org/bigbluebutton/modules/users/views/EmojiGrid.as
Normal file → Executable file
@ -46,10 +46,8 @@ package org.bigbluebutton.modules.users.views {
|
||||
this.verticalScrollPolicy = ScrollPolicy.OFF;
|
||||
width = 134;
|
||||
drawEmoji();
|
||||
if (UserManager.getInstance().getConference().myEmojiStatus != "none") {
|
||||
addRemoveEmoji();
|
||||
this.setStyle("paddingBottom", 10);
|
||||
}
|
||||
addRemoveEmoji();
|
||||
this.setStyle("paddingBottom", 10);
|
||||
}
|
||||
|
||||
private function drawEmoji():void {
|
||||
@ -77,9 +75,16 @@ package org.bigbluebutton.modules.users.views {
|
||||
private function addRemoveEmoji():void {
|
||||
var button:Button = new Button();
|
||||
button.id = "btnnone";
|
||||
button.height = 64;
|
||||
button.height = 24;
|
||||
button.label = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear');
|
||||
if (UserManager.getInstance().getConference().myEmojiStatus != "none") {
|
||||
button.label = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear');
|
||||
button.toolTip = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear.toolTip');
|
||||
button.accessibilityName = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.clear.toolTip');
|
||||
} else {
|
||||
button.label = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.close');
|
||||
button.toolTip = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.close.toolTip');
|
||||
button.accessibilityName = ResourceUtil.getInstance().getString('bbb.users.emojiStatus.close.toolTip');
|
||||
}
|
||||
button.addEventListener(MouseEvent.CLICK, buttonMouseEventHandler);
|
||||
this.addChild(button);
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ Handlebars.registerHelper("getCurrentMeeting", () => {
|
||||
|
||||
Handlebars.registerHelper("getCurrentSlide", () => {
|
||||
let result;
|
||||
result = BBB.getCurrentSlide("helper getCurrentSlide");
|
||||
result = BBB.getCurrentSlide();
|
||||
// console.log "result=#{JSON.stringify result}"
|
||||
return result;
|
||||
});
|
||||
@ -96,7 +96,7 @@ Handlebars.registerHelper("getMeetingName", () => {
|
||||
|
||||
Handlebars.registerHelper("getShapesForSlide", () => {
|
||||
let currentSlide, ref;
|
||||
currentSlide = BBB.getCurrentSlide("helper getShapesForSlide");
|
||||
currentSlide = BBB.getCurrentSlide();
|
||||
|
||||
// try to reuse the lines above
|
||||
return Meteor.Shapes.find({
|
||||
|
@ -152,7 +152,7 @@ this.BBB = (function() {
|
||||
|
||||
return lockedMicForRoom && BBB.amILocked();
|
||||
};
|
||||
BBB.getCurrentSlide = function(callingLocaton) {
|
||||
BBB.getCurrentSlide = function() {
|
||||
let currentPresentation, currentSlide, presentationId, ref;
|
||||
currentPresentation = Meteor.Presentations.findOne({
|
||||
"presentation.current": true
|
||||
@ -162,7 +162,6 @@ this.BBB = (function() {
|
||||
"presentationId": presentationId,
|
||||
"slide.current": true
|
||||
});
|
||||
// console.log "trigger:#{callingLocaton} currentSlideId=#{currentSlide?._id}"
|
||||
return currentSlide;
|
||||
};
|
||||
BBB.getMeetingName = function() {
|
||||
|
@ -5,7 +5,6 @@ loadLib = function(libname) {
|
||||
let retryMessageCallback, successCallback;
|
||||
successCallback = function() {};
|
||||
retryMessageCallback = function(param) {
|
||||
//return(Meteor.log.info("Failed to load library"), param);
|
||||
return console.log("Failed to load library", param);
|
||||
};
|
||||
return Meteor.Loader.loadJs(`${window.location.origin}/client/lib/${libname}`, successCallback, 10000).fail(retryMessageCallback);
|
||||
|
@ -5,7 +5,7 @@ Template.slide.rendered = function() {
|
||||
this.reactOnSlideChange = (_this => {
|
||||
return function() {
|
||||
let currentSlide, pic, ref;
|
||||
currentSlide = BBB.getCurrentSlide("slide.rendered");
|
||||
currentSlide = BBB.getCurrentSlide();
|
||||
pic = new Image();
|
||||
pic.onload = function() {
|
||||
let ref;
|
||||
@ -29,7 +29,6 @@ this.reactOnSlideChange = (_this => {
|
||||
})(this);
|
||||
|
||||
this.createWhiteboardPaper = (_this => {
|
||||
// console.log "CREATING WPM"
|
||||
return function(callback) {
|
||||
_this.whiteboardPaperModel = new Meteor.WhiteboardPaperModel('whiteboard-paper');
|
||||
return callback(_this.whiteboardPaperModel);
|
||||
@ -38,7 +37,7 @@ this.createWhiteboardPaper = (_this => {
|
||||
|
||||
this.displaySlide = function(wpm) {
|
||||
let adjustedDimensions, currentSlide, ref;
|
||||
currentSlide = BBB.getCurrentSlide("displaySlide");
|
||||
currentSlide = BBB.getCurrentSlide();
|
||||
wpm.create();
|
||||
adjustedDimensions = scaleSlide(getInSession('slideOriginalWidth'), getInSession('slideOriginalHeight'));
|
||||
wpm._displayPage(
|
||||
@ -57,7 +56,7 @@ this.manuallyDisplayShapes = function() {
|
||||
}) != null) {
|
||||
return;
|
||||
}
|
||||
currentSlide = BBB.getCurrentSlide("manuallyDisplayShapes");
|
||||
currentSlide = BBB.getCurrentSlide();
|
||||
wpm = this.whiteboardPaperModel;
|
||||
shapes = Meteor.Shapes.find({
|
||||
whiteboardId: currentSlide != null ? (ref = currentSlide.slide) != null ? ref.id : void 0 : void 0
|
||||
|
@ -10,36 +10,36 @@ this.scaleWhiteboard = function(callback) {
|
||||
if(callback) {
|
||||
callback();
|
||||
}
|
||||
return {
|
||||
isPollStarted() {
|
||||
if(BBB.isPollGoing(getInSession('userId'))) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
hasNoPresentation() {
|
||||
return Meteor.Presentations.findOne({
|
||||
'presentation.current': true
|
||||
});
|
||||
},
|
||||
forceSlideShow() {
|
||||
return reactOnSlideChange();
|
||||
},
|
||||
clearSlide() {
|
||||
let ref;
|
||||
|
||||
//clear the slide
|
||||
if(typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null) {
|
||||
whiteboardPaperModel.removeAllImagesFromPaper();
|
||||
}
|
||||
|
||||
// hide the cursor
|
||||
return typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null ? (ref = whiteboardPaperModel.cursor) != null ? ref.remove() : void 0 : void 0;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Template.whiteboard.helpers({
|
||||
isPollStarted() {
|
||||
if(BBB.isPollGoing(getInSession('userId'))) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
hasNoPresentation() {
|
||||
return Meteor.Presentations.findOne({
|
||||
'presentation.current': true
|
||||
});
|
||||
},
|
||||
forceSlideShow() {
|
||||
return reactOnSlideChange();
|
||||
},
|
||||
clearSlide() {
|
||||
let ref;
|
||||
//clear the slide
|
||||
if(typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null) {
|
||||
whiteboardPaperModel.removeAllImagesFromPaper();
|
||||
}
|
||||
//hide the cursor
|
||||
return typeof whiteboardPaperModel !== "undefined" && whiteboardPaperModel !== null ? (ref = whiteboardPaperModel.cursor) != null ? ref.remove() : void 0 : void 0;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Template.whiteboard.events({
|
||||
'click .whiteboardFullscreenButton'(event, template) {
|
||||
return enterWhiteboardFullscreen();
|
||||
@ -163,7 +163,6 @@ Template.whiteboardControls.helpers({
|
||||
totalSlideNum = (ref1 = Meteor.Slides.find({
|
||||
'presentationId': currentPresentation != null ? currentPresentation.presentation.id : void 0
|
||||
})) != null ? ref1.count() : void 0;
|
||||
console.log('slide', currentSlideNum);
|
||||
if(currentSlideNum !== void 0) {
|
||||
return `${currentSlideNum}/${totalSlideNum}`;
|
||||
} else {
|
||||
|
@ -43,7 +43,7 @@ this.formatThickness = function(thickness) {
|
||||
// applies zooming to the stroke thickness
|
||||
this.zoomStroke = function(thickness) {
|
||||
let currentSlide, ratio;
|
||||
currentSlide = BBB.getCurrentSlide("zoomStroke");
|
||||
currentSlide = BBB.getCurrentSlide();
|
||||
ratio = ((currentSlide != null ? currentSlide.slide.width_ratio : void 0) + (currentSlide != null ? currentSlide.slide.height_ratio : void 0)) / 2;
|
||||
return thickness * 100 / ratio;
|
||||
};
|
||||
|
@ -16,8 +16,6 @@ this.WhiteboardEllipseModel = (function() {
|
||||
// @param {string} colour the colour of the object
|
||||
// @param {number} thickness the thickness of the object's line(s)
|
||||
make(info) {
|
||||
//console.log "Whiteboard - Making ellipse: "
|
||||
//console.log info
|
||||
let color, thickness, x, y;
|
||||
if((info != null ? info.points : void 0) != null) {
|
||||
x = info.points[0];
|
||||
@ -39,7 +37,6 @@ this.WhiteboardEllipseModel = (function() {
|
||||
// @param {number} y2 the y value of the bottom right corner in percent of current slide size
|
||||
// @param {boolean} square (draw a circle or not
|
||||
update(info) {
|
||||
//console.log info
|
||||
let circle, coords, r, ref, ref1, reversed, rx, ry, x1, x2, y1, y2;
|
||||
if((info != null ? info.points : void 0) != null) {
|
||||
x1 = info.points[0];
|
||||
@ -72,8 +69,6 @@ this.WhiteboardEllipseModel = (function() {
|
||||
y2: y2
|
||||
};
|
||||
|
||||
//console.log(coords)
|
||||
|
||||
rx = (x2 - x1) / 2;
|
||||
ry = (y2 - y1) / 2;
|
||||
r = {
|
||||
|
@ -209,9 +209,6 @@ Meteor.WhiteboardPaperModel = (function() {
|
||||
let base, base1, i, len, obj, tool, toolModel;
|
||||
data.thickness *= this.adjustedWidth / 1000;
|
||||
tool = null;
|
||||
//TODO pay attention to this array, data in this array slows down the whiteboard
|
||||
//console.log @current
|
||||
//console.log @
|
||||
this.current[shape] = this._createTool(shape);
|
||||
toolModel = this.current[shape];
|
||||
tool = this.current[shape].make(data);
|
||||
@ -287,8 +284,8 @@ Meteor.WhiteboardPaperModel = (function() {
|
||||
|
||||
_updateZoomRatios() {
|
||||
let currentSlideDoc;
|
||||
currentSlideDoc = BBB.getCurrentSlide("_updateZoomRatios");
|
||||
this.widthRatio = currentSlideDoc != null ? currentSlideDoc.slide.width_ratio : void 0;
|
||||
currentSlideDoc = BBB.getCurrentSlide();
|
||||
this.widthRatio = (currentSlideDoc != null ? currentSlideDoc.slide.width_ratio : void 0) || 100;
|
||||
return this.heightRatio = currentSlideDoc != null ? currentSlideDoc.slide.height_ratio : void 0;
|
||||
}
|
||||
|
||||
@ -377,7 +374,7 @@ Meteor.WhiteboardPaperModel = (function() {
|
||||
if(url != null ? url.match(/http[s]?:/) : void 0) {
|
||||
return url;
|
||||
} else {
|
||||
return console.log(`The url '${url}'' did not match the expected format of: http/s`);
|
||||
return console.log(`The url '${url}' did not match the expected format of: http/s`);
|
||||
//globals.presentationServer + url
|
||||
}
|
||||
}
|
||||
@ -390,7 +387,7 @@ Meteor.WhiteboardPaperModel = (function() {
|
||||
this._updateContainerDimensions();
|
||||
boardWidth = this.containerWidth;
|
||||
boardHeight = this.containerHeight;
|
||||
currentSlide = BBB.getCurrentSlide("_displayPage");
|
||||
currentSlide = BBB.getCurrentSlide();
|
||||
currentPresentation = Meteor.Presentations.findOne({
|
||||
"presentation.current": true
|
||||
});
|
||||
|
@ -14,7 +14,6 @@ this.WhiteboardTextModel = (function() {
|
||||
|
||||
// Make a text on the whiteboard
|
||||
make(startingData) {
|
||||
//console.log "making text:" + JSON.stringify startingData
|
||||
let calcFontSize, colour, fontSize, height, text, width, x, y;
|
||||
x = startingData.x;
|
||||
y = startingData.y;
|
||||
@ -47,7 +46,6 @@ this.WhiteboardTextModel = (function() {
|
||||
// Update text shape drawn
|
||||
// @param {object} the object containing the shape info
|
||||
update(startingData) {
|
||||
//console.log "updating text" + JSON.stringify startingData
|
||||
let calcFontSize, cell, colour, computedTextLength, cumulY, curNumChars, dashArray, dashFound, dy, fontSize, height, i, indexPos, line, maxWidth, myText, myTextNode, result, svgNS, tempText, tspanEl, word, words, x, y;
|
||||
x = startingData.x;
|
||||
y = startingData.y;
|
||||
|
@ -13,11 +13,20 @@ this.displayThisSlide = function(meetingId, newSlideId, slideObject) {
|
||||
"slide.current": false
|
||||
}
|
||||
});
|
||||
// for the new slide: remove the version which came with presentation_shared_message from the Collection
|
||||
// to avoid using old data (this message contains everything we need for the new slide)
|
||||
removeSlideFromCollection(meetingId, newSlideId);
|
||||
// add the new slide to the collection
|
||||
return addSlideToCollection(meetingId, presentationId, slideObject);
|
||||
|
||||
//change current to true for the new slide and update its ratios and offsets
|
||||
Meteor.Slides.update({
|
||||
presentationId: presentationId,
|
||||
"slide.id": newSlideId
|
||||
}, {
|
||||
$set: {
|
||||
"slide.current": true,
|
||||
"slide.height_ratio": slideObject.height_ratio,
|
||||
"slide.width_ratio": slideObject.width_ratio,
|
||||
"slide.x_offset": slideObject.x_offset,
|
||||
"slide.y_offset": slideObject.y_offset
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
this.addSlideToCollection = function(meetingId, presentationId, slideObject) {
|
||||
@ -48,23 +57,6 @@ this.addSlideToCollection = function(meetingId, presentationId, slideObject) {
|
||||
}
|
||||
};
|
||||
|
||||
this.removeSlideFromCollection = function(meetingId, slideId) {
|
||||
let id;
|
||||
if((meetingId != null) && (slideId != null) && (Meteor.Slides.findOne({
|
||||
meetingId: meetingId,
|
||||
"slide.id": slideId
|
||||
}) != null)) {
|
||||
id = Meteor.Slides.findOne({
|
||||
meetingId: meetingId,
|
||||
"slide.id": slideId
|
||||
});
|
||||
if(id != null) {
|
||||
Meteor.Slides.remove(id._id);
|
||||
return Meteor.log.info(`----removed slide[${slideId}] from ${meetingId}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// called on server start and meeting end
|
||||
this.clearSlidesCollection = function(meetingId) {
|
||||
if(meetingId != null) {
|
||||
|
@ -343,7 +343,6 @@ Meteor.startup(() => {
|
||||
"presentation.current": false
|
||||
}
|
||||
});
|
||||
|
||||
//update(if already present) entirely the presentation with the fresh data
|
||||
removePresentationFromCollection(meetingId, presentationId);
|
||||
addPresentationToCollection(meetingId, message.payload.presentation);
|
||||
@ -355,9 +354,6 @@ Meteor.startup(() => {
|
||||
(ref10 = message.payload.presentation) != null ? ref10.id : void 0,
|
||||
slide
|
||||
);
|
||||
if(slide.current) {
|
||||
displayThisSlide(meetingId, slide.id, slide);
|
||||
}
|
||||
}
|
||||
return callback();
|
||||
|
||||
@ -483,17 +479,29 @@ Meteor.startup(() => {
|
||||
xOffset = (ref17 = message.payload.page) != null ? ref17.x_offset : void 0;
|
||||
yOffset = (ref18 = message.payload.page) != null ? ref18.y_offset : void 0;
|
||||
presentationId = slideId.split("/")[0];
|
||||
Meteor.Slides.update({
|
||||
presentationId: presentationId,
|
||||
"slide.current": true
|
||||
}, {
|
||||
$set: {
|
||||
"slide.height_ratio": heightRatio,
|
||||
"slide.width_ratio": widthRatio,
|
||||
"slide.x_offset": xOffset,
|
||||
"slide.y_offset": yOffset
|
||||
}
|
||||
});
|
||||
|
||||
/*In the case when we don't resize, but switch a slide, this message
|
||||
follows a 'presentation_page_changed' and all these properties are already set. */
|
||||
var currentSlide = Meteor.Slides.findOne({presentationId: presentationId,
|
||||
"slide.current": true});
|
||||
if(currentSlide) {
|
||||
currentSlide = currentSlide.slide;
|
||||
}
|
||||
if(currentSlide.height_ratio != heightRatio || currentSlide.width_ratio != widthRatio
|
||||
|| currentSlide.x_offset != xOffset || currentSlide.y_offset != yOffset) {
|
||||
Meteor.Slides.update({
|
||||
presentationId: presentationId,
|
||||
"slide.current": true
|
||||
}, {
|
||||
$set: {
|
||||
"slide.height_ratio": heightRatio,
|
||||
"slide.width_ratio": widthRatio,
|
||||
"slide.x_offset": xOffset,
|
||||
"slide.y_offset": yOffset
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return callback();
|
||||
|
||||
// for now not handling this serially #TODO
|
||||
|
Loading…
Reference in New Issue
Block a user