From faa0b350325dab5ec71f64831fdc4b0d73d388b6 Mon Sep 17 00:00:00 2001
From: Joao Siebel <joaos_desenv@imdt.com.br>
Date: Tue, 2 Jun 2020 16:47:26 -0300
Subject: [PATCH] Show correct screen when user leave meeting. close #9710

---
 bigbluebutton-html5/imports/startup/client/base.jsx | 13 +++++++------
 .../ui/components/error-screen/component.jsx        |  8 +++++---
 .../ui/components/meeting-ended/component.jsx       |  8 ++++----
 3 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx
index 6e339759b0..49230d326a 100755
--- a/bigbluebutton-html5/imports/startup/client/base.jsx
+++ b/bigbluebutton-html5/imports/startup/client/base.jsx
@@ -7,7 +7,6 @@ import ErrorScreen from '/imports/ui/components/error-screen/component';
 import MeetingEnded from '/imports/ui/components/meeting-ended/component';
 import LoadingScreen from '/imports/ui/components/loading-screen/component';
 import Settings from '/imports/ui/services/settings';
-import AudioManager from '/imports/ui/services/audio-manager';
 import logger from '/imports/startup/client/logger';
 import Users from '/imports/api/users';
 import { Session } from 'meteor/session';
@@ -161,8 +160,8 @@ class Base extends Component {
     const { updateLoadingState } = this;
     const stateControls = { updateLoadingState };
     const { loading } = this.state;
-    const codeError = Session.get('codeError');
     const {
+      codeError,
       ejected,
       meetingExist,
       meetingHasEnded,
@@ -176,14 +175,12 @@ class Base extends Component {
     }
 
     if (ejected) {
-      AudioManager.exitAudio();
       return (<MeetingEnded code="403" />);
     }
 
     if (meetingHasEnded && meetingIsBreakout) window.close();
 
     if (((meetingHasEnded && !meetingIsBreakout)) || (codeError && (User && User.loggedOut))) {
-      AudioManager.exitAudio();
       return (<MeetingEnded code={codeError} />);
     }
 
@@ -191,10 +188,11 @@ class Base extends Component {
       // 680 is set for the codeError when the user requests a logout
       if (codeError !== '680') {
         logger.error({ logCode: 'startup_client_usercouldnotlogin_error' }, `User could not log in HTML5, hit ${codeError}`);
+        return (<ErrorScreen code={codeError} />);
       }
-      return (<ErrorScreen code={codeError} />);
+      return (<MeetingEnded code={codeError} />);
     }
-    // this.props.annotationsHandler.stop();
+
     return (<AppContainer {...this.props} baseControls={stateControls} />);
   }
 
@@ -364,6 +362,8 @@ const BaseContainer = withTracker(() => {
     Session.set('openPanel', '');
   }
 
+  const codeError = Session.get('codeError');
+
   return {
     approved,
     ejected,
@@ -379,6 +379,7 @@ const BaseContainer = withTracker(() => {
     meetingIsBreakout: AppService.meetingIsBreakout(),
     subscriptionsReady: Session.get('subscriptionsReady'),
     loggedIn,
+    codeError,
   };
 })(Base);
 
diff --git a/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx b/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx
index bf8ddcee4b..6056a7c942 100644
--- a/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx
@@ -1,10 +1,11 @@
-import React from 'react';
+import React, { PureComponent } from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl } from 'react-intl';
 import { Meteor } from 'meteor/meteor';
+import { Session } from 'meteor/session';
 import Button from '/imports/ui/components/button/component';
 import logoutRouteHandler from '/imports/utils/logoutRouteHandler';
-import { Session } from 'meteor/session';
+import AudioManager from '/imports/ui/services/audio-manager';
 import { styles } from './styles';
 
 const intlMessages = defineMessages({
@@ -45,8 +46,9 @@ const defaultProps = {
   code: 500,
 };
 
-class ErrorScreen extends React.PureComponent {
+class ErrorScreen extends PureComponent {
   componentDidMount() {
+    AudioManager.exitAudio();
     Meteor.disconnect();
   }
 
diff --git a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx
index 19682614b0..59c5257260 100755
--- a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { PureComponent } from 'react';
 import PropTypes from 'prop-types';
 import { defineMessages, injectIntl } from 'react-intl';
 import { Meteor } from 'meteor/meteor';
@@ -10,6 +10,7 @@ import Rating from './rating/component';
 import { styles } from './styles';
 import logger from '/imports/startup/client/logger';
 import Users from '/imports/api/users';
+import AudioManager from '/imports/ui/services/audio-manager';
 
 const intlMessage = defineMessages({
   410: {
@@ -89,7 +90,7 @@ const propTypes = {
   code: PropTypes.string.isRequired,
 };
 
-class MeetingEnded extends React.PureComponent {
+class MeetingEnded extends PureComponent {
   static getComment() {
     const textarea = document.getElementById('feedbackComment');
     const comment = textarea.value;
@@ -110,9 +111,8 @@ class MeetingEnded extends React.PureComponent {
     this.setSelectedStar = this.setSelectedStar.bind(this);
     this.sendFeedback = this.sendFeedback.bind(this);
     this.shouldShowFeedback = getFromUserSettings('bbb_ask_for_feedback_on_logout', Meteor.settings.public.app.askForFeedbackOnLogout);
-  }
 
-  componentDidMount() {
+    AudioManager.exitAudio();
     Meteor.disconnect();
   }
 
-- 
GitLab