Skip to content

Commit 44b2e55

Browse files
committed
- try and fix synching of annotations for late joiners
1 parent ace0e43 commit 44b2e55

22 files changed

+338
-208
lines changed

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/Presentation.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ public class Presentation {
3232
public Presentation(String name, int numPages){
3333
this.name = name;
3434
this.pages = new ArrayList<Page>(numPages);
35-
for (int i = 0; i < numPages; i++){
35+
for (int i = 1; i <= numPages; i++){
3636
pages.add(new Page(i));
3737
}
3838
this.activePage = pages.get(0);
3939
}
4040

41-
public String getName(){
41+
public String getName() {
4242
return name;
4343
}
4444

@@ -52,4 +52,12 @@ public void setActivePage(int index){
5252
activePage = pages.get(index);
5353
}
5454

55+
public Page getPage(int pageNumber) {
56+
for (int i = 0; i < pages.size(); i++){
57+
Page p = pages.get(i);
58+
if (p.getPageIndex() == pageNumber) return p;
59+
}
60+
61+
return null;
62+
}
5563
}

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ public void isWhiteboardEnabled(String userid) {
9595
connInvokerService.sendMessage(m);
9696
}
9797

98-
public void sendAnnotationHistory(String userid) {
98+
public void sendAnnotationHistory(String userid, String presentationID, Integer pageNumber) {
9999
Map<String, Object> message = new HashMap<String, Object>();
100-
List<Annotation> annotations = roomManager.getRoom(getMeetingId()).getAnnotations();
100+
List<Annotation> annotations = roomManager.getRoom(getMeetingId()).getAnnotations(presentationID, pageNumber);
101101
message.put("count", new Integer(annotations.size()));
102102

103103
/** extract annotation into a Map */
@@ -106,6 +106,8 @@ public void sendAnnotationHistory(String userid) {
106106
a.add(v.getAnnotation());
107107
}
108108

109+
message.put("presentationID", presentationID);
110+
message.put("pageNumber", pageNumber);
109111
message.put("annotations", a);
110112
ClientMessage m = new ClientMessage(ClientMessage.DIRECT, userid, "WhiteboardRequestAnnotationHistoryReply", message);
111113
connInvokerService.sendMessage(m);

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardRoom.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,22 +59,23 @@ public void addPresentation(String name, int numPages) {
5959
presentations.add(activePresentation);
6060
}
6161

62-
public Presentation getPresentation(String name) {
63-
if (name.equals(activePresentation.getName())) return activePresentation;
64-
65-
for (int i= 0; i < presentations.size(); i++){
62+
private Presentation getPresentation(String name) {
63+
for (int i = 0; i < presentations.size(); i++){
6664
Presentation pres = presentations.get(i);
67-
if (pres.getName().equals(name)) activePresentation = pres;
65+
if (pres.getName().equals(name)) return pres;
6866
}
69-
return activePresentation;
67+
return null;
7068
}
7169

7270
public Presentation getActivePresentation() {
7371
return activePresentation;
7472
}
7573

7674
public void setActivePresentation(String name) {
77-
this.activePresentation = getPresentation(name);
75+
Presentation p = getPresentation(name);
76+
if (p != null) {
77+
this.activePresentation = p;
78+
}
7879
}
7980

8081
public boolean presentationExists(String name) {
@@ -90,9 +91,16 @@ public void addAnnotation(Annotation annotation) {
9091
notifyAddShape(activePresentation, annotation);
9192
}
9293

93-
public List<Annotation> getAnnotations() {
94-
if (activePresentation == null) return new ArrayList<Annotation>();
95-
return activePresentation.getActivePage().getAnnotations();
94+
public List<Annotation> getAnnotations(String presentationID, Integer pageNumber) {
95+
Presentation p = getPresentation(presentationID);
96+
if (p != null) {
97+
Page pg = p.getPage(pageNumber.intValue());
98+
if (pg != null) {
99+
return pg.getAnnotations();
100+
}
101+
}
102+
103+
return new ArrayList<Annotation>();
96104
}
97105

98106
public void modifyText(Annotation annotation) {

bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ public void setActivePage(Map<String, Object> message){
7676
application.changePage((Integer) message.get("pageNum"));
7777
}
7878

79-
public void requestAnnotationHistory() {
79+
public void requestAnnotationHistory(Map<String, Object> message) {
8080
log.info("WhiteboardApplication - requestAnnotationHistory");
81-
application.sendAnnotationHistory(Red5.getConnectionLocal().getClient().getId());
81+
application.sendAnnotationHistory(Red5.getConnectionLocal().getClient().getId(),
82+
(String) message.get("presentationID"), (Integer) message.get("pageNumber"));
8283
}
8384

8485
public void clear() {

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ package org.bigbluebutton.modules.whiteboard
1212
import flash.text.TextFieldAutoSize;
1313
import flash.text.TextFieldType;
1414
import flash.text.TextFormat;
15-
import flash.ui.Keyboard;
15+
import flash.ui.Keyboard;
16+
1617
import mx.controls.TextInput;
1718
import mx.core.Application;
1819
import mx.core.UIComponent;
19-
import mx.managers.CursorManager;
20+
import mx.managers.CursorManager;
21+
2022
import org.bigbluebutton.common.IBbbCanvas;
2123
import org.bigbluebutton.common.LogUtil;
2224
import org.bigbluebutton.core.managers.UserManager;
@@ -34,6 +36,7 @@ package org.bigbluebutton.modules.whiteboard
3436
import org.bigbluebutton.modules.whiteboard.events.WhiteboardDrawEvent;
3537
import org.bigbluebutton.modules.whiteboard.events.WhiteboardSettingResetEvent;
3638
import org.bigbluebutton.modules.whiteboard.events.WhiteboardUpdate;
39+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
3740
import org.bigbluebutton.modules.whiteboard.views.AnnotationIDGenerator;
3841
import org.bigbluebutton.modules.whiteboard.views.IDrawListener;
3942
import org.bigbluebutton.modules.whiteboard.views.PencilDrawListener;
@@ -45,6 +48,7 @@ package org.bigbluebutton.modules.whiteboard
4548
* Class responsible for handling actions from presenter and sending annotations to the server.
4649
*/
4750
public class WhiteboardCanvasModel {
51+
public var whiteboardModel:WhiteboardModel;
4852
private var _wbCanvas:WhiteboardCanvas;
4953
private var drawListeners:Array = new Array();
5054
private var wbTool:WhiteboardTool = new WhiteboardTool();
@@ -63,8 +67,8 @@ package org.bigbluebutton.modules.whiteboard
6367

6468
public function set wbCanvas(canvas:WhiteboardCanvas):void {
6569
_wbCanvas = canvas;
66-
drawListeners.push(new PencilDrawListener(idGenerator, _wbCanvas, sendShapeFrequency, shapeFactory));
67-
drawListeners.push(new TextDrawListener(idGenerator, _wbCanvas, sendShapeFrequency, shapeFactory));
70+
drawListeners.push(new PencilDrawListener(idGenerator, _wbCanvas, sendShapeFrequency, shapeFactory, whiteboardModel));
71+
drawListeners.push(new TextDrawListener(idGenerator, _wbCanvas, sendShapeFrequency, shapeFactory, whiteboardModel));
6872
}
6973

7074
public function zoomCanvas(width:Number, height:Number):void {

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/DrawAnnotation.as

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class DrawAnnotation implements IDrawAnnotation
67
{
@@ -15,6 +16,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
1516
_status = s;
1617
}
1718

18-
public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {return null}
19+
public function createAnnotation(wbModel:WhiteboardModel,
20+
ctrlKeyPressed:Boolean=false):Annotation {return null}
1921
}
2022
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/EllipseAnnotation.as

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class EllipseAnnotation extends DrawAnnotation
67
{
@@ -35,7 +36,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
3536
return shape;
3637
}
3738

38-
override public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {
39+
override public function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation {
3940
var ao:Object = new Object();
4041
ao["type"] = _type;
4142
ao["points"] = optimize(_shape);
@@ -50,7 +51,13 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
5051
} else {
5152
ao["circle"] = false;
5253
}
53-
54+
55+
var pn:Object = wbModel.getCurrentPresentationAndPage();
56+
if (pn != null) {
57+
ao["presentationID"] = pn.presentationID;
58+
ao["pageNumber"] = pn.currentPageNumber;
59+
}
60+
5461
return new Annotation(_id, _type, ao);
5562
}
5663
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public interface IDrawAnnotation
67
{
7-
function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation;
8+
function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation;
89
}
910
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/LineAnnotation.as

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class LineAnnotation extends DrawAnnotation
67
{
@@ -36,7 +37,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
3637
return shape;
3738
}
3839

39-
override public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {
40+
override public function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation {
4041
var ao:Object = new Object();
4142
ao["type"] = _type;
4243
ao["points"] = optimize(_shape);
@@ -45,7 +46,13 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
4546
ao["id"] = _id;
4647
ao["status"] = _status;
4748
ao["transparency"] = _transparent;
48-
49+
50+
var pn:Object = wbModel.getCurrentPresentationAndPage();
51+
if (pn != null) {
52+
ao["presentationID"] = pn.presentationID;
53+
ao["pageNumber"] = pn.currentPageNumber;
54+
}
55+
4956
return new Annotation(_id, _type, ao);
5057
}
5158
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/PencilDrawAnnotation.as

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class PencilDrawAnnotation extends DrawAnnotation
67
{
@@ -21,7 +22,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
2122
_transparent = trans;
2223
}
2324

24-
override public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {
25+
override public function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation {
2526
var ao:Object = new Object();
2627
ao["type"] = _type;
2728
ao["points"] = _shape;
@@ -30,7 +31,13 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
3031
ao["id"] = _id;
3132
ao["status"] = _status;
3233
ao["transparency"] = _transparent;
33-
34+
35+
var pn:Object = wbModel.getCurrentPresentationAndPage();
36+
if (pn != null) {
37+
ao["presentationID"] = pn.presentationID;
38+
ao["pageNumber"] = pn.currentPageNumber;
39+
}
40+
3441
return new Annotation(_id, _type, ao);
3542
}
3643
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/RectangleAnnotation.as

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class RectangleAnnotation extends DrawAnnotation
67
{
@@ -35,7 +36,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
3536
return shape;
3637
}
3738

38-
override public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {
39+
override public function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation {
3940
var ao:Object = new Object();
4041
ao["type"] = _type;
4142
ao["points"] = optimize(_shape);
@@ -51,6 +52,12 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
5152
ao["square"] = false;
5253
}
5354

55+
var pn:Object = wbModel.getCurrentPresentationAndPage();
56+
if (pn != null) {
57+
ao["presentationID"] = pn.presentationID;
58+
ao["pageNumber"] = pn.currentPageNumber;
59+
}
60+
5461
return new Annotation(_id, _type, ao);
5562
}
5663
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextDrawAnnotation.as

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class TextDrawAnnotation extends DrawAnnotation
67
{
@@ -27,7 +28,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
2728
_fontSize = fontSize;
2829
}
2930

30-
override public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {
31+
override public function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation {
3132
var ao:Object = new Object();
3233
ao["type"] = DrawObject.TEXT;
3334
ao["id"] = _id;
@@ -40,6 +41,12 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
4041
ao["textBoxWidth"] = _textBoxWidth;
4142
ao["textBoxHeight"] = _textBoxHeight;
4243

44+
var pn:Object = wbModel.getCurrentPresentationAndPage();
45+
if (pn != null) {
46+
ao["presentationID"] = pn.presentationID;
47+
ao["pageNumber"] = pn.currentPageNumber;
48+
}
49+
4350
return new Annotation(_id, DrawObject.TEXT, ao);
4451
}
4552
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TriangleAnnotation.as

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.bigbluebutton.modules.whiteboard.business.shapes
22
{
33
import org.bigbluebutton.modules.whiteboard.models.Annotation;
4+
import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
45

56
public class TriangleAnnotation extends DrawAnnotation
67
{
@@ -35,7 +36,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
3536
return shape;
3637
}
3738

38-
override public function createAnnotation(ctrlKeyPressed:Boolean=false):Annotation {
39+
override public function createAnnotation(wbModel:WhiteboardModel, ctrlKeyPressed:Boolean=false):Annotation {
3940
var ao:Object = new Object();
4041
ao["type"] = _type;
4142
ao["points"] = optimize(_shape);
@@ -44,6 +45,12 @@ package org.bigbluebutton.modules.whiteboard.business.shapes
4445
ao["id"] = _id;
4546
ao["status"] = _status;
4647
ao["transparency"] = _transparent;
48+
49+
var pn:Object = wbModel.getCurrentPresentationAndPage();
50+
if (pn != null) {
51+
ao["presentationID"] = pn.presentationID;
52+
ao["pageNumber"] = pn.currentPageNumber;
53+
}
4754

4855
return new Annotation(_id, _type, ao);
4956
}

bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/managers/WhiteboardManager.as

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ package org.bigbluebutton.modules.whiteboard.managers
6666
highlighterCanvas.model = model;
6767
highlighterCanvas.displayModel = displayModel;
6868
displayModel.whiteboardModel = whiteboardModel;
69-
69+
model.whiteboardModel = whiteboardModel
70+
7071
model.wbCanvas = highlighterCanvas;
7172
displayModel.wbCanvas = highlighterCanvas;
7273

0 commit comments

Comments
 (0)