media-stream/helpers/onRemoteTrackAdded.js

import { dispatchEvent } from '../../utils/skylinkEventManager';
import { onIncomingStream, peerUpdated, onIncomingScreenStream } from '../../skylink-events/index';
import PeerData from '../../peer-data/index';

/**
 * Function that handles the <code>RTCPeerConnection.ontrack</code> event on remote stream added.
 * @param {MediaStream} stream - {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStream}
 * @param {SkylinkState} currentRoomState - Current room state
 * @param {String} targetMid - The mid of the target peer
 * @param {boolean} isScreensharing - The flag if incoming stream is a screenshare stream.
 * @param {boolean} isVideo - The flag if incoming stream has a video track.
 * @param {boolean} isAudio- The flag if incoming stream has an audio track.
 * @memberOf MediaStreamHelpers
 * @fires onIncomingStream
 * @fires peerUpdated
 * @private
 */
const onRemoteTrackAdded = (stream, currentRoomState, targetMid, isScreensharing, isVideo, isAudio) => {
  const { user, hasMCU, room } = currentRoomState;
  const dispatchOnIncomingStream = (detail) => { dispatchEvent(onIncomingStream(detail)); };
  const dispatchOnIncomingScreenStream = (detail) => {
    // eslint-disable-next-line no-param-reassign
    detail.isReplace = false;
    dispatchEvent(onIncomingScreenStream(detail));
  };
  const methods = { dispatchOnIncomingStream, dispatchOnIncomingScreenStream };
  const dispatch = { methodName: isScreensharing ? 'dispatchOnIncomingScreenStream' : 'dispatchOnIncomingStream' };
  const detail = {
    stream,
    peerId: targetMid,
    room,
    isSelf: hasMCU ? (targetMid === user.sid || false) : false,
    peerInfo: PeerData.getPeerInfo(targetMid, room),
    streamId: stream.id,
    isVideo,
    isAudio,
  };

  methods[dispatch.methodName](detail);

  dispatchEvent(peerUpdated({
    peerId: targetMid,
    peerInfo: PeerData.getPeerInfo(targetMid, room),
    isSelf: hasMCU ? (targetMid === user.sid || false) : false,
    room,
  }));
};

export default onRemoteTrackAdded;