From d1b1d1182fd350c88c4441f969a0a920256bb4f5 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 19 Mar 2024 06:49:19 -0600 Subject: [PATCH] Fix preview getting wrong update time --- web/src/components/player/PreviewPlayer.tsx | 17 ++++++----------- .../player/dynamic/DynamicVideoPlayer.tsx | 12 +++++++++--- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/web/src/components/player/PreviewPlayer.tsx b/web/src/components/player/PreviewPlayer.tsx index 13d36d0d1..b0e56a2b3 100644 --- a/web/src/components/player/PreviewPlayer.tsx +++ b/web/src/components/player/PreviewPlayer.tsx @@ -281,16 +281,12 @@ class PreviewVideoController extends PreviewController { Math.abs(seekTime - this.previewRef.current.currentTime) > 400 ) { // android/chrome has incorrect timestamps sent that are before the expected seek time - return false; } if (this.seeking) { - this.timeToSeek = time; + this.timeToSeek = seekTime; } else { - this.previewRef.current.currentTime = Math.max( - 0, - time - this.preview.start, - ); + this.previewRef.current.currentTime = Math.max(0, seekTime); this.seeking = true; } @@ -303,16 +299,15 @@ class PreviewVideoController extends PreviewController { } if (this.timeToSeek) { - const diff = - Math.round(this.timeToSeek) - - Math.round(this.previewRef.current.currentTime + this.preview.start); + const diff = Math.round( + this.timeToSeek - this.previewRef.current.currentTime, + ); const scrubLimit = isMobile ? 1 : 0.5; if (Math.abs(diff) >= scrubLimit) { // only seek if there is an appropriate amount of time difference - this.previewRef.current.currentTime = - this.timeToSeek - this.preview.start; + this.previewRef.current.currentTime = this.timeToSeek; } else { this.seeking = false; this.timeToSeek = undefined; diff --git a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx index 6f5462481..c3d2aac9e 100644 --- a/web/src/components/player/dynamic/DynamicVideoPlayer.tsx +++ b/web/src/components/player/dynamic/DynamicVideoPlayer.tsx @@ -120,13 +120,13 @@ export default function DynamicVideoPlayer({ const onTimeUpdate = useCallback( (time: number) => { - if (!controller || !onTimestampUpdate || time == 0) { + if (isScrubbing || !controller || !onTimestampUpdate || time == 0) { return; } onTimestampUpdate(controller.getProgress(time)); }, - [controller, onTimestampUpdate], + [controller, onTimestampUpdate, isScrubbing], ); // state of playback player @@ -176,7 +176,13 @@ export default function DynamicVideoPlayer({ onTimeUpdate={onTimeUpdate} onPlayerLoaded={onPlayerLoaded} onClipEnded={onClipEnded} - onPlaying={() => setIsLoading(false)} + onPlaying={() => { + if (isScrubbing) { + playerRef.current?.pause(); + } + + setIsLoading(false); + }} > {config && focusedItem && (