Browse Source

ref(ChatRoom): move emit remote stream added

There's no reason to involve the ChatRoom directly into the generation
of remote stream added event. It merely provides some info carried in
the presence about muted state etc.
master
paweldomas 9 years ago
parent
commit
67cc2f3ea3
2 changed files with 62 additions and 26 deletions
  1. 44
    24
      modules/xmpp/ChatRoom.js
  2. 18
    2
      modules/xmpp/JingleSessionPC.js

+ 44
- 24
modules/xmpp/ChatRoom.js View File

746
         this.sendPresence();
746
         this.sendPresence();
747
     }
747
     }
748
 
748
 
749
-    remoteTrackAdded (data) {
749
+    /**
750
+     * An object that carries the info portion about specific media type
751
+     * advertised by participant in MUC presence.
752
+     * @typedef {Object} MediaPresenceInfo
753
+     * @property {boolean} muted indicates if the media is currently muted
754
+     * @property {VideoType|undefined} videoType the type of the video if applicable
755
+     */
756
+    /**
757
+     * Obtains the info about given media advertised in the MUC presence of
758
+     * the participant identified by the given MUC JID.
759
+     * @param {string} peerjid the MUC jid of the participant for whom
760
+     * {@link MediaPresenceInfo} will be obtained.
761
+     * @param {MediaType} mediaType the type of the media for which presence
762
+     * info will be obtained.
763
+     * @return {MediaPresenceInfo} presenceInfo an object with media presence
764
+     * info or <tt>null</tt> either if there is no presence available for given
765
+     * JID or if the media type given is invalid.
766
+     */
767
+    getMediaPresenceInfo (peerjid, mediaType) {
750
         // Will figure out current muted status by looking up owner's presence
768
         // Will figure out current muted status by looking up owner's presence
751
-        var pres = this.lastPresences[data.owner];
752
-        if(pres) {
753
-            var mediaType = data.mediaType;
754
-            var mutedNode = null;
755
-            if (mediaType === MediaType.AUDIO) {
756
-                mutedNode = filterNodeFromPresenceJSON(pres, "audiomuted");
757
-            } else if (mediaType === MediaType.VIDEO) {
758
-                mutedNode = filterNodeFromPresenceJSON(pres, "videomuted");
759
-                var videoTypeNode = filterNodeFromPresenceJSON(pres, "videoType");
760
-                if(videoTypeNode
761
-                    && videoTypeNode.length > 0
762
-                    && videoTypeNode[0])
763
-                    data.videoType = videoTypeNode[0]["value"];
764
-            } else {
765
-                logger.warn("Unsupported media type: " + mediaType);
766
-                data.muted = null;
767
-            }
768
-
769
-            if (mutedNode) {
770
-                data.muted = mutedNode.length > 0 &&
771
-                             mutedNode[0] &&
772
-                             mutedNode[0]["value"] === "true";
769
+        const pres = this.lastPresences[peerjid];
770
+        if (!pres) {
771
+            // No presence available
772
+            return null;
773
+        }
774
+        const data = {
775
+            muted: false, // unmuted by default
776
+            videoType: undefined // no video type by default
777
+        };
778
+        let mutedNode = null;
779
+
780
+        if (mediaType === MediaType.AUDIO) {
781
+            mutedNode = filterNodeFromPresenceJSON(pres, "audiomuted");
782
+        } else if (mediaType === MediaType.VIDEO) {
783
+            mutedNode = filterNodeFromPresenceJSON(pres, "videomuted");
784
+            let videoTypeNode = filterNodeFromPresenceJSON(pres, "videoType");
785
+
786
+            if(videoTypeNode.length > 0) {
787
+                data.videoType = videoTypeNode[0]["value"];
773
             }
788
             }
789
+        } else {
790
+            logger.error("Unsupported media type: " + mediaType);
791
+            return null;
774
         }
792
         }
775
 
793
 
776
-        this.eventEmitter.emit(XMPPEvents.REMOTE_TRACK_ADDED, data);
794
+        data.muted = mutedNode.length > 0 && mutedNode[0]["value"] === "true";
795
+
796
+        return data;
777
     }
797
     }
778
 
798
 
779
     /**
799
     /**

+ 18
- 2
modules/xmpp/JingleSessionPC.js View File

1326
         track: track,
1326
         track: track,
1327
         mediaType: track.kind, /* 'audio' or 'video' */
1327
         mediaType: track.kind, /* 'audio' or 'video' */
1328
         owner: undefined, /* to be determined below */
1328
         owner: undefined, /* to be determined below */
1329
-        muted: null /* will be set in the ChatRoom */
1329
+        muted: null /* will be obtained from MUC presence */,
1330
+        videoType: undefined /* obtained from MUC presence if video */
1330
     };
1331
     };
1331
     try{
1332
     try{
1332
         // look up an associated JID for a stream id
1333
         // look up an associated JID for a stream id
1368
         }
1369
         }
1369
         jitsiTrackAddedEvent.ssrc = thessrc;
1370
         jitsiTrackAddedEvent.ssrc = thessrc;
1370
 
1371
 
1371
-        this.room.remoteTrackAdded(jitsiTrackAddedEvent);
1372
+        const streamPresenceInfo
1373
+            = this.room.getMediaPresenceInfo(
1374
+                    jitsiTrackAddedEvent.owner,
1375
+                    jitsiTrackAddedEvent.mediaType);
1376
+
1377
+        if (streamPresenceInfo) {
1378
+            jitsiTrackAddedEvent.muted = streamPresenceInfo.muted;
1379
+            jitsiTrackAddedEvent.videoType = streamPresenceInfo.videoType;
1380
+        } else {
1381
+            logger.warn(
1382
+                "No presence info available for: "
1383
+                    + jitsiTrackAddedEvent.owner);
1384
+        }
1385
+
1386
+        this.room.eventEmitter.emit(
1387
+            XMPPEvents.REMOTE_TRACK_ADDED, jitsiTrackAddedEvent);
1372
     } catch (error) {
1388
     } catch (error) {
1373
         GlobalOnErrorHandler.callErrorHandler(error);
1389
         GlobalOnErrorHandler.callErrorHandler(error);
1374
     }
1390
     }

Loading…
Cancel
Save