Skip to content

Commit

Permalink
ref(ChatRoom): move emit remote stream added
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
paweldomas committed Feb 28, 2017
1 parent d904edb commit 67cc2f3
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 26 deletions.
68 changes: 44 additions & 24 deletions modules/xmpp/ChatRoom.js
Original file line number Diff line number Diff line change
Expand Up @@ -746,34 +746,54 @@ export default class ChatRoom extends Listenable {
this.sendPresence();
}

remoteTrackAdded (data) {
/**
* An object that carries the info portion about specific media type
* advertised by participant in MUC presence.
* @typedef {Object} MediaPresenceInfo
* @property {boolean} muted indicates if the media is currently muted
* @property {VideoType|undefined} videoType the type of the video if applicable
*/
/**
* Obtains the info about given media advertised in the MUC presence of
* the participant identified by the given MUC JID.
* @param {string} peerjid the MUC jid of the participant for whom
* {@link MediaPresenceInfo} will be obtained.
* @param {MediaType} mediaType the type of the media for which presence
* info will be obtained.
* @return {MediaPresenceInfo} presenceInfo an object with media presence
* info or <tt>null</tt> either if there is no presence available for given
* JID or if the media type given is invalid.
*/
getMediaPresenceInfo (peerjid, mediaType) {
// Will figure out current muted status by looking up owner's presence
var pres = this.lastPresences[data.owner];
if(pres) {
var mediaType = data.mediaType;
var mutedNode = null;
if (mediaType === MediaType.AUDIO) {
mutedNode = filterNodeFromPresenceJSON(pres, "audiomuted");
} else if (mediaType === MediaType.VIDEO) {
mutedNode = filterNodeFromPresenceJSON(pres, "videomuted");
var videoTypeNode = filterNodeFromPresenceJSON(pres, "videoType");
if(videoTypeNode
&& videoTypeNode.length > 0
&& videoTypeNode[0])
data.videoType = videoTypeNode[0]["value"];
} else {
logger.warn("Unsupported media type: " + mediaType);
data.muted = null;
}

if (mutedNode) {
data.muted = mutedNode.length > 0 &&
mutedNode[0] &&
mutedNode[0]["value"] === "true";
const pres = this.lastPresences[peerjid];
if (!pres) {
// No presence available
return null;
}
const data = {
muted: false, // unmuted by default
videoType: undefined // no video type by default
};
let mutedNode = null;

if (mediaType === MediaType.AUDIO) {
mutedNode = filterNodeFromPresenceJSON(pres, "audiomuted");
} else if (mediaType === MediaType.VIDEO) {
mutedNode = filterNodeFromPresenceJSON(pres, "videomuted");
let videoTypeNode = filterNodeFromPresenceJSON(pres, "videoType");

if(videoTypeNode.length > 0) {
data.videoType = videoTypeNode[0]["value"];
}
} else {
logger.error("Unsupported media type: " + mediaType);
return null;
}

this.eventEmitter.emit(XMPPEvents.REMOTE_TRACK_ADDED, data);
data.muted = mutedNode.length > 0 && mutedNode[0]["value"] === "true";

return data;
}

/**
Expand Down
20 changes: 18 additions & 2 deletions modules/xmpp/JingleSessionPC.js
Original file line number Diff line number Diff line change
Expand Up @@ -1326,7 +1326,8 @@ JingleSessionPC.prototype.remoteTrackAdded = function (stream, track) {
track: track,
mediaType: track.kind, /* 'audio' or 'video' */
owner: undefined, /* to be determined below */
muted: null /* will be set in the ChatRoom */
muted: null /* will be obtained from MUC presence */,
videoType: undefined /* obtained from MUC presence if video */
};
try{
// look up an associated JID for a stream id
Expand Down Expand Up @@ -1368,7 +1369,22 @@ JingleSessionPC.prototype.remoteTrackAdded = function (stream, track) {
}
jitsiTrackAddedEvent.ssrc = thessrc;

this.room.remoteTrackAdded(jitsiTrackAddedEvent);
const streamPresenceInfo
= this.room.getMediaPresenceInfo(
jitsiTrackAddedEvent.owner,
jitsiTrackAddedEvent.mediaType);

if (streamPresenceInfo) {
jitsiTrackAddedEvent.muted = streamPresenceInfo.muted;
jitsiTrackAddedEvent.videoType = streamPresenceInfo.videoType;
} else {
logger.warn(
"No presence info available for: "
+ jitsiTrackAddedEvent.owner);
}

this.room.eventEmitter.emit(
XMPPEvents.REMOTE_TRACK_ADDED, jitsiTrackAddedEvent);
} catch (error) {
GlobalOnErrorHandler.callErrorHandler(error);
}
Expand Down

0 comments on commit 67cc2f3

Please sign in to comment.