|
|
@@ -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
|
/**
|