Merge remote-tracking branch 'bigbluebutton/master' into speedup-getrecordings

This commit is contained in:
Pedro Beschorner Marin 2016-01-28 12:42:06 +00:00
commit 1edc10f000
16 changed files with 100 additions and 106 deletions

View File

@ -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>

View File

@ -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 {

View File

@ -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

View File

@ -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

View 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);
}

View File

@ -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({

View File

@ -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() {

View File

@ -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);

View File

@ -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

View File

@ -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 {

View File

@ -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;
};

View File

@ -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 = {

View File

@ -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
});

View File

@ -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;

View File

@ -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) {

View File

@ -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