Procházet zdrojové kódy

Merge pull request #954 from jitsi/handle-conference-left

Waits for conference left event before navigating away from the page.
j8
Paweł Domas před 9 roky
rodič
revize
ae2ea4f421
2 změnil soubory, kde provedl 70 přidání a 8 odebrání
  1. 69
    7
      conference.js
  2. 1
    1
      modules/UI/UI.js

+ 69
- 7
conference.js Zobrazit soubor

@@ -39,6 +39,13 @@ let connectionIsInterrupted = false;
39 39
  */
40 40
 let DSExternalInstallationInProgress = false;
41 41
 
42
+/**
43
+ * Listens whether conference had been left from local user when we are trying
44
+ * to navigate away from current page.
45
+ * @type {ConferenceLeftListener}
46
+ */
47
+let conferenceLeftListener = null;
48
+
42 49
 import {VIDEO_CONTAINER_TYPE} from "./modules/UI/videolayout/VideoContainer";
43 50
 
44 51
 /**
@@ -255,7 +262,7 @@ function disconnectAndShowFeedback(requestFeedback) {
255 262
  * @param {boolean} [requestFeedback=false] if user feedback should be requested
256 263
  */
257 264
 function hangup (requestFeedback = false) {
258
-    const errCallback = (f, err) => {
265
+    const errCallback = (err) => {
259 266
 
260 267
         // If we want to break out the chain in our error handler, it needs
261 268
         // to return a rejected promise. In the case of feedback request
@@ -270,14 +277,69 @@ function hangup (requestFeedback = false) {
270 277
         }
271 278
     };
272 279
     const disconnect = disconnectAndShowFeedback.bind(null, requestFeedback);
280
+
281
+    if (!conferenceLeftListener)
282
+        conferenceLeftListener = new ConferenceLeftListener();
283
+
284
+    // Make sure that leave is resolved successfully and the set the handlers
285
+    // to be invoked once conference had been left
273 286
     APP.conference._room.leave()
274
-    .then(disconnect)
275
-    .catch(errCallback.bind(null, disconnect))
276
-    .then(maybeRedirectToWelcomePage)
277
-    .catch(function(err){
278
-            console.log(err);
279
-        });
287
+        .then(conferenceLeftListener.setHandler(disconnect, errCallback))
288
+        .catch(errCallback);
289
+}
280 290
 
291
+/**
292
+ * Listens for CONFERENCE_LEFT event so we can check whether it has finished.
293
+ * The handler will be called once the conference had been left or if it
294
+ * was already left when we are adding the handler.
295
+ */
296
+class ConferenceLeftListener {
297
+    /**
298
+     * Creates ConferenceLeftListener and start listening for conference
299
+     * failed event.
300
+     */
301
+    constructor() {
302
+        room.on(ConferenceEvents.CONFERENCE_LEFT,
303
+            this._handleConferenceLeft.bind(this));
304
+    }
305
+
306
+    /**
307
+     * Handles the conference left event, if we have a handler we invoke it.
308
+     * @private
309
+     */
310
+    _handleConferenceLeft() {
311
+        this.conferenceLeft = true;
312
+
313
+        if (this.handler)
314
+            this._handleLeave();
315
+    }
316
+
317
+    /**
318
+     * Sets the handlers. If we already left the conference invoke them.
319
+     * @param handler
320
+     * @param errCallback
321
+     */
322
+    setHandler (handler, errCallback) {
323
+        this.handler = handler;
324
+        this.errCallback = errCallback;
325
+
326
+        if (this.conferenceLeft)
327
+            this._handleLeave();
328
+    }
329
+
330
+    /**
331
+     * Invokes the handlers.
332
+     * @private
333
+     */
334
+    _handleLeave()
335
+    {
336
+        this.handler()
337
+            .catch(this.errCallback)
338
+            .then(maybeRedirectToWelcomePage)
339
+            .catch(function(err){
340
+                console.log(err);
341
+            });
342
+    }
281 343
 }
282 344
 
283 345
 /**

+ 1
- 1
modules/UI/UI.js Zobrazit soubor

@@ -1102,7 +1102,7 @@ UI.requestFeedback = function () {
1102 1102
     if (Feedback.isVisible())
1103 1103
         return Promise.reject(UIErrors.FEEDBACK_REQUEST_IN_PROGRESS);
1104 1104
     // Feedback has been submitted already.
1105
-    else if (Feedback.isSubmitted())
1105
+    else if (Feedback.isEnabled() && Feedback.isSubmitted())
1106 1106
         return Promise.resolve();
1107 1107
     else
1108 1108
         return new Promise(function (resolve, reject) {

Načítá se…
Zrušit
Uložit