bigbluebutton-Github/bigbluebutton-html5/imports/api/2.0/annotations/server/modifiers/addAnnotation.js
Oleksandr Zhurbenko 251bd22738 PR review fixes
2017-09-06 12:36:52 -07:00

79 lines
2.5 KiB
JavaScript

import { check } from 'meteor/check';
import Logger from '/imports/startup/server/logger';
import Annotations from '/imports/api/2.0/annotations';
const ANNOTATION_TYPE_TEXT = 'text';
const ANNOTATION_TYPE_PENCIL = 'pencil';
export default function addAnnotation(meetingId, whiteboardId, userId, annotation) {
check(meetingId, String);
check(whiteboardId, String);
check(annotation, Object);
const { id, status, annotationType, annotationInfo, wbId, position } = annotation;
const selector = {
meetingId,
id,
userId,
};
// annotationInfo will be added to the modifier in switch below, depending on the situation
const modifier = {
$set: {
whiteboardId,
meetingId,
id,
status,
annotationType,
wbId,
position,
},
$inc: { version: 1 },
};
const shapeType = annotation.annotationType;
switch (shapeType) {
case ANNOTATION_TYPE_TEXT:
// Replace flash new lines to html5 new lines if it's text
modifier.$set.annotationInfo = annotationInfo;
modifier.$set.annotationInfo.text = annotation.annotationInfo.text.replace(/[\r]/g, '\n');
break;
case ANNOTATION_TYPE_PENCIL:
// In the pencil draw update we need to add a coordinate to the existing array
// And update te rest of the properties
if (annotation.status === 'DRAW_UPDATE') {
modifier.$set['annotationInfo.color'] = annotationInfo.color;
modifier.$set['annotationInfo.thickness'] = annotationInfo.thickness;
modifier.$set['annotationInfo.id'] = annotationInfo.id;
modifier.$set['annotationInfo.whiteboardId'] = annotationInfo.whiteboardId;
modifier.$set['annotationInfo.status'] = annotationInfo.status;
modifier.$set['annotationInfo.transparency'] = annotationInfo.transparency;
modifier.$push = { 'annotationInfo.points': { $each: annotationInfo.points } };
break;
}
modifier.$set.annotationInfo = annotationInfo;
break;
default:
modifier.$set.annotationInfo = annotationInfo;
break;
}
const cb = (err, numChanged) => {
if (err) {
return Logger.error(`Adding annotation2x to collection: ${err}`);
}
const { insertedId } = numChanged;
if (insertedId) {
return Logger.info(`Added annotation2x id=${annotation.id} whiteboard=${whiteboardId}`);
}
return Logger.info(`Upserted annotation2x id=${annotation.id} whiteboard=${whiteboardId}`);
};
return Annotations.upsert(selector, modifier, cb);
}