// Copyright (C) 2017-2023 Smart code 203358507 const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const { default: Icon } = require('@stremio/stremio-icons/react'); const { Button } = require('stremio/components'); const { useServices } = require('stremio/services'); const SeekBar = require('./SeekBar'); const VolumeSlider = require('./VolumeSlider'); const styles = require('./styles'); const { useBinaryState, usePlatform } = require('stremio/common'); const { t } = require('i18next'); const ControlBar = ({ className, paused, time, duration, buffered, volume, muted, playbackSpeed, subtitlesTracks, audioTracks, metaItem, nextVideo, stream, statistics, onPlayRequested, onPauseRequested, onNextVideoRequested, onMuteRequested, onUnmuteRequested, onVolumeChangeRequested, onSeekRequested, onToggleSubtitlesMenu, onToggleAudioMenu, onToggleSpeedMenu, onToggleSideDrawer, onToggleOptionsMenu, onToggleStatisticsMenu, onTouchEnd, ...props }) => { const { chromecast } = useServices(); const platform = usePlatform(); const [chromecastServiceActive, setChromecastServiceActive] = React.useState(() => chromecast.active); const [buttonsMenuOpen, , , toggleButtonsMenu] = useBinaryState(false); const onSubtitlesButtonMouseDown = React.useCallback((event) => { event.nativeEvent.subtitlesMenuClosePrevented = true; }, []); const onAudioButtonMouseDown = React.useCallback((event) => { event.nativeEvent.audioMenuClosePrevented = true; }, []); const onSpeedButtonMouseDown = React.useCallback((event) => { event.nativeEvent.speedMenuClosePrevented = true; }, []); const onVideosButtonMouseDown = React.useCallback((event) => { event.nativeEvent.videosMenuClosePrevented = true; }, []); const onOptionsButtonMouseDown = React.useCallback((event) => { event.nativeEvent.optionsMenuClosePrevented = true; }, []); const onStatisticsButtonMouseDown = React.useCallback((event) => { event.nativeEvent.statisticsMenuClosePrevented = true; }, []); const onPlayPauseButtonClick = React.useCallback(() => { if (paused) { if (typeof onPlayRequested === 'function') { onPlayRequested(); } } else { if (typeof onPauseRequested === 'function') { onPauseRequested(); } } }, [paused, onPlayRequested, onPauseRequested]); const onNextVideoButtonClick = React.useCallback(() => { if (nextVideo !== null && typeof onNextVideoRequested === 'function') { onNextVideoRequested(); } }, [nextVideo, onNextVideoRequested]); const onMuteButtonClick = React.useCallback(() => { if (muted) { if (typeof onUnmuteRequested === 'function') { onUnmuteRequested(); } } else { if (typeof onMuteRequested === 'function') { onMuteRequested(); } } }, [muted, onMuteRequested, onUnmuteRequested]); const onChromecastButtonClick = React.useCallback(() => { chromecast.transport.requestSession(); }, []); React.useEffect(() => { const onStateChanged = () => { setChromecastServiceActive(chromecast.active); }; chromecast.on('stateChanged', onStateChanged); return () => { chromecast.off('stateChanged', onStateChanged); }; }, []); return (
{ nextVideo !== null ? : null } { !platform.isMobile ? : null }
{ metaItem?.content?.videos?.length > 0 ? : null }
); }; ControlBar.propTypes = { className: PropTypes.string, paused: PropTypes.bool, time: PropTypes.number, duration: PropTypes.number, buffered: PropTypes.number, volume: PropTypes.number, muted: PropTypes.bool, playbackSpeed: PropTypes.number, subtitlesTracks: PropTypes.array, audioTracks: PropTypes.array, metaItem: PropTypes.object, nextVideo: PropTypes.object, stream: PropTypes.object, statistics: PropTypes.object, onPlayRequested: PropTypes.func, onPauseRequested: PropTypes.func, onNextVideoRequested: PropTypes.func, onMuteRequested: PropTypes.func, onUnmuteRequested: PropTypes.func, onVolumeChangeRequested: PropTypes.func, onSeekRequested: PropTypes.func, onToggleSubtitlesMenu: PropTypes.func, onToggleAudioMenu: PropTypes.func, onToggleSpeedMenu: PropTypes.func, onToggleSideDrawer: PropTypes.func, onToggleOptionsMenu: PropTypes.func, onToggleStatisticsMenu: PropTypes.func, onMouseOver: PropTypes.func, onMouseMove: PropTypes.func, onTouchEnd: PropTypes.func, }; module.exports = ControlBar;