|
@@ -16,7 +16,6 @@ import mediaDeviceHelper from './modules/devices/mediaDeviceHelper';
|
16
|
16
|
|
17
|
17
|
import {reportError} from './modules/util/helpers';
|
18
|
18
|
|
19
|
|
-import UIErrors from './modules/UI/UIErrors';
|
20
|
19
|
import UIUtil from './modules/UI/util/UIUtil';
|
21
|
20
|
|
22
|
21
|
const ConnectionErrors = JitsiMeetJS.errors.connection;
|
|
@@ -42,7 +41,7 @@ let DSExternalInstallationInProgress = false;
|
42
|
41
|
/**
|
43
|
42
|
* Listens whether conference had been left from local user when we are trying
|
44
|
43
|
* to navigate away from current page.
|
45
|
|
- * @type {ConferenceLeftListener}
|
|
44
|
+ * @type {HangupConferenceLeftListener}
|
46
|
45
|
*/
|
47
|
46
|
let conferenceLeftListener = null;
|
48
|
47
|
|
|
@@ -220,50 +219,47 @@ function maybeRedirectToWelcomePage(showThankYou) {
|
220
|
219
|
}, 3000);
|
221
|
220
|
}
|
222
|
221
|
|
223
|
|
-/**
|
224
|
|
- * Executes connection.disconnect and shows the feedback dialog
|
225
|
|
- * @param {boolean} [requestFeedback=false] if user feedback should be requested
|
226
|
|
- * @returns Promise.
|
227
|
|
- */
|
228
|
|
-function disconnectAndShowFeedback(requestFeedback) {
|
229
|
|
- APP.UI.hideRingOverLay();
|
230
|
|
- connection.disconnect();
|
231
|
|
- APP.API.notifyConferenceLeft(APP.conference.roomName);
|
232
|
|
- let promise = (requestFeedback?
|
233
|
|
- APP.UI.requestFeedback(): Promise.resolve());
|
234
|
|
- promise.then(() => APP.API.notifyReadyToClose());
|
235
|
|
- return promise;
|
236
|
|
-}
|
237
|
222
|
|
238
|
223
|
/**
|
239
|
|
- * Listens for CONFERENCE_LEFT event so we can check whether it has finished.
|
240
|
|
- * The handler will be called once the conference had been left or if it
|
241
|
|
- * was already left when we are adding the handler.
|
|
224
|
+ * Listens for CONFERENCE_LEFT event after hangup function has been executed.
|
242
|
225
|
*/
|
243
|
|
-class ConferenceLeftListener {
|
|
226
|
+class HangupConferenceLeftListener {
|
244
|
227
|
/**
|
245
|
|
- * Creates ConferenceLeftListener and start listening for conference
|
246
|
|
- * failed event.
|
247
|
|
- * @param {Function} handler the function that will be called when
|
248
|
|
- * CONFERENCE_LEFT event is fired.
|
249
|
|
- * @param errCallback
|
|
228
|
+ * Creates HangupConferenceLeftListener and start listening for conference
|
|
229
|
+ * left event. On CONFERENCE_LEFT event calls should disconnect the user
|
|
230
|
+ * and maybe show the feedback dialog.
|
|
231
|
+ * @param {boolean} [requestFeedback=false] if user feedback should be
|
|
232
|
+ * requested
|
250
|
233
|
*/
|
251
|
|
- constructor(handler) {
|
252
|
|
- this.handler = handler;
|
|
234
|
+ constructor(requestFeedback) {
|
|
235
|
+ this.requestFeedback = requestFeedback;
|
253
|
236
|
room.on(ConferenceEvents.CONFERENCE_LEFT,
|
254
|
237
|
this._handleConferenceLeft.bind(this));
|
255
|
238
|
}
|
256
|
239
|
|
257
|
240
|
/**
|
258
|
|
- * Handles the conference left event, if we have a handler we invoke it.
|
|
241
|
+ * Handles the conference left event.
|
259
|
242
|
* @private
|
260
|
243
|
*/
|
261
|
244
|
_handleConferenceLeft() {
|
262
|
|
- this.handler()
|
263
|
|
- .then(maybeRedirectToWelcomePage)
|
264
|
|
- .catch(function(err){
|
265
|
|
- console.log(err);
|
266
|
|
- });
|
|
245
|
+ this._disconnectAndShowFeedback()
|
|
246
|
+ .then(() => {
|
|
247
|
+ APP.API.notifyReadyToClose();
|
|
248
|
+ maybeRedirectToWelcomePage();
|
|
249
|
+ }).catch(console.log);
|
|
250
|
+ }
|
|
251
|
+
|
|
252
|
+ /**
|
|
253
|
+ * Executes connection.disconnect and shows the feedback dialog
|
|
254
|
+ * @returns Promise.
|
|
255
|
+ * @private
|
|
256
|
+ */
|
|
257
|
+ _disconnectAndShowFeedback() {
|
|
258
|
+ APP.UI.hideRingOverLay();
|
|
259
|
+ connection.disconnect();
|
|
260
|
+ APP.API.notifyConferenceLeft(APP.conference.roomName);
|
|
261
|
+ return (this.requestFeedback) ?
|
|
262
|
+ APP.UI.requestFeedback() : Promise.resolve();
|
267
|
263
|
}
|
268
|
264
|
}
|
269
|
265
|
|
|
@@ -1780,30 +1776,13 @@ export default {
|
1780
|
1776
|
* requested
|
1781
|
1777
|
*/
|
1782
|
1778
|
hangup (requestFeedback = false) {
|
1783
|
|
- const errCallback = (err) => {
|
1784
|
|
- // If we want to break out the chain in our error handler, it needs
|
1785
|
|
- // to return a rejected promise. In the case of feedback request
|
1786
|
|
- // in progress it's important to not redirect to the welcome page
|
1787
|
|
- // (see below maybeRedirectToWelcomePage call).
|
1788
|
|
- if (err === UIErrors.FEEDBACK_REQUEST_IN_PROGRESS) {
|
1789
|
|
- return Promise.reject('Feedback request in progress.');
|
1790
|
|
- }
|
1791
|
|
- else {
|
1792
|
|
- console.error('Error occurred during hanging up: ', err);
|
1793
|
|
- return Promise.resolve();
|
1794
|
|
- }
|
1795
|
|
- };
|
1796
|
|
-
|
1797
|
|
- const disconnect = () => {
|
1798
|
|
- return disconnectAndShowFeedback(requestFeedback)
|
1799
|
|
- .catch(errCallback);
|
1800
|
|
- };
|
1801
|
|
-
|
1802
|
1779
|
if (!conferenceLeftListener) {
|
1803
|
1780
|
conferenceLeftListener
|
1804
|
|
- = new ConferenceLeftListener(disconnect, errCallback);
|
|
1781
|
+ = new HangupConferenceLeftListener(requestFeedback);
|
1805
|
1782
|
}
|
1806
|
1783
|
|
1807
|
|
- room.leave().catch(errCallback);
|
|
1784
|
+ //FIXME: Do something for the use case when we are not receiving
|
|
1785
|
+ // CONFERENCE_LEFT for some reason
|
|
1786
|
+ room.leave();
|
1808
|
1787
|
}
|
1809
|
1788
|
};
|