diff --git a/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee b/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee index 883fafb1e7d3adf83dca26e86fd9510fa55b9942..cf53dcea561bef920273734ef499d135210878e5 100755 --- a/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee +++ b/bigbluebutton-html5/app/client/views/whiteboard/slide.coffee @@ -29,6 +29,9 @@ Template.slide.rendered = -> wpm.scale(adjustedDimensions.width, adjustedDimensions.height) @manuallyDisplayShapes = -> + + return if Meteor.WhiteboardCleanStatus.findOne({in_progress: true})? + currentSlide = getCurrentSlideDoc() wpm = @whiteboardPaperModel shapes = Meteor.Shapes.find({whiteboardId: currentSlide?.slide?.id}).fetch() diff --git a/bigbluebutton-html5/app/collections/collections.coffee b/bigbluebutton-html5/app/collections/collections.coffee index 49987e25c01fc64aea070a8367777c523be89c46..200fe01e361467d22dff7faa22bcc7a2c7a32c68 100755 --- a/bigbluebutton-html5/app/collections/collections.coffee +++ b/bigbluebutton-html5/app/collections/collections.coffee @@ -4,3 +4,5 @@ Meteor.Meetings = new Meteor.Collection("meetings") Meteor.Presentations = new Meteor.Collection("presentations") Meteor.Shapes = new Meteor.Collection("shapes") Meteor.Slides = new Meteor.Collection("slides") + +Meteor.WhiteboardCleanStatus = new Meteor.Collection("whiteboard-clean-status") \ No newline at end of file diff --git a/bigbluebutton-html5/app/lib/router.coffee b/bigbluebutton-html5/app/lib/router.coffee index 791efcb5ed5c8049e9a9b7b907a0a47c101c212f..575f6371d2419b31ccd9b6d83046a81d67e62119 100755 --- a/bigbluebutton-html5/app/lib/router.coffee +++ b/bigbluebutton-html5/app/lib/router.coffee @@ -55,29 +55,30 @@ Meteor.subscribe 'meetings', meetingId, onReady: => Meteor.subscribe 'presentations', meetingId, onReady: => Meteor.subscribe 'users', meetingId, userId, authToken, onError: onErrorFunction, onReady: => - # done subscribing - onLoadComplete() - - handleLogourUrlError = () -> - alert "Error: could not find the logoutURL" - setInSession("logoutURL", document.location.hostname) - return - - # obtain the logoutURL - a = $.ajax({dataType: 'json', url: '/bigbluebutton/api/enter'}) - a.done (data) -> - if data.response.logoutURL? # for a meeting with 0 users - setInSession("logoutURL", data.response.logoutURL) + Meteor.subscribe 'whiteboard-clean-status', meetingId, onReady: => + # done subscribing + onLoadComplete() + + handleLogourUrlError = () -> + alert "Error: could not find the logoutURL" + setInSession("logoutURL", document.location.hostname) return - else - if data.response.logoutUrl? # for a running meeting - setInSession("logoutURL", data.response.logoutUrl) + + # obtain the logoutURL + a = $.ajax({dataType: 'json', url: '/bigbluebutton/api/enter'}) + a.done (data) -> + if data.response.logoutURL? # for a meeting with 0 users + setInSession("logoutURL", data.response.logoutURL) return else - handleLogourUrlError() - - a.fail (data, textStatus, errorThrown) -> - handleLogourUrlError() + if data.response.logoutUrl? # for a running meeting + setInSession("logoutURL", data.response.logoutUrl) + return + else + handleLogourUrlError() + + a.fail (data, textStatus, errorThrown) -> + handleLogourUrlError() @render('main') diff --git a/bigbluebutton-html5/app/server/collection_methods/shapes.coffee b/bigbluebutton-html5/app/server/collection_methods/shapes.coffee index 2f73effb9d3ae8ac9bca7336a8a38a00cd437efd..d4c0e1607e7c1a655f6a543ce29a194b7e6c000b 100755 --- a/bigbluebutton-html5/app/server/collection_methods/shapes.coffee +++ b/bigbluebutton-html5/app/server/collection_methods/shapes.coffee @@ -67,15 +67,13 @@ @removeAllShapesFromSlide = (meetingId, whiteboardId) -> Meteor.log.info "removeAllShapesFromSlide__" + whiteboardId if meetingId? and whiteboardId? and Meteor.Shapes.find({meetingId: meetingId, whiteboardId: whiteboardId})? - shapesOnSlide = Meteor.Shapes.find({meetingId: meetingId, whiteboardId: whiteboardId}).fetch() - Meteor.log.info "number of shapes:" + shapesOnSlide.length - for s in shapesOnSlide - Meteor.log.info "shape=" + s.shape.id - id = Meteor.Shapes.findOne({meetingId: meetingId, whiteboardId: whiteboardId, "shape.id": s.shape.id}) - if id? - Meteor.Shapes.remove(id._id) - Meteor.log.info "----removed shape[" + s.shape.id + "] from " + whiteboardId - Meteor.log.info "remaining shapes on the slide:" + Meteor.Shapes.find({meetingId: meetingId, whiteboardId: whiteboardId}).fetch().length + Meteor.Shapes.remove {meetingId: meetingId, whiteboardId: whiteboardId}, -> + Meteor.log.info "clearing all shapes from slide" + + # After shapes are cleared, wait 1 second and set cleaning off + Meteor.setTimeout -> + Meteor.WhiteboardCleanStatus.update({meetingId: meetingId}, {$set: {in_progress: false}}) + , 1000 @removeShapeFromSlide = (meetingId, whiteboardId, shapeId) -> shapeToRemove = Meteor.Shapes.findOne({meetingId: meetingId, whiteboardId: whiteboardId, "shape.id": shapeId}) @@ -88,9 +86,13 @@ # called on server start and meeting end @clearShapesCollection = (meetingId) -> if meetingId? - Meteor.Shapes.remove({meetingId: meetingId}, Meteor.log.info "cleared Shapes Collection (meetingId: #{meetingId}!") + Meteor.Shapes.remove {}, -> + Meteor.log.info "cleared Shapes Collection (meetingId: #{meetingId}!" + Meteor.WhiteboardCleanStatus.update({meetingId: meetingId}, {$set: {in_progress: false}}) else - Meteor.Shapes.remove({}, Meteor.log.info "cleared Shapes Collection (all meetings)!") + Meteor.Shapes.remove {}, -> + Meteor.log.info "cleared Shapes Collection (all meetings)!" + Meteor.WhiteboardCleanStatus.update({meetingId: meetingId}, {$set: {in_progress: false}}) # -------------------------------------------------------------------------------------------- # end Private methods on server diff --git a/bigbluebutton-html5/app/server/publish.coffee b/bigbluebutton-html5/app/server/publish.coffee index ef7510d74d9656be67ea3e1a6376e56c1e2e35a5..b1500de47f5323f1ab691b70ea37f749260037d9 100755 --- a/bigbluebutton-html5/app/server/publish.coffee +++ b/bigbluebutton-html5/app/server/publish.coffee @@ -70,3 +70,7 @@ Meteor.publish 'meetings', (meetingId) -> Meteor.publish 'presentations', (meetingId) -> Meteor.log.info "publishing presentations for #{meetingId}" Meteor.Presentations.find({meetingId: meetingId}) + +Meteor.publish 'whiteboard-clean-status', (meetingId) -> + Meteor.log.info "whiteboard clean status #{meetingId}" + Meteor.WhiteboardCleanStatus.find({meetingId: meetingId}) diff --git a/bigbluebutton-html5/app/server/redispubsub.coffee b/bigbluebutton-html5/app/server/redispubsub.coffee index 3d81454bb15b1a3e5eaf9334d003c4cf7b3a3cf4..07bebcf6fe28742299f80797aa791a6719b61d81 100755 --- a/bigbluebutton-html5/app/server/redispubsub.coffee +++ b/bigbluebutton-html5/app/server/redispubsub.coffee @@ -219,6 +219,11 @@ class Meteor.RedisPubSub return if message.header.name is "get_whiteboard_shapes_reply" and message.payload.requester_id is "nodeJSapp" + + # Create a whiteboard clean status or find one for the current meeting + if not Meteor.WhiteboardCleanStatus.findOne({meetingId: meetingId})? + Meteor.WhiteboardCleanStatus.insert({meetingId: meetingId, in_progress: false}) + for shape in message.payload.shapes whiteboardId = shape.wb_id addShapeToCollection meetingId, whiteboardId, shape @@ -238,6 +243,7 @@ class Meteor.RedisPubSub if message.header.name is "whiteboard_cleared_message" whiteboardId = message.payload.whiteboard_id + Meteor.WhiteboardCleanStatus.update({meetingId: meetingId}, {$set: {'in_progress': true}}) removeAllShapesFromSlide meetingId, whiteboardId return diff --git a/bigbluebutton-html5/app/server/server.coffee b/bigbluebutton-html5/app/server/server.coffee index 125492a669988db89201196ae24a0bcd2a501425..e85cf7dd068ecd590b6d23bdf079722a707ba2ca 100755 --- a/bigbluebutton-html5/app/server/server.coffee +++ b/bigbluebutton-html5/app/server/server.coffee @@ -2,6 +2,7 @@ Meteor.startup -> Meteor.log.info "server start" #remove all data + Meteor.WhiteboardCleanStatus.remove({}) clearUsersCollection() clearChatCollection() clearMeetingsCollection()