diff --git a/editor-settings.toml b/editor-settings.toml index 5777d3380..80659768b 100644 --- a/editor-settings.toml +++ b/editor-settings.toml @@ -111,6 +111,11 @@ # Default: "captions" #mainFlavor = "captions" +# If set to true, video playback stops when typing in the subtitle fields +# Type: boolean +# Default: false +#stopOnTyping = false + [subtitles.languages] ## A list of languages for which new subtitles can be created # For each language, various tags can be specified diff --git a/src/config.ts b/src/config.ts index 109be73c7..a4e711b8b 100644 --- a/src/config.ts +++ b/src/config.ts @@ -73,6 +73,7 @@ interface iSettings { languages: { [key: string]: subtitleTags; } | undefined, icons: { [key: string]: string; } | undefined, defaultVideoFlavor: Flavor | undefined, + stopOnTyping: boolean, }; chapters: { show: boolean, @@ -118,6 +119,7 @@ const defaultSettings: iSettings = { languages: {}, icons: undefined, defaultVideoFlavor: undefined, + stopOnTyping: false, }, chapters: { show: false, @@ -420,6 +422,7 @@ const SCHEMA = { languages: types.objectsWithinObjects, icons: types.map, defaultVideoFlavor: types.map, + stopOnTyping: types.boolean, }, chapters: { show: types.boolean, diff --git a/src/main/Chapter.tsx b/src/main/Chapter.tsx index aad1fb26b..c71827792 100644 --- a/src/main/Chapter.tsx +++ b/src/main/Chapter.tsx @@ -161,6 +161,7 @@ const Chapter: React.FC = () => { removeCue={removeCue} setCueAtIndex={setCueAtIndex} setCurrentlyAt={setCurrentlyAt} + setIsPlaying={setIsPlaying} setFocusSegmentTriggered={setFocusSegmentTriggered} setFocusSegmentTriggered2={setFocusSegmentTriggered2} setFocusToSegmentAboveId={setFocusToSegmentAboveId} diff --git a/src/main/SubtitleEditor.tsx b/src/main/SubtitleEditor.tsx index 04ce549f4..b850ea03d 100644 --- a/src/main/SubtitleEditor.tsx +++ b/src/main/SubtitleEditor.tsx @@ -47,6 +47,7 @@ import { ThemedTooltip } from "./Tooltip"; import { titleStyle, titleStyleBold } from "../cssStyles"; import { generateButtonTitle } from "./SubtitleSelect"; import { ConfirmationModal, ConfirmationModalHandle, Modal, ModalHandle, ProtoButton } from "@opencast/appkit"; +import { settings } from "../config"; /** * Displays an editor view for a selected subtitle file @@ -174,6 +175,7 @@ const SubtitleEditor: React.FC = () => {
{ removeCue={removeCue} setCueAtIndex={setCueAtIndex} setCurrentlyAt={setCurrentlyAt} + setIsPlaying={setIsPlaying} setFocusSegmentTriggered={setFocusSegmentTriggered} setFocusSegmentTriggered2={setFocusSegmentTriggered2} setFocusToSegmentAboveId={setFocusToSegmentAboveId} diff --git a/src/main/SubtitleListEditor.tsx b/src/main/SubtitleListEditor.tsx index b637de24b..f3c6f599d 100644 --- a/src/main/SubtitleListEditor.tsx +++ b/src/main/SubtitleListEditor.tsx @@ -32,6 +32,7 @@ const SubtitleListEditor: React.FC<{ segmentTextHeight?: string, isFunctionButtonEnabled?: boolean, isChapterInputs?: boolean, + isStopOnTyping?: boolean, selectSelectedSubtitleById: (state: RootState) => SubtitlesInEditor, selectSelectedSubtitleId: (state: RootState) => string, selectFocusSegmentId: (state: RootState) => string, @@ -47,6 +48,7 @@ const SubtitleListEditor: React.FC<{ removeCue: ActionCreatorWithPayload<{ identifier: string, cue: SubtitleCue; }, string>, setCueAtIndex: ActionCreatorWithPayload<{ identifier: string, cueIndex: number, newCue: SubtitleCue; }, string>, setCurrentlyAt: ActionCreatorWithPayload, + setIsPlaying: ActionCreatorWithPayload, setFocusSegmentTriggered: ActionCreatorWithPayload, setFocusSegmentTriggered2: ActionCreatorWithPayload, setFocusToSegmentAboveId: ActionCreatorWithPayload<{ identifier: string, segmentId: string }, string>, @@ -58,6 +60,7 @@ const SubtitleListEditor: React.FC<{ segmentTextHeight = "80%", isFunctionButtonEnabled = true, isChapterInputs = false, + isStopOnTyping = false, selectSelectedSubtitleById, selectSelectedSubtitleId, selectFocusSegmentId, @@ -67,6 +70,7 @@ const SubtitleListEditor: React.FC<{ removeCue, setCueAtIndex, setCurrentlyAt, + setIsPlaying, setFocusSegmentTriggered, setFocusSegmentTriggered2, setFocusToSegmentAboveId, @@ -145,12 +149,14 @@ const SubtitleListEditor: React.FC<{ textAreaHeight={segmentTextHeight} isFunctionButtonEnabled={isFunctionButtonEnabled} isChapterInputs={isChapterInputs} + isStopOnTyping={isStopOnTyping} selectFocusSegmentId={selectFocusSegmentId} selectFocusSegmentTriggered2={selectFocusSegmentTriggered2} addCueAtIndex={addCueAtIndex} removeCue={removeCue} setCueAtIndex={setCueAtIndex} setCurrentlyAt={setCurrentlyAt} + setIsPlaying={setIsPlaying} setFocusSegmentTriggered={setFocusSegmentTriggered} setFocusSegmentTriggered2={setFocusSegmentTriggered2} setFocusToSegmentAboveId={setFocusToSegmentAboveId} @@ -162,12 +168,14 @@ const SubtitleListEditor: React.FC<{ segmentTextHeight, isFunctionButtonEnabled, isChapterInputs, + isStopOnTyping, selectFocusSegmentId, selectFocusSegmentTriggered2, addCueAtIndex, removeCue, setCueAtIndex, setCurrentlyAt, + setIsPlaying, setFocusSegmentTriggered, setFocusSegmentTriggered2, setFocusToSegmentAboveId, @@ -246,6 +254,7 @@ const SubtitleListSegment : React.FC<{ textAreaHeight?: string, isFunctionButtonEnabled?: boolean, isChapterInputs?: boolean, + isStopOnTyping?: boolean, selectFocusSegmentId: (state: RootState) => string, selectFocusSegmentTriggered2: (state: RootState) => boolean, addCueAtIndex: ActionCreatorWithPayload<{ @@ -258,6 +267,7 @@ const SubtitleListSegment : React.FC<{ removeCue: ActionCreatorWithPayload<{ identifier: string, cue: SubtitleCue; }, string>, setCueAtIndex: ActionCreatorWithPayload<{ identifier: string, cueIndex: number, newCue: SubtitleCue; }, string>, setCurrentlyAt: ActionCreatorWithPayload, + setIsPlaying: ActionCreatorWithPayload, setFocusSegmentTriggered: ActionCreatorWithPayload, setFocusSegmentTriggered2: ActionCreatorWithPayload, setFocusToSegmentAboveId: ActionCreatorWithPayload<{ identifier: string, segmentId: string }, string>, @@ -272,12 +282,14 @@ const SubtitleListSegment : React.FC<{ const textAreaHeight = props.textAreaHeight; const isFunctionButtonEnabled = props.isFunctionButtonEnabled; const isChapterInputs = props.isChapterInputs; + const isStopOnTyping = props.isStopOnTyping; const selectFocusSegmentId = props.selectFocusSegmentId; const selectFocusSegmentTriggered2 = props.selectFocusSegmentTriggered2; const addCueAtIndex = props.addCueAtIndex; const removeCue = props.removeCue; const setCueAtIndex = props.setCueAtIndex; const setCurrentlyAt = props.setCurrentlyAt; + const setIsPlaying = props.setIsPlaying; const setFocusSegmentTriggered = props.setFocusSegmentTriggered; const setFocusSegmentTriggered2 = props.setFocusSegmentTriggered2; const setFocusToSegmentAboveId = props.setFocusToSegmentAboveId; @@ -307,6 +319,9 @@ const SubtitleListSegment : React.FC<{ }, [cue.idInternal, dispatch, focusId2, focusTriggered2, setFocusSegmentTriggered2]); const updateCueText = (event: React.ChangeEvent) => { + if (isStopOnTyping) { + dispatch(setIsPlaying(false)); + } dispatch(setCueAtIndex({ identifier: identifier, cueIndex: props.index,