Skip to content

Commit

Permalink
Merge pull request #17111 from antobinary/merge-26-into-27
Browse files Browse the repository at this point in the history
chore: Merge BBB 2.6.0 into v2.7.x-release
  • Loading branch information
antobinary committed Mar 20, 2023
2 parents af06006 + 05f7972 commit ae0afae
Show file tree
Hide file tree
Showing 73 changed files with 1,034 additions and 320 deletions.
23 changes: 23 additions & 0 deletions .github/ISSUE_TEMPLATE/docs-issue.md
@@ -0,0 +1,23 @@
---
name: Documentation Issue
about: Template for creating an issue about the documentation at docs.bigbluebutton.org
title: ''
labels: 'target: documentation'
assignees: ''

---

<!--PLEASE DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS.
This issue tracker is only for bbb development or docs related issues.-->

**Link to the portion of the docs that is out of date**
If applicable, link to the section of the docs that is out of date.

**Describe what you belive the correct version should be**

**Screenshots**
If applicable, add screenshots to help explain your concern.

**Additional context**
Add any other context about the problem here.

15 changes: 3 additions & 12 deletions .github/workflows/automated-tests.yml
Expand Up @@ -181,17 +181,8 @@ jobs:
cp /usr/share/bigbluebutton/nginx/sip.nginx configs/nginx_sip.nginx
cp /etc/hosts /configs/hosts
chmod a+r -R configs
mkdir logs
cp /var/log/haproxy.log logs/haproxy.log
bbb-conf --status > logs/bbb-status.log
journalctl -u bbb-html5-frontend@1.service --since today > logs/bbb-html5-frontend.log
journalctl -u bbb-html5-backend@1.service --since today > logs/bbb-html5-backend.log
cp /var/log/bigbluebutton/bbb-web.log logs/bbb-web.log
cp /var/log/bbb-apps-akka/bbb-apps-akka.log logs/bbb-apps-akka.log
cp /var/log/turnserver/turnserver.log logs/turnserver.log
cp /var/log/haproxy.log logs/haproxy.log
cp /opt/freeswitch/log/freeswitch.log logs/freeswitch.log
chmod a+r -R logs
bbb-conf --zip
cp $(ls -t /root/*.tar.gz | head -1) ./bbb-logs.tar.gz
'
- if: failure()
uses: actions/upload-artifact@v3
Expand All @@ -202,4 +193,4 @@ jobs:
uses: actions/upload-artifact@v3
with:
name: bbb-logs
path: logs
path: ./bbb-logs.tar.gz
Expand Up @@ -72,6 +72,10 @@ public void maxParticipantsReached() {
errors.add(new String[] {"maxParticipantsReached", "The number of participants allowed for this meeting has been reached."});
}

public void guestDeniedAccess() {
errors.add(new String[] {"guestDeniedAccess", "You have been denied access to this meeting based on the meeting's guest policy"});
}

public void addError(String[] error) {
errors.add(error);
}
Expand Down
2 changes: 2 additions & 0 deletions bbb-export-annotations/config/settings.json
Expand Up @@ -16,6 +16,8 @@
},
"process": {
"whiteboardTextEncoding": "utf-8",
"maxImageWidth": 2048,
"maxImageHeight": 1536,
"textScaleFactor": 4,
"pointsPerInch": 72,
"pixelsPerInch": 96
Expand Down
21 changes: 11 additions & 10 deletions bbb-export-annotations/workers/process.js
Expand Up @@ -123,7 +123,6 @@ function to_px(pt) {
function escapeText(string) {
return string
.replace(/[~`!.*+?%^${}()|[\]\\/]/g, '\\$&')
.replace(/-/g, '\\&#x2D;')
.replace(/&/g, '\\&amp;')
.replace(/'/g, '\\&#39;')
.replace(/"/g, '\\&quot;')
Expand Down Expand Up @@ -801,34 +800,36 @@ async function process_presentation_annotations() {
const svgBackgroundExists = fs.existsSync(svgBackgroundSlide);
const backgroundFormat = fs.existsSync(`${bgImagePath}.png`) ? 'png' : 'jpeg';

// Output dimensions in pixels even if stated otherwise (pt)
// CairoSVG didn't like attempts to read the dimensions from a stream
// that would prevent loading file in memory
// Ideally, use dimensions provided by tldraw's background image asset
// (this is not yet always provided)
const dimensions = svgBackgroundExists ?
probe.sync(fs.readFileSync(svgBackgroundSlide)) :
probe.sync(fs.readFileSync(`${bgImagePath}.${backgroundFormat}`));

const slideWidth = parseInt(dimensions.width, 10);
const slideHeight = parseInt(dimensions.height, 10);

const maxImageWidth = config.process.maxImageWidth;
const maxImageHeight = config.process.maxImageHeight;

const ratio = Math.min(maxImageWidth / slideWidth, maxImageHeight / slideHeight);
const scaledWidth = slideWidth * ratio;
const scaledHeight = slideHeight * ratio;

// Create the SVG slide with the background image
let svg = create({version: '1.0', encoding: 'UTF-8'})
.ele('svg', {
'xmlns': 'http://www.w3.org/2000/svg',
'xmlns:xlink': 'http://www.w3.org/1999/xlink',
'width': `${slideWidth}px`,
'height': `${slideHeight}px`,
'width': `${scaledWidth}px`,
'height': `${scaledHeight}px`,
})
.dtd({
pubID: '-//W3C//DTD SVG 1.1//EN',
sysID: 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd',
})
.ele('image', {
'xlink:href': `file://${dropbox}/slide${currentSlide.page}.${backgroundFormat}`,
'width': `${slideWidth}px`,
'height': `${slideHeight}px`,
'width': `${scaledWidth}px`,
'height': `${scaledHeight}px`,
})
.up()
.ele('g', {
Expand Down
2 changes: 1 addition & 1 deletion bbb-presentation-video.placeholder.sh
@@ -1,6 +1,6 @@
#!/bin/sh
set -ex
RELEASE=4.0.0-rc.1
RELEASE=4.0.0-rc.2
cat <<MSG
This tool downloads prebuilt packages built on Github Actions
The corresponding source can be browsed at https://github.com/bigbluebutton/bbb-presentation-video/tree/${RELEASE}
Expand Down
1 change: 0 additions & 1 deletion bbb-webrtc-sfu.placeholder.sh
@@ -1,2 +1 @@
git clone --branch v2.10.0-alpha.1 --depth 1 https://github.com/bigbluebutton/bbb-webrtc-sfu bbb-webrtc-sfu

1 change: 1 addition & 0 deletions bigbluebutton-html5/client/main.html
Expand Up @@ -127,6 +127,7 @@
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Italic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-SemiboldItalic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-BoldItalic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
<link rel="preload" href="files/source-code-pro-latin-400-normal.woff2" as="font" crossorigin="anonymous"/>

<style>
@font-face {
Expand Down
Expand Up @@ -142,6 +142,7 @@ class ActionsDropdown extends PureComponent {
setMeetingLayout,
setPushLayout,
showPushLayout,
amIModerator,
} = this.props;

const {
Expand Down Expand Up @@ -190,7 +191,7 @@ class ActionsDropdown extends PureComponent {
})
}

if (!amIPresenter) {
if (!amIPresenter && amIModerator) {
actions.push({
icon: "presentation",
label: formatMessage(takePresenter),
Expand Down Expand Up @@ -284,7 +285,6 @@ class ActionsDropdown extends PureComponent {
const {
intl,
amIPresenter,
amIModerator,
shortcuts: OPEN_ACTIONS_AK,
isMeteorConnected,
isDropdownOpen,
Expand All @@ -297,12 +297,12 @@ class ActionsDropdown extends PureComponent {
const children = availablePresentations.length > 1 && amIPresenter
? availablePresentations.concat(availableActions) : availableActions;

if ((!amIPresenter && !amIModerator)
|| availableActions.length === 0
const customStyles = { top: '-1rem' };

if (availableActions.length === 0
|| !isMeteorConnected) {
return null;
}
const customStyles = { top: '-1rem' };

return (
<BBBMenu
Expand Down
45 changes: 25 additions & 20 deletions bigbluebutton-html5/imports/ui/components/audio/container.jsx
Expand Up @@ -5,8 +5,10 @@ import { Session } from 'meteor/session';
import { withModalMounter } from '/imports/ui/components/common/modal/service';
import { injectIntl, defineMessages } from 'react-intl';
import _ from 'lodash';
import Auth from '/imports/ui/services/auth';
import Breakouts from '/imports/api/breakouts';
import AppService from '/imports/ui/components/app/service';
import BreakoutsService from '/imports/ui/components/breakout-room/service';
import { notify } from '/imports/ui/services/notification';
import getFromUserSettings from '/imports/ui/services/users-settings';
import VideoPreviewContainer from '/imports/ui/components/video-preview/container';
Expand Down Expand Up @@ -189,28 +191,31 @@ export default lockContextContainer(withModalMounter(injectIntl(withTracker(({ m
notify(intl.formatMessage(intlMessages.reconectingAsListener), 'info', 'volume_level_2');
}
}
const breakoutUserIsIn = BreakoutsService.getBreakoutUserIsIn(Auth.userID);
if(!!breakoutUserIsIn && !meetingIsBreakout) {
const userBreakout = Breakouts.find({id: breakoutUserIsIn.id})
userBreakout.observeChanges({
removed() {
// if the user joined a breakout room, the main room's audio was
// programmatically dropped to avoid interference. On breakout end,
// offer to rejoin main room audio only if the user is not in audio already
if (Service.isUsingAudio()
|| userSelectedMicrophone
|| userSelectedListenOnly) {
if (enableVideo && autoShareWebcam) {
openVideoPreviewModal();
}

Breakouts.find().observeChanges({
removed() {
// if the user joined a breakout room, the main room's audio was
// programmatically dropped to avoid interference. On breakout end,
// offer to rejoin main room audio only if the user is not in audio already
if (Service.isUsingAudio()
|| userSelectedMicrophone
|| userSelectedListenOnly) {
if (enableVideo && autoShareWebcam) {
openVideoPreviewModal();
return;
}

return;
}
setTimeout(() => openAudioModal().then(() => {
if (enableVideo && autoShareWebcam) {
openVideoPreviewModal();
}
}), 0);
},
});
setTimeout(() => openAudioModal().then(() => {
if (enableVideo && autoShareWebcam) {
openVideoPreviewModal();
}
}), 0);
},
});
}

return {
hasBreakoutRooms,
Expand Down
2 changes: 1 addition & 1 deletion bigbluebutton-html5/imports/ui/components/audio/service.js
Expand Up @@ -140,7 +140,7 @@ export default {
isEchoTest: () => AudioManager.isEchoTest,
error: () => AudioManager.error,
isUserModerator: () => Users.findOne({ userId: Auth.userID },
{ fields: { role: 1 } }).role === ROLE_MODERATOR,
{ fields: { role: 1 } })?.role === ROLE_MODERATOR,
isVoiceUser,
autoplayBlocked: () => AudioManager.autoplayBlocked,
handleAllowAutoplay: () => AudioManager.handleAllowAutoplay(),
Expand Down
Expand Up @@ -175,7 +175,7 @@ class PushLayoutEngine extends React.Component {
});
}

if (meetingLayout === "custom" && !isPresenter) {
if (meetingLayout === "custom" && selectedLayout === "custom" && !isPresenter) {

if (meetingLayoutFocusedCamera !== prevProps.meetingLayoutFocusedCamera
|| meetingLayoutUpdatedAt !== prevProps.meetingLayoutUpdatedAt) {
Expand Down
Expand Up @@ -838,6 +838,7 @@ class Poll extends Component {
small={!smallSidebar}
label={intl.formatMessage(intlMessages.tf)}
aria-describedby="poll-config-button"
data-test="pollTrueFalse"
color="default"
onClick={() => {
this.setState({
Expand Down
Expand Up @@ -510,7 +510,7 @@ class Presentation extends PureComponent {
multiUser,
} = this.props;
const {
zoom, fitToWidth, isPanning, tldrawAPI,
zoom, fitToWidth, isPanning,
} = this.state;

if (!currentSlide) return null;
Expand All @@ -537,7 +537,6 @@ class Presentation extends PureComponent {
}}
setIsPanning={this.setIsPanning}
isPanning={isPanning}
curPageId={tldrawAPI?.getPage()?.id}
currentSlideNum={currentSlide.num}
presentationId={currentSlide.presentationId}
zoomChanger={this.zoomChanger}
Expand Down Expand Up @@ -638,6 +637,7 @@ class Presentation extends PureComponent {
zoom,
tldrawIsMounting,
isPanning,
tldrawAPI,
} = this.state;

let viewBoxDimensions;
Expand Down Expand Up @@ -721,6 +721,7 @@ class Presentation extends PureComponent {
podId={podId}
slidePosition={slidePosition}
getSvgRef={this.getSvgRef}
tldrawAPI={tldrawAPI}
setTldrawAPI={this.setTldrawAPI}
curPageId={currentSlide?.num.toString() || '0'}
svgUri={currentSlide?.svgUri}
Expand Down
Expand Up @@ -485,11 +485,21 @@ class PresentationUploader extends Component {

handleRemove(item, withErr = false) {
if (withErr) {
const { presentations } = this.props;
const { presentations } = this.state;
const { presentations: propPresentations } = this.props;

const filteredPropPresentations = propPresentations.filter(d => d.upload.done && d.conversion?.done);
const ids = new Set(filteredPropPresentations.map((d) => d.id));
const filteredPresentations = presentations.filter((d) => {
d.isCurrent = false;
return !ids.has(d.id) && !(d.upload.error || d.conversion.error) && !(d.upload.done && d.conversion.done)});
const merged = [
...filteredPresentations,
...filteredPropPresentations,
];
this.hasError = false;
return this.setState({
presentations,
disableActions: false,
presentations: merged,
});
}

Expand Down Expand Up @@ -623,10 +633,20 @@ class PresentationUploader extends Component {
handleDismiss() {
const { presentations } = this.state;
const { presentations: propPresentations } = this.props;
const ids = new Set(propPresentations.map((d) => d.ID));

const ids = new Set(propPresentations.map((d) => d.id));

const filteredPresentations = presentations.filter((d) => {
return !ids.has(d.id) && (d.upload.done || d.upload.progress !== 0)});
const isThereStateCurrentPres = filteredPresentations.some(p => p.isCurrent);
const merged = [
...presentations.filter((d) => !ids.has(d.ID)),
...propPresentations,
...filteredPresentations,
...propPresentations.filter(p => {
if (isThereStateCurrentPres) {
p.isCurrent = false;
}
return true;
}),
];
this.setState(
{ presentations: merged },
Expand Down
Expand Up @@ -92,6 +92,9 @@ const parseCurrentSlideContent = (yesValue, noValue, abstentionValue, trueValue,
const yesNoPatt = /.*(yes\/no|no\/yes).*/gm;
const hasYN = safeMatch(yesNoPatt, content, false);

const trueFalsePatt = /.*(true\/false|false\/true).*/gm;
const hasTF = safeMatch(trueFalsePatt, content, false);

const pollRegex = /\b[1-9A-Ia-i][.)] .*/g;
let optionsPoll = safeMatch(pollRegex, content, []);
const optionsWithLabels = [];
Expand Down Expand Up @@ -163,7 +166,7 @@ const parseCurrentSlideContent = (yesValue, noValue, abstentionValue, trueValue,
}
});

if (question.length > 0 && optionsPoll.length === 0 && !doubleQuestion && !hasYN) {
if (question.length > 0 && optionsPoll.length === 0 && !doubleQuestion && !hasYN && !hasTF) {
quickPollOptions.push({
type: 'R-',
poll: {
Expand Down
Expand Up @@ -642,7 +642,7 @@ class VideoService {
const currentUser = Users.findOne({ userId: Auth.userID },
{ fields: { role: 1 } });

const isModerator = currentUser.role === 'MODERATOR';
const isModerator = currentUser?.role === 'MODERATOR';
const isBreakout = meetingIsBreakout();
const isPinEnabled = this.isPinEnabled();

Expand Down

0 comments on commit ae0afae

Please sign in to comment.