Apply same logic to mobile

This commit is contained in:
Nicolas Mowen 2024-03-14 08:12:52 -06:00
parent cab4336b7f
commit a3b930e60f

View File

@ -343,8 +343,24 @@ export function MobileRecordingView({
// scrubbing and timeline state // scrubbing and timeline state
const [scrubbing, setScrubbing] = useState(false); const [scrubbing, setScrubbing] = useState(false);
const [currentTime, setCurrentTime] = useState<number>( const [currentTime, setCurrentTime] = useState<number>(startTime);
startTime || Date.now() / 1000, const [playerTime, setPlayerTime] = useState(startTime);
const updateSelectedSegment = useCallback(
(currentTime: number, updateStartTime: boolean) => {
const index = timeRange.ranges.findIndex(
(seg) => seg.start <= currentTime && seg.end >= currentTime,
);
if (index != -1) {
if (updateStartTime) {
setPlaybackStart(currentTime);
}
setSelectedRangeIdx(index);
}
},
[timeRange],
); );
useEffect(() => { useEffect(() => {
@ -353,28 +369,36 @@ export function MobileRecordingView({
currentTime > currentTimeRange.end + 60 || currentTime > currentTimeRange.end + 60 ||
currentTime < currentTimeRange.start - 60 currentTime < currentTimeRange.start - 60
) { ) {
const index = timeRange.ranges.findIndex( updateSelectedSegment(currentTime, false);
(seg) => seg.start <= currentTime && seg.end >= currentTime,
);
if (index != -1) {
setSelectedRangeIdx(index);
}
return; return;
} }
controllerRef.current?.scrubToTimestamp(currentTime); controllerRef.current?.scrubToTimestamp(currentTime);
} }
}, [currentTime, scrubbing, currentTimeRange, timeRange]); }, [
currentTime,
scrubbing,
timeRange,
currentTimeRange,
updateSelectedSegment,
]);
useEffect(() => { useEffect(() => {
if (!scrubbing) { if (!scrubbing) {
controllerRef.current?.seekToTimestamp(currentTime, true); if (Math.abs(currentTime - playerTime) > 10) {
if (
currentTimeRange.start <= currentTime &&
currentTimeRange.end >= currentTime
) {
controllerRef.current?.seekToTimestamp(currentTime, true);
} else {
updateSelectedSegment(currentTime, true);
}
}
} }
// we only want to seek when current time doesn't match the player update time
// we only want to seek when user stops scrubbing
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [scrubbing]); }, [currentTime, scrubbing]);
// motion timeline data // motion timeline data
@ -436,7 +460,10 @@ export function MobileRecordingView({
onControllerReady={(controller) => { onControllerReady={(controller) => {
controllerRef.current = controller; controllerRef.current = controller;
}} }}
onTimestampUpdate={setCurrentTime} onTimestampUpdate={(timestamp) => {
setPlayerTime(timestamp);
setCurrentTime(timestamp);
}}
onClipEnded={onClipEnded} onClipEnded={onClipEnded}
isScrubbing={scrubbing} isScrubbing={scrubbing}
/> />