bigbluebutton-Github/bigbluebutton-html5/app/server/collection_methods/shapes.coffee
Lucas Zawacki 6b04a86e7e Prevent slowdown on firefox when deleting lots of shape messages
By creating a new collection called WhiteboardCleanStatus which
is used to alert the clients that the server is cleaning shapes.

When shapes are being cleaned they are not drawn and so things don't slow down on firefox or chrome
2015-05-05 18:33:08 -04:00

100 lines
4.5 KiB
CoffeeScript
Executable File

# --------------------------------------------------------------------------------------------
# Private methods on server
# --------------------------------------------------------------------------------------------
@addShapeToCollection = (meetingId, whiteboardId, shapeObject) ->
if shapeObject?.shape_type is "text"
Meteor.log.info "we are dealing with a text shape and the event is:#{shapeObject.status}"
entry =
meetingId: meetingId
whiteboardId: whiteboardId
shape:
type: shapeObject.shape.type
textBoxHeight: shapeObject.shape.textBoxHeight
backgroundColor: shapeObject.shape.backgroundColor
fontColor: shapeObject.shape.fontColor
status: shapeObject.shape.status
dataPoints: shapeObject.shape.dataPoints
x: shapeObject.shape.x
textBoxWidth: shapeObject.shape.textBoxWidth
whiteboardId: shapeObject.shape.whiteboardId
fontSize: shapeObject.shape.fontSize
id: shapeObject.shape.id
y: shapeObject.shape.y
calcedFontSize: shapeObject.shape.calcedFontSize
text: shapeObject.shape.text
background: shapeObject.shape.background
if shapeObject.status is "textEdited" or shapeObject.status is "textPublished"
# only keep the final version of the text shape
removeTempTextShape = (callback) ->
Meteor.Shapes.remove({'shape.id':shapeObject.shape.id})
# for s in Meteor.Shapes.find({'shape.id':shapeObject.shape.id}).fetch()
# Meteor.log.info "there is this shape: #{s.shape.text}"
callback()
removeTempTextShape( ->
# display as the prestenter is typing
id = Meteor.Shapes.insert(entry)
Meteor.log.info "#{shapeObject.status} substituting the temp shapes with the newer one"
)
else
# the mouse button was released - the drawing is complete
# TODO: pencil messages currently don't send draw_end and are labeled all as DRAW_START
if shapeObject?.status is "DRAW_END" or (shapeObject?.status is "DRAW_START" and shapeObject?.shape_type is "pencil")
entry =
meetingId: meetingId
whiteboardId: whiteboardId
shape:
wb_id: shapeObject.wb_id
shape_type: shapeObject.shape_type
status: shapeObject.status
id: shapeObject.id
shape:
type: shapeObject.shape.type
status: shapeObject.shape.status
points: shapeObject.shape.points
whiteboardId: shapeObject.shape.whiteboardId
id: shapeObject.shape.id
square: shapeObject.shape.square
transparency: shapeObject.shape.transparency
thickness: shapeObject.shape.thickness
color: shapeObject.shape.color
id = Meteor.Shapes.insert(entry)
@removeAllShapesFromSlide = (meetingId, whiteboardId) ->
Meteor.log.info "removeAllShapesFromSlide__" + whiteboardId
if meetingId? and whiteboardId? and Meteor.Shapes.find({meetingId: meetingId, whiteboardId: whiteboardId})?
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})
if meetingId? and whiteboardId? and shapeId? and shapeToRemove?
Meteor.Shapes.remove(shapeToRemove._id)
Meteor.log.info "----removed shape[" + shapeId + "] from " + whiteboardId
Meteor.log.info "remaining shapes on the slide:" + Meteor.Shapes.find({meetingId: meetingId, whiteboardId: whiteboardId}).count()
# called on server start and meeting end
@clearShapesCollection = (meetingId) ->
if 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.WhiteboardCleanStatus.update({meetingId: meetingId}, {$set: {in_progress: false}})
# --------------------------------------------------------------------------------------------
# end Private methods on server
# --------------------------------------------------------------------------------------------