Files
KVideo/components/player/hooks/useDesktopPlayerLogic.ts
T

195 lines
6.0 KiB
TypeScript

import { usePlaybackControls } from './desktop/usePlaybackControls';
import { useVolumeControls } from './desktop/useVolumeControls';
import { useProgressControls } from './desktop/useProgressControls';
import { useSkipControls } from './desktop/useSkipControls';
import { useFullscreenControls } from './desktop/useFullscreenControls';
import { useKeyboardShortcuts } from './desktop/useKeyboardShortcuts';
import { useControlsVisibility } from './desktop/useControlsVisibility';
import { useUtilities } from './desktop/useUtilities';
interface UseDesktopPlayerLogicProps {
src: string;
initialTime: number;
onError?: (error: string) => void;
onTimeUpdate?: (currentTime: number, duration: number) => void;
refs: any;
state: any;
}
export function useDesktopPlayerLogic({
src,
initialTime,
onError,
onTimeUpdate,
refs,
state
}: UseDesktopPlayerLogicProps) {
const {
videoRef,
containerRef,
progressBarRef,
volumeBarRef,
controlsTimeoutRef,
speedMenuTimeoutRef,
skipForwardTimeoutRef,
skipBackwardTimeoutRef,
volumeBarTimeoutRef,
isDraggingProgressRef,
isDraggingVolumeRef,
mouseMoveThrottleRef,
toastTimeoutRef
} = refs;
const {
isPlaying, setIsPlaying,
currentTime, setCurrentTime,
duration, setDuration,
volume, setVolume,
isMuted, setIsMuted,
isFullscreen, setIsFullscreen,
showControls, setShowControls,
setIsLoading,
playbackRate, setPlaybackRate,
showSpeedMenu, setShowSpeedMenu,
isPiPSupported, setIsPiPSupported,
isAirPlaySupported, setIsAirPlaySupported,
skipForwardAmount, setSkipForwardAmount,
skipBackwardAmount, setSkipBackwardAmount,
showSkipForwardIndicator, setShowSkipForwardIndicator,
showSkipBackwardIndicator, setShowSkipBackwardIndicator,
setIsSkipForwardAnimatingOut,
setIsSkipBackwardAnimatingOut,
setShowVolumeBar,
setToastMessage,
setShowToast
} = state;
const playbackControls = usePlaybackControls({
videoRef,
isPlaying,
setIsPlaying,
setIsLoading,
initialTime,
setDuration,
setCurrentTime,
onTimeUpdate,
onError,
isDraggingProgressRef
});
const volumeControls = useVolumeControls({
videoRef,
volumeBarRef,
volume,
isMuted,
setVolume,
setIsMuted,
setShowVolumeBar,
volumeBarTimeoutRef,
isDraggingVolumeRef
});
const progressControls = useProgressControls({
videoRef,
progressBarRef,
duration,
setCurrentTime,
isDraggingProgressRef
});
const skipControls = useSkipControls({
videoRef,
duration,
setCurrentTime,
showSkipForwardIndicator,
showSkipBackwardIndicator,
skipForwardAmount,
skipBackwardAmount,
setShowSkipForwardIndicator,
setShowSkipBackwardIndicator,
setSkipForwardAmount,
setSkipBackwardAmount,
setIsSkipForwardAnimatingOut,
setIsSkipBackwardAnimatingOut,
skipForwardTimeoutRef,
skipBackwardTimeoutRef
});
const fullscreenControls = useFullscreenControls({
containerRef,
videoRef,
isFullscreen,
setIsFullscreen,
isPiPSupported,
isAirPlaySupported,
setIsPiPSupported,
setIsAirPlaySupported
});
const controlsVisibility = useControlsVisibility({
isPlaying,
showControls,
showSpeedMenu,
setShowControls,
setShowSpeedMenu,
controlsTimeoutRef,
speedMenuTimeoutRef,
mouseMoveThrottleRef
});
const utilities = useUtilities({
src,
setToastMessage,
setShowToast,
toastTimeoutRef
});
const changePlaybackSpeed = (speed: number) => {
playbackControls.changePlaybackSpeed(speed, speedMenuTimeoutRef, setPlaybackRate, setShowSpeedMenu);
};
useKeyboardShortcuts({
videoRef,
isPlaying,
volume,
isPiPSupported,
togglePlay: playbackControls.togglePlay,
toggleMute: volumeControls.toggleMute,
toggleFullscreen: fullscreenControls.toggleFullscreen,
togglePictureInPicture: fullscreenControls.togglePictureInPicture,
skipForward: skipControls.skipForward,
skipBackward: skipControls.skipBackward,
showVolumeBarTemporarily: volumeControls.showVolumeBarTemporarily,
setShowControls,
setVolume,
setIsMuted,
controlsTimeoutRef
});
return {
handleMouseMove: controlsVisibility.handleMouseMove,
togglePlay: playbackControls.togglePlay,
handlePlay: playbackControls.handlePlay,
handlePause: playbackControls.handlePause,
handleTimeUpdateEvent: playbackControls.handleTimeUpdateEvent,
handleLoadedMetadata: playbackControls.handleLoadedMetadata,
handleVideoError: playbackControls.handleVideoError,
handleProgressClick: progressControls.handleProgressClick,
handleProgressMouseDown: progressControls.handleProgressMouseDown,
toggleMute: volumeControls.toggleMute,
showVolumeBarTemporarily: volumeControls.showVolumeBarTemporarily,
handleVolumeChange: volumeControls.handleVolumeChange,
handleVolumeMouseDown: volumeControls.handleVolumeMouseDown,
toggleFullscreen: fullscreenControls.toggleFullscreen,
togglePictureInPicture: fullscreenControls.togglePictureInPicture,
showAirPlayMenu: fullscreenControls.showAirPlayMenu,
skipForward: skipControls.skipForward,
skipBackward: skipControls.skipBackward,
changePlaybackSpeed,
handleCopyLink: utilities.handleCopyLink,
startSpeedMenuTimeout: controlsVisibility.startSpeedMenuTimeout,
clearSpeedMenuTimeout: controlsVisibility.clearSpeedMenuTimeout,
formatTime: playbackControls.formatTime
};
}