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

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.
tags/v0.0.2
paweldomas пре 9 година
родитељ
комит
67cc2f3ea3
2 измењених фајлова са 62 додато и 26 уклоњено
  1. 44
    24
      modules/xmpp/ChatRoom.js
  2. 18
    2
      modules/xmpp/JingleSessionPC.js

+ 44
- 24
modules/xmpp/ChatRoom.js Прегледај датотеку

@@ -746,34 +746,54 @@ export default class ChatRoom extends Listenable {
746 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 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 Прегледај датотеку

@@ -1326,7 +1326,8 @@ JingleSessionPC.prototype.remoteTrackAdded = function (stream, track) {
1326 1326
         track: track,
1327 1327
         mediaType: track.kind, /* 'audio' or 'video' */
1328 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 1332
     try{
1332 1333
         // look up an associated JID for a stream id
@@ -1368,7 +1369,22 @@ JingleSessionPC.prototype.remoteTrackAdded = function (stream, track) {
1368 1369
         }
1369 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 1388
     } catch (error) {
1373 1389
         GlobalOnErrorHandler.callErrorHandler(error);
1374 1390
     }

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