Преглед изворни кода

refactor(conference.js) hangup functionality

master
hristoterezov пре 8 година
родитељ
комит
7f24d14832
1 измењених фајлова са 33 додато и 54 уклоњено
  1. 33
    54
      conference.js

+ 33
- 54
conference.js Прегледај датотеку

@@ -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
 };

Loading…
Откажи
Сачувај