diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java index 16ba29b24d..2615f74138 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/whiteboard/WhiteboardApplication.java @@ -113,17 +113,32 @@ public class WhiteboardApplication extends MultiThreadedApplicationAdapter imple connInvokerService.sendMessage(m); } + private static final String TEXT_CREATED = "textCreated"; + private static final String TEXT_TYPE = "text"; + private static final String PENCIL_TYPE = "pencil"; + private static final String RECTANGLE_TYPE = "rectangle"; + private static final String ELLIPSE_TYPE = "ellipse"; + private static final String TRIANGLE_TYPE = "triangle"; + private static final String LINE_TYPE = "line"; + public void sendAnnotation(Annotation annotation) { String status = annotation.getStatus(); - - if("textCreated".equals(status) || "DRAW_START".equals(status) || "DRAW_UPDATE".equals(status) || "DRAW_END".equals(status) ) { + + if ("textCreated".equals(status)) { + roomManager.getRoom(getMeetingId()).addAnnotation(annotation); + } else if (PENCIL_TYPE.equals(annotation.getType()) && "DRAW_START".equals(status)) { + roomManager.getRoom(getMeetingId()).addAnnotation(annotation); + } else if ("DRAW_END".equals(status) && (RECTANGLE_TYPE.equals(annotation.getType()) + || ELLIPSE_TYPE.equals(annotation.getType()) + || TRIANGLE_TYPE.equals(annotation.getType()) + || LINE_TYPE.equals(annotation.getType()))) { roomManager.getRoom(getMeetingId()).addAnnotation(annotation); } else { if ("text".equals(annotation.getType())) { roomManager.getRoom(getMeetingId()).modifyText(annotation); } } - + ClientMessage m = new ClientMessage(ClientMessage.BROADCAST, getMeetingId(), "WhiteboardNewAnnotationCommand", annotation.getAnnotation()); connInvokerService.sendMessage(m); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.mxml index bc3a954903..3a29f1ec3d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/WhiteboardCanvas.mxml @@ -226,7 +226,7 @@ private function removeCursor():void { CursorManager.removeCursor(CursorManager.currentCursorID); - doMouseUp(null); +// doMouseUp(null); } /** Inherited from org.bigbluebutton.common.IBbbCanvas*/ diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy index c5ce773658..65bc44355a 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/ApiController.groovy @@ -327,8 +327,41 @@ class ApiController { session.setMaxInactiveInterval(SESSION_TIMEOUT); - log.info("Successfully joined. Redirecting to ${paramsProcessorUtil.getDefaultClientUrl()}"); - redirect(url: paramsProcessorUtil.getDefaultClientUrl()) + //check if exists the param redirect + boolean redirectClient = true; + String clientURL = paramsProcessorUtil.getDefaultClientUrl(); + + if(!StringUtils.isEmpty(params.redirect)) + { + try{ + redirectClient = Boolean.parseBoolean(params.redirect); + }catch(Exception e){ + redirectClient = true; + } + } + if(!StringUtils.isEmpty(params.clientURL)){ + clientURL = params.clientURL; + } + + if(redirectClient){ + log.info("Successfully joined. Redirecting to ${paramsProcessorUtil.getDefaultClientUrl()}"); + redirect(url: clientURL); + } + else{ + log.info("Successfully joined. Sending XML response."); + response.addHeader("Cache-Control", "no-cache") + withFormat { + xml { + render(contentType:"text/xml") { + response() { + returncode(RESP_CODE_SUCCESS) + messageKey("successfullyJoined") + message("You have joined successfully.") + } + } + } + } + } } /******************************************* diff --git a/record-and-playback/core/lib/recordandplayback/generators/video.rb b/record-and-playback/core/lib/recordandplayback/generators/video.rb index 6b91870db0..97a471debe 100755 --- a/record-and-playback/core/lib/recordandplayback/generators/video.rb +++ b/record-and-playback/core/lib/recordandplayback/generators/video.rb @@ -57,7 +57,7 @@ module BigBlueButton # create_blank_video(15, 1000, canvas.jpg, blank-video.flv) def self.create_blank_deskshare_video(length, rate, blank_canvas, video_out) BigBlueButton.logger.info("Task: Creating blank deskshare video") - command = "ffmpeg -loop_input -t #{length} -i #{blank_canvas} -loglevel fatal -v -10 -r #{rate} -vcodec flashsv #{video_out}" + command = "ffmpeg -loop 1 -t #{length} -i #{blank_canvas} -loglevel fatal -v -10 -r #{rate} -vcodec flashsv #{video_out}" BigBlueButton.execute(command) # TODO: check for result, raise exception when there is an error end @@ -71,7 +71,7 @@ module BigBlueButton # create_blank_video(15, 1000, canvas.jpg, blank-video.flv) def self.create_blank_video(length, rate, blank_canvas, video_out) BigBlueButton.logger.info("Task: Creating blank video") - command = "ffmpeg -y -loop_input -t #{length} -i #{blank_canvas} -loglevel fatal -v -10 -r #{rate} #{video_out}" + command = "ffmpeg -y -loop 1 -t #{length} -i #{blank_canvas} -loglevel fatal -v -10 -r #{rate} #{video_out}" BigBlueButton.execute(command) # TODO: check for result, raise exception when there is an error end diff --git a/record-and-playback/matterhorn/scripts/process/matterhorn.rb b/record-and-playback/matterhorn/scripts/process/matterhorn.rb index 2fd95c6f7b..06d5bd9954 100644 --- a/record-and-playback/matterhorn/scripts/process/matterhorn.rb +++ b/record-and-playback/matterhorn/scripts/process/matterhorn.rb @@ -67,7 +67,7 @@ if not FileTest.directory?(target_dir) metadata = BigBlueButton::Events.get_meeting_metadata("#{temp_dir}/#{meeting_id}/events.xml") - dublincore_data = { :title => metadata[:title.to_s], + dublincore_data = { :title => metadata[:title.to_s].nil? ? meeting_id : metadata[:title.to_s], :subject => metadata[:subject.to_s], :description => metadata[:description.to_s], :creator => metadata[:creator.to_s],