From 340b0771e53c192ac5b2d7c3309439eab011c2ab Mon Sep 17 00:00:00 2001 From: Mikhail Novosyolov Date: Thu, 19 Aug 2021 02:31:49 +0300 Subject: [PATCH 1/3] Avoid race condition between redis and bbb-rap-resque-worker Redis must be started before bbb-rap-resque-worker.service which will connect to Redis --- record-and-playback/core/systemd/bbb-rap-resque-worker.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/record-and-playback/core/systemd/bbb-rap-resque-worker.service b/record-and-playback/core/systemd/bbb-rap-resque-worker.service index d092b65a80..4fec548cf3 100644 --- a/record-and-playback/core/systemd/bbb-rap-resque-worker.service +++ b/record-and-playback/core/systemd/bbb-rap-resque-worker.service @@ -1,5 +1,7 @@ [Unit] Description=BigBlueButton resque worker for recordings +Wants=redis.service +After=redis.service [Service] Type=simple From 9d4e79f83ec8e7390afb8db1c10dc6a27990a8fe Mon Sep 17 00:00:00 2001 From: Ramon Souza Date: Mon, 23 Aug 2021 10:23:09 -0300 Subject: [PATCH 2/3] only change presentation isDownloadable after confirmation --- .../presentation-uploader/component.jsx | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx index 671a425a9b..15d95bab86 100755 --- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx @@ -450,13 +450,27 @@ class PresentationUploader extends Component { handleConfirm(hasNewUpload) { const { - handleSave, selectedToBeNextCurrent, + handleSave, + selectedToBeNextCurrent, + presentations: propPresentations, + dispatchTogglePresentationDownloadable, } = this.props; const { disableActions, presentations } = this.state; const presentationsToSave = presentations; this.setState({ disableActions: true }); + presentations.forEach(item => { + if (item.upload.done) { + const didDownloadableStateChange = propPresentations.some( + (p) => p.id === item.id && p.isDownloadable !== item.isDownloadable + ); + if (didDownloadableStateChange) { + dispatchTogglePresentationDownloadable(item, item.isDownloadable); + } + } + }); + if (hasNewUpload) { this.toastId = toast.info(this.renderToastList(), { hideProgressBar: true, @@ -522,7 +536,6 @@ class PresentationUploader extends Component { } handleToggleDownloadable(item) { - const { dispatchTogglePresentationDownloadable } = this.props; const { presentations } = this.state; const oldDownloadableState = item.isDownloadable; @@ -541,12 +554,6 @@ class PresentationUploader extends Component { this.setState({ presentations: presentationsUpdated, }); - - // If the presentation has not be uploaded yet, adjusting the state suffices - // otherwise set previously uploaded presentation to [not] be downloadable - if (item.upload.done) { - dispatchTogglePresentationDownloadable(item, !oldDownloadableState); - } } updateFileKey(id, key, value, operation = '$set') { From 1b30a6e4bd8dd696e21cfd55045972e0724903e4 Mon Sep 17 00:00:00 2001 From: Max Franke Date: Fri, 20 Aug 2021 17:04:14 -0300 Subject: [PATCH 3/3] fix(webcam): key list not provided userName is a list, and its contents must have an unique key. --- .../user-list-item/user-name/component.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx index f851c1ec41..f4cb48fb03 100644 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages } from 'react-intl'; import Icon from '/imports/ui/components/icon/component'; +import _ from 'lodash'; import { styles } from './styles'; const messages = defineMessages({ @@ -83,7 +84,7 @@ const UserName = (props) => { if (user.isSharingWebcam && LABEL.sharingWebcam) { userNameSub.push( - +   {intl.formatMessage(messages.sharingWebcam)} @@ -93,7 +94,7 @@ const UserName = (props) => { if (isThisMeetingLocked && user.locked && user.role !== ROLE_MODERATOR) { userNameSub.push( - +   {intl.formatMessage(messages.locked)} @@ -123,7 +124,7 @@ const UserName = (props) => { {user.name} -  +   {(isMe(user.userId)) ? `(${intl.formatMessage(messages.you)})` : ''}