Files
jitsi-meet/react/features/transcribing/functions.ts
Дамян Минков b3742a3438 fix(transcriptions,recording): Allows non moderators with features to dial, record or transcribe. (#15074)
* fix(transcriptions): Uses dial command to invite transcriber.

* fix(transcriptions,recording): Allows non moderators with features to dial, record or transcribe.

* sqaush: Make sure filtering works when only is a moderator.

It works now and without a token and no features, but being moderator.

* squash: Rename constant.

* squash: Checks features first before defaulting to moderator when filtering metadata service.

* squash: Checks features first before defaulting to moderator in UI.

* squash: Fixes lint and one other check.

* squash: Moves more logic to is_feature_allowed.

* squash: Drops unnecessary check.

* squash: Uses constant coming from ljm.

* squash: Toggles back captions button on error.

* squash: Fix comment.

* squash: Reverting back isLiveStreamingButtonVisible.

* squash: Fix imports.
2024-09-13 11:06:29 -05:00

85 lines
3.0 KiB
TypeScript

import i18next from 'i18next';
import { IReduxState } from '../app/types';
import { IConfig } from '../base/config/configType';
import { isJwtFeatureEnabled } from '../base/jwt/functions';
import { isLocalParticipantModerator } from '../base/participants/functions';
import JITSI_TO_BCP47_MAP from './jitsi-bcp47-map.json';
import logger from './logger';
import TRANSCRIBER_LANGS from './transcriber-langs.json';
const DEFAULT_TRANSCRIBER_LANG = 'en-US';
/**
* Determine which language to use for transcribing.
*
* @param {*} config - Application config.
* @returns {string}
*/
export function determineTranscriptionLanguage(config: IConfig) {
const { transcription } = config;
// if transcriptions are not enabled nothing to determine
if (!transcription?.enabled) {
return undefined;
}
// Depending on the config either use the language that the app automatically detected or the hardcoded
// config BCP47 value.
// Jitsi language detections uses custom language tags, but the transcriber expects BCP-47 compliant tags,
// we use a mapping file to convert them.
const bcp47Locale = transcription?.useAppLanguage ?? true
? JITSI_TO_BCP47_MAP[i18next.language as keyof typeof JITSI_TO_BCP47_MAP]
: transcription?.preferredLanguage;
// Check if the obtained language is supported by the transcriber
let safeBCP47Locale = TRANSCRIBER_LANGS[bcp47Locale as keyof typeof TRANSCRIBER_LANGS] && bcp47Locale;
if (!safeBCP47Locale) {
safeBCP47Locale = DEFAULT_TRANSCRIBER_LANG;
logger.warn(`Transcriber language ${bcp47Locale} is not supported, using default ${DEFAULT_TRANSCRIBER_LANG}`);
}
logger.info(`Transcriber language set to ${safeBCP47Locale}`);
return safeBCP47Locale;
}
/**
* Returns whether there is transcribing.
*
* @param {IReduxState} state - The redux state to search in.
* @returns {boolean}
*/
export function isTranscribing(state: IReduxState) {
return state['features/transcribing'].isTranscribing;
}
/**
* Returns true if there is a recorder transcription session running.
* NOTE: If only the subtitles are running this function will return false.
*
* @param {Object} state - The redux state to search in.
* @returns {boolean}
*/
export function isRecorderTranscriptionsRunning(state: IReduxState) {
const { metadata } = state['features/base/conference'];
return isTranscribing(state) && Boolean(metadata?.recording?.isTranscribingEnabled);
}
/**
* Checks whether the participant can start the transcription.
*
* @param {IReduxState} state - The redux state.
* @returns {boolean} - True if the participant can start the transcription.
*/
export function canAddTranscriber(state: IReduxState) {
const { transcription } = state['features/base/config'];
const isModerator = isLocalParticipantModerator(state);
const isTranscribingAllowed = isJwtFeatureEnabled(state, 'transcription', isModerator, isModerator);
return Boolean(transcription?.enabled) && isTranscribingAllowed;
}