diff --git a/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js b/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js index 04217b08ea56a7d5cb5535db45ac45adffe1d4d9..23b6f390bd9dcd44c7c733c606c98a9e2cba3ed6 100644 --- a/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js +++ b/bigbluebutton-html5/imports/api/users-settings/server/methods/addUserSettings.js @@ -45,6 +45,7 @@ const currentParameters = [ 'bbb_preferred_camera_profile', 'bbb_enable_screen_sharing', 'bbb_enable_video', + 'bbb_record_video', 'bbb_skip_video_preview', 'bbb_mirror_own_webcam', // PRESENTATION diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx index dbfb46a352a439412850d0a6e1b6dcf8809c216d..343f7130e053beaf876eb5c76878e526dd598b6a 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx @@ -550,6 +550,7 @@ class VideoProvider extends Component { userId: this.info.userId, userName: this.info.userName, bitrate, + record: VideoService.getRecord(), }; logger.info({ diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/service.js b/bigbluebutton-html5/imports/ui/components/video-provider/service.js index 4bb35b2467ddc92b93ae454eef59f9c6001d61ad..4c6757e98c453ac43b974ff03f5f4ff2c8d4a9f8 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/service.js +++ b/bigbluebutton-html5/imports/ui/components/video-provider/service.js @@ -50,6 +50,9 @@ class VideoService { this.numberOfDevices = 0; + this.record = null; + this.hackRecordViewer = null; + this.updateNumberOfDevices = this.updateNumberOfDevices.bind(this); // Safari doesn't support ondevicechange if (!this.isSafari) { @@ -344,6 +347,31 @@ class VideoService { { fields: { role: 1 } }).role; } + getRecord() { + if (this.record === null) { + this.record = getFromUserSettings('bbb_record_video', true); + } + + // TODO: Remove this + // This is a hack to handle a missing piece at the backend of a particular deploy. + // If, at the time the video is shared, the user has a viewer role and + // meta_hack-record-viewer-video is 'false' this user won't have this video + // stream recorded. + if (this.hackRecordViewer === null) { + const prop = Meetings.findOne( + { meetingId: Auth.meetingID }, + { fields: { 'metadataProp': 1 } }, + ).metadataProp; + + const value = prop.metadata ? prop.metadata['hack-record-viewer-video'] : null; + this.hackRecordViewer = value ? value.toLowerCase() === 'true' : true; + } + + const hackRecord = this.getMyRole() === ROLE_MODERATOR || this.hackRecordViewer; + + return this.record && hackRecord; + } + filterModeratorOnly(streams) { const amIViewer = this.getMyRole() === ROLE_VIEWER; @@ -679,6 +707,7 @@ export default { addCandidateToPeer: (peer, candidate, cameraId) => videoService.addCandidateToPeer(peer, candidate, cameraId), processInboundIceQueue: (peer, cameraId) => videoService.processInboundIceQueue(peer, cameraId), getRole: isLocal => videoService.getRole(isLocal), + getRecord: () => videoService.getRecord(), getSharedDevices: () => videoService.getSharedDevices(), getSkipVideoPreview: fromInterface => videoService.getSkipVideoPreview(fromInterface), getUserParameterProfile: () => videoService.getUserParameterProfile(),