snapshot of https://github.com/jitsi/jitsi-meet.git @ fd1749dd28f4138aa80234fc7f311b19aaffa0e7 (2026-09-15)
This commit is contained in:
122
react/features/base/testing/functions.ts
Normal file
122
react/features/base/testing/functions.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import { IReduxState, IStore } from '../../app/types';
|
||||
import { isTrackStreamingStatusActive } from '../../connection-indicator/functions';
|
||||
import { handleToggleVideoMuted } from '../../toolbox/actions.any';
|
||||
import { muteLocal } from '../../video-menu/actions.any';
|
||||
import { MEDIA_TYPE, VIDEO_TYPE } from '../media/constants';
|
||||
import { getParticipantById, isScreenShareParticipant } from '../participants/functions';
|
||||
import {
|
||||
getLocalVideoTrack,
|
||||
getTrackByMediaTypeAndParticipant,
|
||||
getVideoTrackByParticipant
|
||||
} from '../tracks/functions';
|
||||
|
||||
/**
|
||||
* Indicates whether the test mode is enabled. When it's enabled
|
||||
* {@link TestHint} and other components from the testing package will be
|
||||
* rendered in various places across the app to help with automatic testing.
|
||||
*
|
||||
* @param {IReduxState} state - The redux store state.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isTestModeEnabled(state: IReduxState): boolean {
|
||||
const testingConfig = state['features/base/config'].testing;
|
||||
|
||||
return Boolean(testingConfig?.testMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the video type of the remote participant's video.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @param {string} id - The participant ID for the remote video.
|
||||
* @returns {VIDEO_TYPE}
|
||||
*/
|
||||
export function getRemoteVideoType({ getState }: IStore, id: string) {
|
||||
const state = getState();
|
||||
const participant = getParticipantById(state, id);
|
||||
|
||||
if (isScreenShareParticipant(participant)) {
|
||||
return VIDEO_TYPE.DESKTOP;
|
||||
}
|
||||
|
||||
return getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id)?.videoType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the last media event received for large video indicates that the video is playing, if not muted.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isLargeVideoReceived({ getState }: IStore): boolean {
|
||||
const state = getState();
|
||||
const largeVideoParticipantId = state['features/large-video'].participantId ?? '';
|
||||
const largeVideoParticipant = getParticipantById(state, largeVideoParticipantId ?? '');
|
||||
const videoTrack = getVideoTrackByParticipant(state, largeVideoParticipant);
|
||||
|
||||
return Boolean(videoTrack && !videoTrack.muted && isTrackStreamingStatusActive(videoTrack));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the local video track's codec.
|
||||
*
|
||||
* @returns {string?} The local video track's codec.
|
||||
*/
|
||||
export function getLocalCameraEncoding({ getState }: IStore): string | undefined {
|
||||
return getLocalVideoTrack(getState()['features/base/tracks'])?.codec?.toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the last media event received for a remote video indicates that the video is playing, if not muted.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @param {string} id - The participant ID for the remote video.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function isRemoteVideoReceived({ getState }: IStore, id: string): boolean {
|
||||
const state = getState();
|
||||
const participant = getParticipantById(state, id);
|
||||
const videoTrack = getVideoTrackByParticipant(state, participant);
|
||||
|
||||
return Boolean(videoTrack && !videoTrack.muted && isTrackStreamingStatusActive(videoTrack));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mutes the local audio. Same as clicking the audio mute button.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @returns {Promise} Resolves when the action is complete.
|
||||
*/
|
||||
export function audioMute({ dispatch }: IStore) {
|
||||
return dispatch(muteLocal(true, MEDIA_TYPE.AUDIO));
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmutes the local audio. Same as clicking the audio unmute button.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @returns {Promise} Resolves when the action is complete.
|
||||
*/
|
||||
export function audioUnmute({ dispatch }: IStore) {
|
||||
return dispatch(muteLocal(false, MEDIA_TYPE.AUDIO));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mutes the local video. Same as clicking the video mute button.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @returns {Promise} Resolves when the action is complete.
|
||||
*/
|
||||
export function videoMute({ dispatch }: IStore) {
|
||||
return dispatch(handleToggleVideoMuted(true, true, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmutes the local video. Same as clicking the video unmute button.
|
||||
*
|
||||
* @param {IStore} store - The redux store.
|
||||
* @returns {Promise} Resolves when the action is complete.
|
||||
*/
|
||||
export function videoUnmute({ dispatch }: IStore) {
|
||||
return dispatch(handleToggleVideoMuted(false, true, true));
|
||||
}
|
||||
Reference in New Issue
Block a user