diff --git a/components/video-player/controls/Controls.tsx b/components/video-player/controls/Controls.tsx index 4897bd8a..8ecf1844 100644 --- a/components/video-player/controls/Controls.tsx +++ b/components/video-player/controls/Controls.tsx @@ -313,9 +313,12 @@ export const Controls: FC = ({ const maxSeconds = maxMs ? msToSeconds(maxMs) : undefined; // Wrapper to convert segment skip from seconds to milliseconds + // Includes 200ms delay to allow seek operation to complete before resuming playback const seekMs = useCallback( (timeInSeconds: number) => { seek(timeInSeconds * 1000); + // Brief delay ensures the seek operation completes before resuming playback + // Without this, playback may resume from the old position setTimeout(() => { play(); }, 200); diff --git a/hooks/useSegmentSkipper.ts b/hooks/useSegmentSkipper.ts index 395d1bd1..f937b8e6 100644 --- a/hooks/useSegmentSkipper.ts +++ b/hooks/useSegmentSkipper.ts @@ -53,14 +53,6 @@ export const useSegmentSkipper = ({ } })(); - // Memoize the seek wrapper to prevent cascading useEffect triggers - const wrappedSeek = useCallback( - (time: number) => { - seek(time); - }, - [seek], - ); - // Find current segment const currentSegment = segments.find( @@ -76,9 +68,9 @@ export const useSegmentSkipper = ({ // For Outro segments, prevent seeking past the end if (segmentType === "Outro" && totalDuration) { const seekTime = Math.min(currentSegment.endTime, totalDuration); - wrappedSeek(seekTime); + seek(seekTime); } else { - wrappedSeek(currentSegment.endTime); + seek(currentSegment.endTime); } // Only trigger haptic feedback if explicitly requested (manual skip) @@ -86,7 +78,7 @@ export const useSegmentSkipper = ({ haptic(); } }, - [currentSegment, segmentType, totalDuration, wrappedSeek, haptic], + [segmentType, totalDuration, seek, haptic], ); // Auto-skip logic when mode is 'auto'