diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js index f0e1510103404819337991d84ff6bdc64933226a..1c4d79bcb17203ffc856ee8265174b3d38d7b723 100644 --- a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js +++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js @@ -1,5 +1,5 @@ import { check } from 'meteor/check'; -import removeMeeting from '../modifiers/removeMeeting'; +import meetingHasEnded from '../modifiers/meetingHasEnded'; import Meetings from '/imports/api/meetings'; import Breakouts from '/imports/api/breakouts'; @@ -22,5 +22,5 @@ export default function handleMeetingEnd({ body }, meetingId) { }, }); - return setTimeout(() => removeMeeting(meetingId), 10000); + return setTimeout(() => meetingHasEnded(meetingId), 1000); } diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/removeMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js similarity index 96% rename from bigbluebutton-html5/imports/api/meetings/server/modifiers/removeMeeting.js rename to bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js index f75c067da62b45bdb1f86b67b9f7236e52b44432..2ecd5d34b4bc2c242304ab15f4aea261e55ea97a 100755 --- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/removeMeeting.js +++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js @@ -13,7 +13,7 @@ import clearPresentationPods from '/imports/api/presentation-pods/server/modifie import clearVoiceUsers from '/imports/api/voice-users/server/modifiers/clearVoiceUsers'; -export default function removeMeeting(meetingId) { +export default function meetingHasEnded(meetingId) { return Meetings.remove({ meetingId }, () => { clearCaptions(meetingId); clearGroupChat(meetingId); diff --git a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js index 8be50a07688d3c48df861ee01bf3fa48a6624d83..c9b81dc807504f728af692164d67ca14341e071e 100644 --- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js +++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js @@ -4,11 +4,11 @@ import VoiceUsers from '/imports/api/voice-users'; export default function clearVoiceUser(meetingId) { if (meetingId) { return VoiceUsers.remove({ meetingId }, () => { - Logger.info(`Cleared clearVoiceUser (${meetingId})`); + Logger.info(`Cleared VoiceUsers in (${meetingId})`); }); } return VoiceUsers.remove({}, () => { - Logger.info('Cleared clearVoiceUser (all)'); + Logger.info('Cleared VoiceUsers in all meetings'); }); } diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx index d0df5f15c51d3d2bc374baa4aea7319d0f397d4f..fcd25ba732bc65b2e38e1e0fe2b3f72b05244525 100755 --- a/bigbluebutton-html5/imports/startup/client/base.jsx +++ b/bigbluebutton-html5/imports/startup/client/base.jsx @@ -29,14 +29,13 @@ const propTypes = { subscriptionsReady: PropTypes.bool.isRequired, locale: PropTypes.string, approved: PropTypes.bool, - meetingIsEnded: PropTypes.bool, + meetingHasEnded: PropTypes.bool.isRequired, meetingExist: PropTypes.bool, }; const defaultProps = { locale: undefined, approved: undefined, - meetingIsEnded: false, meetingExist: false, }; @@ -65,7 +64,6 @@ class Base extends Component { this.state = { loading: false, meetingExisted: false, - isBreakout: false, }; this.updateLoadingState = this.updateLoadingState.bind(this); @@ -86,6 +84,7 @@ class Base extends Component { meteorIsConnected, subscriptionsReady, } = this.props; + const { loading, meetingExisted, @@ -105,7 +104,7 @@ class Base extends Component { } // In case the meeting delayed to load - if (!meetingExist) return; + if (!subscriptionsReady || !meetingExist) return; if (approved && loading) this.updateLoadingState(false); @@ -135,14 +134,18 @@ class Base extends Component { renderByState() { const { updateLoadingState } = this; const stateControls = { updateLoadingState }; - const { loading, isBreakout } = this.state; + const { loading } = this.state; const codeError = Session.get('codeError'); const { ejected, subscriptionsReady, - meetingIsEnded, + meetingHasEnded, + meetingIsBreakout, } = this.props; - const isMeetingBreakout = AppService.meetingIsBreakout(); + + if ((loading || !subscriptionsReady) && !meetingHasEnded) { + return (<LoadingScreen>{loading}</LoadingScreen>); + } if (ejected && ejected.ejectedReason) { const { ejectedReason } = ejected; @@ -150,21 +153,17 @@ class Base extends Component { return (<MeetingEnded code={ejectedReason} />); } - if (isMeetingBreakout && !isBreakout) this.setState({ isBreakout: true }); + if (meetingHasEnded && meetingIsBreakout) window.close(); - if (meetingIsEnded && !isBreakout) { + if (meetingHasEnded && !meetingIsBreakout) { AudioManager.exitAudio(); return (<MeetingEnded code={codeError} />); } - if (codeError && !meetingIsEnded) { + if (codeError && !meetingHasEnded) { logger.error({ logCode: 'startup_client_usercouldnotlogin_error' }, `User could not log in HTML5, hit ${codeError}`); return (<ErrorScreen code={codeError} />); } - - if ((loading || !subscriptionsReady) && !meetingIsEnded) { - return (<LoadingScreen>{loading}</LoadingScreen>); - } // this.props.annotationsHandler.stop(); return (<AppContainer {...this.props} baseControls={stateControls} />); } @@ -278,7 +277,8 @@ const BaseContainer = withTracker(() => { User, meteorIsConnected: Meteor.status().connected, meetingExist: !!Meetings.find({ meetingId }).count(), - meetingIsEnded: !!meeting && meeting.meetingEnded, + meetingHasEnded: !!meeting && meeting.meetingEnded, + meetingIsBreakout: AppService.meetingIsBreakout(), }; })(Base); diff --git a/bigbluebutton-html5/imports/ui/components/app/container.jsx b/bigbluebutton-html5/imports/ui/components/app/container.jsx index e8de6c63016e89ec3b92f3d69a99e736e5e06b0a..16e0b3d2038e5a2fe93c43fb87b4d6f0ebd10159 100755 --- a/bigbluebutton-html5/imports/ui/components/app/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/app/container.jsx @@ -4,7 +4,6 @@ import { defineMessages, injectIntl } from 'react-intl'; import PropTypes from 'prop-types'; import Auth from '/imports/ui/services/auth'; import Users from '/imports/api/users'; -import Meetings from '/imports/api/meetings'; import ClosedCaptionsContainer from '/imports/ui/components/closed-captions/container'; import getFromUserSettings from '/imports/ui/services/users-settings'; @@ -66,7 +65,6 @@ const AppContainer = (props) => { export default injectIntl(withModalMounter(withTracker(({ intl, baseControls }) => { const currentUser = Users.findOne({ userId: Auth.userID }); - const meeting = Meetings.findOne({ meetingId: Auth.meetingID }); if (!currentUser.approved) { baseControls.updateLoadingState(intl.formatMessage(intlMessages.waitingApprovalMessage)); @@ -83,8 +81,6 @@ export default injectIntl(withModalMounter(withTracker(({ intl, baseControls }) }, }); - if (meeting && meeting.meetingEnded) window.close(); - return { closedCaption: getCaptionsStatus() ? <ClosedCaptionsContainer /> : null, fontSize: getFontSize(), diff --git a/bigbluebutton-html5/imports/ui/components/app/service.js b/bigbluebutton-html5/imports/ui/components/app/service.js index 88838245257379a667cb05f9ff7ef1aef5495614..156cd7ab05db37b517e74a966c1f612bdb3b0cfe 100644 --- a/bigbluebutton-html5/imports/ui/components/app/service.js +++ b/bigbluebutton-html5/imports/ui/components/app/service.js @@ -1,4 +1,5 @@ import Breakouts from '/imports/api/breakouts'; +import Meetings from '/imports/api/meetings'; import Settings from '/imports/ui/services/settings'; import Auth from '/imports/ui/services/auth/index'; @@ -14,9 +15,14 @@ const getFontSize = () => { const getBreakoutRooms = () => Breakouts.find().fetch(); +const getMeeting = () => { + const { meetingID } = Auth; + return Meetings.findOne({ meetingId: meetingID }); +}; + function meetingIsBreakout() { - const breakouts = getBreakoutRooms(); - return (breakouts && breakouts.some(b => b.breakoutId === Auth.meetingID)); + const meeting = getMeeting(); + return (meeting && meeting.meetingProp.isBreakout); } export { @@ -24,4 +30,5 @@ export { getFontSize, meetingIsBreakout, getBreakoutRooms, + getMeeting, }; diff --git a/bigbluebutton-html5/imports/ui/components/toast/container.jsx b/bigbluebutton-html5/imports/ui/components/toast/container.jsx index dcd1f72a6b22fedec2a67b3ba19c07233c4c0af8..63ab8ac9b9d7d11b6d0812cd5a928a01092262a1 100755 --- a/bigbluebutton-html5/imports/ui/components/toast/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/toast/container.jsx @@ -81,6 +81,6 @@ export default injectIntl(injectNotify(withTracker(({ notify, intl }) => { hideProgressBar: false, closeOnClick: true, pauseOnHover: true, - meeting: Meetings.find({ meetingId }).fetch(), + meeting: Meetings.findOne({ meetingId }), }; })(ToastContainer)));