diff --git a/bigbluebutton-html5/imports/ui/components/media/container.jsx b/bigbluebutton-html5/imports/ui/components/media/container.jsx index 659edc3ae4f1c832d943b56dd35aa847c57d90ad..b560609f9dae5d3783af1d4241170344e1fbc507 100644 --- a/bigbluebutton-html5/imports/ui/components/media/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/media/container.jsx @@ -53,8 +53,8 @@ class MediaContainer extends Component { MediaContainer.defaultProps = defaultProps; export default withTracker(() => { - const videoSettings = Settings.video; - const viewVideoDock = videoSettings.viewParticipantsWebcams; + const { dataSaving } = Settings; + const { viewParticipantsWebcams: viewVideoDock, viewScreenshare } = dataSaving; const data = {}; data.currentPresentation = MediaService.getPresentationInfo(); @@ -68,7 +68,7 @@ export default withTracker(() => { data.content = <PresentationAreaContainer />; } - if (MediaService.shouldShowScreenshare()) { + if (MediaService.shouldShowScreenshare() && (viewScreenshare || MediaService.isUserPresenter())) { data.content = <ScreenshareContainer />; } diff --git a/bigbluebutton-html5/imports/ui/components/media/service.js b/bigbluebutton-html5/imports/ui/components/media/service.js index 9523f64779f3dc4eee14ac7f0f138856d0384a1d..d697ee637f80fdcdd54caa6c530c9a928541373b 100644 --- a/bigbluebutton-html5/imports/ui/components/media/service.js +++ b/bigbluebutton-html5/imports/ui/components/media/service.js @@ -1,5 +1,7 @@ import Presentations from '/imports/api/presentations'; import { isVideoBroadcasting } from '/imports/ui/components/screenshare/service'; +import Auth from '/imports/ui/services/auth'; +import Users from '/imports/api/users'; const getPresentationInfo = () => { const currentPresentation = Presentations.findOne({ @@ -12,6 +14,8 @@ const getPresentationInfo = () => { }; }; +const isUserPresenter = () => Users.findOne({ userId: Auth.userID }).presenter; + function shouldShowWhiteboard() { return true; } @@ -29,4 +33,5 @@ export default { shouldShowWhiteboard, shouldShowScreenshare, shouldShowOverlay, + isUserPresenter, }; diff --git a/bigbluebutton-html5/imports/ui/components/settings/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/component.jsx index d405d7a52ce46438c40883949186549d8618ae2f..130aded284308ecb105be42e4904a1ad4d86e70c 100644 --- a/bigbluebutton-html5/imports/ui/components/settings/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/component.jsx @@ -3,7 +3,7 @@ import Modal from '/imports/ui/components/modal/fullscreen/component'; import { Tab, Tabs, TabList, TabPanel } from 'react-tabs'; import { defineMessages, injectIntl, intlShape } from 'react-intl'; import ClosedCaptions from '/imports/ui/components/settings/submenus/closed-captions/component'; -import DataSaving from '/imports/ui/components/settings/submenus/dataSaving/component'; +import DataSaving from '/imports/ui/components/settings/submenus/data-saving/component'; import Application from '/imports/ui/components/settings/submenus/application/container'; import _ from 'lodash'; import PropTypes from 'prop-types'; @@ -54,14 +54,14 @@ const intlMessages = defineMessages({ description: 'Settings modal save button label', }, dataSavingLabel: { - id: 'app.settings.dataSaving.label', + id: 'app.settings.dataSavingTab.label', description: 'label for data savings tab', }, }); const propTypes = { intl: intlShape.isRequired, - video: PropTypes.object.isRequired, + dataSaving: PropTypes.object.isRequired, application: PropTypes.object.isRequired, cc: PropTypes.object.isRequired, participants: PropTypes.object.isRequired, @@ -79,18 +79,18 @@ class Settings extends Component { super(props); const { - video, participants, cc, application, + dataSaving, participants, cc, application, } = props; this.state = { current: { - video: _.clone(video), + dataSaving: _.clone(dataSaving), application: _.clone(application), cc: _.clone(cc), participants: _.clone(participants), }, saved: { - video: _.clone(video), + dataSaving: _.clone(dataSaving), application: _.clone(application), cc: _.clone(cc), participants: _.clone(participants), @@ -158,7 +158,7 @@ class Settings extends Component { aria-labelledby="dataSavingTab" selectedClassName={styles.selected} > - <Icon iconName="more" className={styles.icon} /> + <Icon iconName="network" className={styles.icon} /> <span id="dataSaving">{intl.formatMessage(intlMessages.dataSavingLabel)}</span> </Tab> {/* { isModerator ? */} @@ -190,7 +190,7 @@ class Settings extends Component { </TabPanel> <TabPanel className={styles.tabPanel}> <DataSaving - settings={this.state.current.video} + settings={this.state.current.dataSaving} handleUpdateSettings={this.handleUpdateSettings} /> </TabPanel> diff --git a/bigbluebutton-html5/imports/ui/components/settings/container.jsx b/bigbluebutton-html5/imports/ui/components/settings/container.jsx index 5c998c84c1a280089ab524d990791f764b3851bd..0663334319a4d3629b5a406b70e396d4975e0a6b 100644 --- a/bigbluebutton-html5/imports/ui/components/settings/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/container.jsx @@ -17,7 +17,7 @@ const SettingsContainer = props => ( export default withRouter(withTracker(() => ({ audio: SettingsService.audio, - video: SettingsService.video, + dataSaving: SettingsService.dataSaving, application: SettingsService.application, cc: SettingsService.cc, participants: SettingsService.participants, diff --git a/bigbluebutton-html5/imports/ui/components/settings/submenus/dataSaving/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/submenus/data-saving/component.jsx similarity index 84% rename from bigbluebutton-html5/imports/ui/components/settings/submenus/dataSaving/component.jsx rename to bigbluebutton-html5/imports/ui/components/settings/submenus/data-saving/component.jsx index a15ea19a6c56a997da0e9c3c617ddd0281a01270..eee6e84327b8c75a9e7afe2be034634e9711d57a 100644 --- a/bigbluebutton-html5/imports/ui/components/settings/submenus/dataSaving/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/settings/submenus/data-saving/component.jsx @@ -7,19 +7,19 @@ import { styles } from '../styles'; const intlMessages = defineMessages({ dataSavingLabel: { - id: 'app.settings.dataSaving.label', + id: 'app.settings.dataSavingTab.label', description: 'label for data savings tab', }, webcamLabel: { - id: 'app.settings.dataSaving.webcam', + id: 'app.settings.dataSavingTab.webcam', description: 'webcam toggle', }, screenShareLabel: { - id: 'app.settings.dataSaving.screenShare', + id: 'app.settings.dataSavingTab.screenShare', description: 'screenshare toggle', }, dataSavingDesc: { - id: 'app.settings.dataSaving.description', + id: 'app.settings.dataSavingTab.description', description: 'description of data savings tab', }, }); @@ -29,13 +29,15 @@ class DataSaving extends BaseMenu { super(props); this.state = { - settingsName: 'video', + settingsName: 'dataSaving', settings: props.settings, }; } render() { const { intl } = this.props; + const { viewParticipantsWebcams, viewScreenshare } = this.state.settings; + return ( <div className={styles.tabContent}> <div className={styles.header}> @@ -55,7 +57,7 @@ class DataSaving extends BaseMenu { <div className={cx(styles.formElement, styles.pullContentRight)}> <Toggle icons={false} - defaultChecked={!this.state.settings.viewParticipantsWebcams} + defaultChecked={!viewParticipantsWebcams} onChange={() => this.handleToggle('viewParticipantsWebcams')} ariaLabelledBy="webcamToggle" ariaLabel={intl.formatMessage(intlMessages.webcamLabel)} @@ -75,8 +77,8 @@ class DataSaving extends BaseMenu { <div className={cx(styles.formElement, styles.pullContentRight)}> <Toggle icons={false} - defaultChecked={false} - onChange={() => this.handleToggle('')} + defaultChecked={!viewScreenshare} + onChange={() => this.handleToggle('viewScreenshare')} ariaLabelledBy="screenShare" ariaLabel="screenShare" /> diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx b/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx index b3d0728970f70963d87012e0b48f5a12f03df06f..5e598eabac56f87502d2f7f1919a9e59c5052df6 100644 --- a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx @@ -16,7 +16,7 @@ export default withTracker((params) => { const isWaitingResponse = VideoService.isWaitingResponse(); const isConnected = VideoService.isConnected(); - const videoSettings = Settings.video; + const videoSettings = Settings.dataSaving; const enableShare = !videoSettings.viewParticipantsWebcams; const meeting = Meetings.findOne({ meetingId: Auth.meetingID }); const LockCam = meeting.lockSettingsProp ? meeting.lockSettingsProp.disableCam : false; diff --git a/bigbluebutton-html5/imports/ui/services/settings/index.js b/bigbluebutton-html5/imports/ui/services/settings/index.js index 97d8940be2471b61471b4835a5d20c0101bf7f75..c6d76c674d8b14386abcee36f681cf26715f6b26 100644 --- a/bigbluebutton-html5/imports/ui/services/settings/index.js +++ b/bigbluebutton-html5/imports/ui/services/settings/index.js @@ -7,6 +7,7 @@ const SETTINGS = [ 'video', 'cc', 'participants', + 'dataSaving', ]; class Settings { diff --git a/bigbluebutton-html5/private/config/settings-development.json b/bigbluebutton-html5/private/config/settings-development.json index 5a4ee8d4dcf7d8a758e7f65c9f7d521705b03382..95287c63754e1adfa536a4d9424b06aade3a4792 100644 --- a/bigbluebutton-html5/private/config/settings-development.json +++ b/bigbluebutton-html5/private/config/settings-development.json @@ -25,8 +25,9 @@ "inputDeviceId": "undefined", "outputDeviceId": "undefined" }, - "video": { - "viewParticipantsWebcams": true + "dataSaving": { + "viewParticipantsWebcams": true, + "viewScreenshare": true }, "cc": { "backgroundColor": "#FFFFFF", diff --git a/bigbluebutton-html5/private/config/settings-production.json b/bigbluebutton-html5/private/config/settings-production.json index 44816c1096aa84e6d7e4b0a5c4cbb79114626a93..6960df6641165ff2c586bfb0c09ae8675b12d425 100644 --- a/bigbluebutton-html5/private/config/settings-production.json +++ b/bigbluebutton-html5/private/config/settings-production.json @@ -25,8 +25,9 @@ "inputDeviceId": "undefined", "outputDeviceId": "undefined" }, - "video": { - "viewParticipantsWebcams": true + "dataSaving": { + "viewParticipantsWebcams": true, + "viewScreenshare": true }, "cc": { "backgroundColor": "#FFFFFF", diff --git a/bigbluebutton-html5/private/locales/en.json b/bigbluebutton-html5/private/locales/en.json index b57fd1900196b42ef4c53494c340136bd56d620d..60deaf6428c2f6e6c66ad80f59b92addf3dd072d 100755 --- a/bigbluebutton-html5/private/locales/en.json +++ b/bigbluebutton-html5/private/locales/en.json @@ -171,10 +171,10 @@ "app.settings.main.cancel.label.description": "Discards the changes and closes the settings menu", "app.settings.main.save.label": "Save", "app.settings.main.save.label.description": "Saves the changes and closes the settings menu", - "app.settings.dataSaving.label": "Data Savings", - "app.settings.dataSaving.webcam": "Disable Webcams", - "app.settings.dataSaving.screenShare": "Disable Desktop Sharing", - "app.settings.dataSaving.description": "To save your bandwidth adjust what's currently being displayed.", + "app.settings.dataSavingTab.label": "Data Savings", + "app.settings.dataSavingTab.webcam": "Disable Webcams", + "app.settings.dataSavingTab.screenShare": "Disable Desktop Sharing", + "app.settings.dataSavingTab.description": "To save your bandwidth adjust what's currently being displayed.", "app.actionsBar.actionsDropdown.actionsLabel": "Actions", "app.actionsBar.actionsDropdown.presentationLabel": "Upload a presentation", "app.actionsBar.actionsDropdown.initPollLabel": "Initiate a poll",