diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js index b23ec7805..d5e8d426c 100644 --- a/src/routes/Player/Player.js +++ b/src/routes/Player/Player.js @@ -28,6 +28,7 @@ const Player = ({ urlParams }) => { selectedSubtitlesTrackId: null, subtitlesSize: null, subtitlesDelay: null, + subtitlesOffset: null, subtitlesTextColor: null, subtitlesBackgroundColor: null, subtitlesOutlineColor: null @@ -74,6 +75,9 @@ const Player = ({ urlParams }) => { const onSubtitlesTrackSelected = React.useCallback((trackId) => { dispatch({ propName: 'selectedSubtitlesTrackId', propValue: trackId }); }, []); + const onSubtitlesOffsetChanged = React.useCallback((offset) => { + dispatch({ propName: 'subtitlesOffset', propValue: offset }); + }, []); const onContainerMouseDown = React.useCallback((event) => { if (!event.nativeEvent.subtitlesPickerClosePrevented) { closeSubtitlesPicker(); @@ -129,12 +133,6 @@ const Player = ({ urlParams }) => { volume={state.volume} muted={state.muted} subtitlesTracks={state.subtitlesTracks} - selectedSubtitlesTrackId={state.selectedSubtitlesTrackId} - subtitlesSize={state.subtitlesSize} - subtitlesDelay={state.subtitlesDelay} - subtitlesTextColor={state.subtitlesTextColor} - subtitlesBackgroundColor={state.subtitlesBackgroundColor} - subtitlesOutlineColor={state.subtitlesOutlineColor} onPlayRequested={onPlayRequested} onPauseRequested={onPauseRequested} onMuteRequested={onMuteRequested} @@ -149,12 +147,14 @@ const Player = ({ urlParams }) => { className={classnames(styles['layer'], styles['menu-layer'])} subtitlesTracks={state.subtitlesTracks} selectedSubtitlesTrackId={state.selectedSubtitlesTrackId} + subtitlesOffset={state.subtitlesOffset} subtitlesSize={state.subtitlesSize} subtitlesDelay={state.subtitlesDelay} subtitlesTextColor={state.subtitlesTextColor} subtitlesBackgroundColor={state.subtitlesBackgroundColor} subtitlesOutlineColor={state.subtitlesOutlineColor} onSubtitlesTrackSelected={onSubtitlesTrackSelected} + onSubtitlesOffsetChanged={onSubtitlesOffsetChanged} /> : null diff --git a/src/routes/Player/SubtitlesPicker/SubtitlesPicker.js b/src/routes/Player/SubtitlesPicker/SubtitlesPicker.js index b2115d176..fef047614 100644 --- a/src/routes/Player/SubtitlesPicker/SubtitlesPicker.js +++ b/src/routes/Player/SubtitlesPicker/SubtitlesPicker.js @@ -50,13 +50,16 @@ const SubtitlesPicker = (props) => { null; }, [props.subtitlesTracks, props.selectedSubtitlesTrackId]); const tracksForLanguage = React.useMemo(() => { - return Array.isArray(props.subtitlesTracks) && selectedLanguage !== null ? + return Array.isArray(props.subtitlesTracks) && typeof selectedLanguage === 'string' ? props.subtitlesTracks.filter(({ lang }) => { return lang === selectedLanguage; }) : []; }, [props.subtitlesTracks, selectedLanguage]); + const subtitlesOffsetDisabled = React.useMemo(() => { + return props.subtitlesOffset === null || isNaN(props.subtitlesOffset); + }, [props.subtitlesOffset]); const onMouseDown = React.useCallback((event) => { event.nativeEvent.subtitlesPickerClosePrevented = true; }, []); @@ -76,6 +79,14 @@ const SubtitlesPicker = (props) => { const trackOnClick = React.useCallback((event) => { props.onSubtitlesTrackSelected(event.currentTarget.dataset.trackId); }, [props.onSubtitlesTrackSelected]); + const onOffsetButtonClicked = React.useCallback((event) => { + if (props.subtitlesOffset !== null && !isNaN(props.subtitlesOffset)) { + const offset = props.subtitlesOffset + parseInt(event.currentTarget.dataset.offset); + if (typeof props.onSubtitlesOffsetChanged === 'function') { + props.onSubtitlesOffsetChanged(offset); + } + } + }, [props.subtitlesOffset, props.onSubtitlesOffsetChanged]); return (