Merge pull request #347 from saifshaikh1805/feature/improved10secSkipAndRewind

This commit is contained in:
Nayif 2026-01-03 01:54:46 +05:30 committed by GitHub
commit 7894258a26
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 48 additions and 1 deletions

View file

@ -0,0 +1,33 @@
import { useCallback, useRef, useEffect } from 'react';
export function useDebounceCallback<T extends (...args: any[]) => void>(
callback: T,
delay: number
) {
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
const callbackRef = useRef(callback);
// Sync latest callback to avoid stale closures
useEffect(() => {
callbackRef.current = callback;
}, [callback]);
const debouncedFunction = useCallback(
(...args: Parameters<T>) => {
if (timeoutRef.current) clearTimeout(timeoutRef.current);
timeoutRef.current = setTimeout(() => {
callbackRef.current(...args);
}, delay);
},
[delay]
);
// Cleanup on unmount to prevent memory leaks
useEffect(() => {
return () => {
if (timeoutRef.current) clearTimeout(timeoutRef.current);
};
}, []);
return debouncedFunction;
}

View file

@ -7,6 +7,7 @@ import Slider from '@react-native-community/slider';
import { styles } from '../utils/playerStyles'; // Updated styles
import { getTrackDisplayName } from '../utils/playerUtils';
import { useTheme } from '../../../contexts/ThemeContext';
import { useDebounceCallback } from '../android/hooks/useDebounceCallback';
interface PlayerControlsProps {
showControls: boolean;
@ -134,6 +135,15 @@ export const PlayerControls: React.FC<PlayerControlsProps> = ({
const playIconOpacity = React.useRef(new Animated.Value(1)).current;
/* Handle Seek with Animation */
const [skipRewindSeconds, setSkipRewindSeconds] = React.useState(0);
const finalSkipRewind = (finalValue: number) => {
console.log(`Final value processed: ${finalValue}`);
skip(finalValue);
setSkipRewindSeconds(0);
}
const debouncedSkip = useDebounceCallback((val: number) => {
finalSkipRewind(val);
}, 800);
const handleSeekWithAnimation = (seconds: number) => {
const isForward = seconds > 0;
@ -212,7 +222,11 @@ export const PlayerControls: React.FC<PlayerControlsProps> = ({
arcRotation.setValue(0);
});
skip(seconds);
setSkipRewindSeconds(prev => {
const nextVal = prev + seconds;
debouncedSkip(nextVal);
return nextVal;
});
};
/* Handle Play/Pause with Animation */