jiti-meet/react/features/remote-control/subscriber.ts

54 lines
1.7 KiB
TypeScript
Raw Normal View History

import {
getParticipantById,
getVirtualScreenshareParticipantByOwnerId,
getVirtualScreenshareParticipantOwnerId,
isScreenShareParticipant
} from '../base/participants/functions';
import StateListenerRegistry from '../base/redux/StateListenerRegistry';
2020-11-14 04:09:25 +00:00
import { pause, resume } from './actions';
2020-11-14 04:09:25 +00:00
/**
* Listens for large video participant ID changes.
*/
StateListenerRegistry.register(
/* selector */ state => {
const { participantId = '' } = state['features/large-video'];
2020-11-14 04:09:25 +00:00
const { controller } = state['features/remote-control'];
const { controlled } = controller;
if (!controlled) {
return undefined;
}
const participant = getParticipantById(state, participantId);
if (isScreenShareParticipant(participant)) {
// multistream support is enabled and the user has selected the desktop sharing thumbnail.
const id = getVirtualScreenshareParticipantOwnerId(participantId);
return id === controlled;
}
const virtualParticipant = getVirtualScreenshareParticipantByOwnerId(state, participantId);
if (virtualParticipant) { // multistream is enabled and the user has selected the camera thumbnail.
return false;
}
2020-11-14 04:09:25 +00:00
return controlled === participantId;
},
/* listener */ (isControlledParticipantOnStage, { dispatch }) => {
if (isControlledParticipantOnStage === true) {
dispatch(resume());
} else if (isControlledParticipantOnStage === false) {
dispatch(pause());
}
// else {
// isControlledParticipantOnStage === undefined. Ignore!
// }
}
);