fix: Using recording dialog on asyncTranscription.

This partially reverts commit 02787b1 to avoid looping between request subtitles and start recording which results not closing the start recording dialog.
This commit is contained in:
damencho
2025-12-08 12:54:13 -06:00
committed by Дамян Минков
parent 02787b1394
commit 2e31ab9dca
3 changed files with 30 additions and 26 deletions

View File

@@ -4,10 +4,12 @@ import { useDispatch, useSelector } from 'react-redux';
import { makeStyles } from 'tss-react/mui'; import { makeStyles } from 'tss-react/mui';
import { IReduxState } from '../../../app/types'; import { IReduxState } from '../../../app/types';
import { openDialog } from '../../../base/dialog/actions';
import Icon from '../../../base/icons/components/Icon'; import Icon from '../../../base/icons/components/Icon';
import { IconSubtitles } from '../../../base/icons/svg'; import { IconSubtitles } from '../../../base/icons/svg';
import Button from '../../../base/ui/components/web/Button'; import Button from '../../../base/ui/components/web/Button';
import { groupMessagesBySender } from '../../../base/util/messageGrouping'; import { groupMessagesBySender } from '../../../base/util/messageGrouping';
import { StartRecordingDialog } from '../../../recording/components/Recording';
import { setRequestingSubtitles } from '../../../subtitles/actions.any'; import { setRequestingSubtitles } from '../../../subtitles/actions.any';
import LanguageSelector from '../../../subtitles/components/web/LanguageSelector'; import LanguageSelector from '../../../subtitles/components/web/LanguageSelector';
import { canStartSubtitles } from '../../../subtitles/functions.any'; import { canStartSubtitles } from '../../../subtitles/functions.any';
@@ -88,6 +90,7 @@ export default function ClosedCaptionsTab() {
const _canStartSubtitles = useSelector(canStartSubtitles); const _canStartSubtitles = useSelector(canStartSubtitles);
const [ isButtonPressed, setButtonPressed ] = useState(false); const [ isButtonPressed, setButtonPressed ] = useState(false);
const subtitlesError = useSelector((state: IReduxState) => state['features/subtitles']._hasError); const subtitlesError = useSelector((state: IReduxState) => state['features/subtitles']._hasError);
const { conference } = useSelector((state: IReduxState) => state['features/base/conference']);
const filteredSubtitles = useMemo(() => { const filteredSubtitles = useMemo(() => {
// First, create a map of transcription messages by message ID // First, create a map of transcription messages by message ID
@@ -124,9 +127,17 @@ export default function ClosedCaptionsTab() {
if (isButtonPressed) { if (isButtonPressed) {
return; return;
} }
dispatch(setRequestingSubtitles(true, false, null));
if (conference?.getMetadataHandler()?.getMetadata()?.asyncTranscription) {
dispatch(openDialog('StartRecordingDialog', StartRecordingDialog, {
recordAudioAndVideo: false
}));
} else {
dispatch(setRequestingSubtitles(true, false, null));
}
setButtonPressed(true); setButtonPressed(true);
}, [ dispatch, isButtonPressed, setButtonPressed ]); }, [ conference, dispatch, isButtonPressed, openDialog, setButtonPressed ]);
if (subtitlesError && isButtonPressed) { if (subtitlesError && isButtonPressed) {
setButtonPressed(false); setButtonPressed(false);

View File

@@ -1,7 +1,4 @@
import { IStore } from '../app/types';
import { openDialog } from '../base/dialog/actions';
import { DEFAULT_LANGUAGE } from '../base/i18n/i18next'; import { DEFAULT_LANGUAGE } from '../base/i18n/i18next';
import { StartRecordingDialog } from '../recording/components/Recording';
import { import {
REMOVE_CACHED_TRANSCRIPT_MESSAGE, REMOVE_CACHED_TRANSCRIPT_MESSAGE,
@@ -100,24 +97,12 @@ export function setRequestingSubtitles(
displaySubtitles = true, displaySubtitles = true,
language: string | null = `translation-languages:${DEFAULT_LANGUAGE}`, language: string | null = `translation-languages:${DEFAULT_LANGUAGE}`,
backendRecordingOn = false) { backendRecordingOn = false) {
return function(dispatch: IStore['dispatch'], getState: IStore['getState']) { return {
const { conference } = getState()['features/base/conference']; type: SET_REQUESTING_SUBTITLES,
backendRecordingOn,
if (conference?.getMetadataHandler()?.getMetadata()?.asyncTranscription) { displaySubtitles,
dispatch(openDialog('StartRecordingDialog', StartRecordingDialog, { enabled,
recordAudioAndVideo: false language
}));
return;
}
dispatch({
type: SET_REQUESTING_SUBTITLES,
backendRecordingOn,
displaySubtitles,
enabled,
language
});
}; };
} }

View File

@@ -3,10 +3,11 @@ import { useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { IReduxState, IStore } from '../../app/types'; import { IReduxState, IStore } from '../../app/types';
import { openDialog } from '../../base/dialog/actions';
import { StartRecordingDialog } from '../../recording/components/Recording/index';
import { setRequestingSubtitles } from '../actions.any'; import { setRequestingSubtitles } from '../actions.any';
import { getAvailableSubtitlesLanguages } from '../functions.any'; import { getAvailableSubtitlesLanguages } from '../functions.any';
export interface IAbstractLanguageSelectorDialogProps { export interface IAbstractLanguageSelectorDialogProps {
dispatch: IStore['dispatch']; dispatch: IStore['dispatch'];
language: string | null; language: string | null;
@@ -44,14 +45,21 @@ const AbstractLanguageSelectorDialog = (Component: ComponentType<IAbstractLangua
selected: lang === selected selected: lang === selected
}; };
}); });
const { conference } = useSelector((state: IReduxState) => state['features/base/conference']);
const onLanguageSelected = useCallback((value: string) => { const onLanguageSelected = useCallback((value: string) => {
const _selectedLanguage = value === noLanguageLabel ? null : value; const _selectedLanguage = value === noLanguageLabel ? null : value;
const enabled = Boolean(_selectedLanguage); const enabled = Boolean(_selectedLanguage);
const displaySubtitles = enabled; const displaySubtitles = enabled;
dispatch(setRequestingSubtitles(enabled, displaySubtitles, _selectedLanguage)); if (conference?.getMetadataHandler()?.getMetadata()?.asyncTranscription) {
}, [ language ]); dispatch(openDialog('StartRecordingDialog', StartRecordingDialog, {
recordAudioAndVideo: false
}));
} else {
dispatch(setRequestingSubtitles(enabled, displaySubtitles, _selectedLanguage));
}
}, [ conference, language ]);
return ( return (
<Component <Component