peer-data/helpers/getPeersStreams.js

import { isEmptyObj } from '../../utils/helpers';
import MediaStream from '../../media-stream';

const hasPeerConnections = (peerConnections, hasMCU) => (hasMCU ? !!peerConnections.MCU.maps : !isEmptyObj(peerConnections));

const getSelfStreams = (streams) => {
  if (streams.userMedia) {
    return streams.userMedia;
  }
  return null;
};

const getSelfScreen = (streams) => {
  if (streams.screenshare) {
    return streams.screenshare;
  }
  return null;
};

/**
 * @description Function that gets the list of connected Peers Streams in the Room.
 * @param {SkylinkState} roomState
 * @param {boolean} [includeSelf=true] - The flag if self streams are included.
 * @return {Object}
 * @memberOf PeerDataHelpers
 */
const getPeersStreams = (roomState, includeSelf = true) => {
  const listOfPeersStreams = {};
  const {
    peerConnections,
    user,
    streams,
    hasMCU,
  } = roomState;

  if (user && user.sid && includeSelf) {
    const selfStreams = getSelfStreams(streams);
    const selfScreen = getSelfScreen(streams);
    listOfPeersStreams[user.sid] = selfStreams || selfScreen ? {} : null;

    if (selfStreams) {
      Object.keys(selfStreams).forEach((streamId) => {
        listOfPeersStreams[user.sid].isSelf = true;
        listOfPeersStreams[user.sid][streamId] = selfStreams[streamId].stream;
      });
    }

    if (selfScreen) {
      listOfPeersStreams[user.sid].isSelf = true;
      listOfPeersStreams[user.sid][selfScreen.id] = selfScreen;
    }
  }

  if (hasPeerConnections(peerConnections, hasMCU)) {
    const listOfPeers = hasMCU ? Object.keys(peerConnections.MCU.maps) : Object.keys(peerConnections);
    for (let i = 0; i < listOfPeers.length; i += 1) {
      listOfPeersStreams[listOfPeers[i]] = {};
      const remoteStreams = MediaStream.retrieveRemoteStreams(roomState, listOfPeers[i]);
      remoteStreams.forEach((stream) => {
        listOfPeersStreams[listOfPeers[i]][stream.id] = stream;
      });
    }
  }

  return isEmptyObj(listOfPeersStreams) ? null : listOfPeersStreams;
};

export default getPeersStreams;