my fork of the bluesky client

preserve video's last known time when scrolling away (#6239)

authored by

Andrew Aquino and committed by
GitHub
78e34c8d f882cf97

+13
+2
src/view/com/util/post-embeds/VideoEmbed.web.tsx
··· 24 24 useActiveVideoWeb() 25 25 const [onScreen, setOnScreen] = useState(false) 26 26 const [isFullscreen] = useFullscreen() 27 + const lastKnownTime = useRef<number | undefined>() 27 28 28 29 useEffect(() => { 29 30 if (!ref.current) return ··· 82 83 active={active} 83 84 setActive={setActive} 84 85 onScreen={onScreen} 86 + lastKnownTime={lastKnownTime} 85 87 /> 86 88 </ViewportObserver> 87 89 </ErrorBoundary>
+11
src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx
··· 13 13 active, 14 14 setActive, 15 15 onScreen, 16 + lastKnownTime, 16 17 }: { 17 18 embed: AppBskyEmbedVideo.View 18 19 active: boolean 19 20 setActive: () => void 20 21 onScreen: boolean 22 + lastKnownTime: React.MutableRefObject<number | undefined> 21 23 }) { 22 24 const containerRef = useRef<HTMLDivElement>(null) 23 25 const videoRef = useRef<HTMLVideoElement>(null) ··· 40 42 setHlsLoading, 41 43 }) 42 44 45 + useEffect(() => { 46 + if (lastKnownTime.current && videoRef.current) { 47 + videoRef.current.currentTime = lastKnownTime.current 48 + } 49 + }, [lastKnownTime]) 50 + 43 51 return ( 44 52 <View style={[a.flex_1, a.rounded_md, a.overflow_hidden]}> 45 53 <div ref={containerRef} style={{height: '100%', width: '100%'}}> ··· 52 60 preload="none" 53 61 muted={!focused} 54 62 aria-labelledby={embed.alt ? figId : undefined} 63 + onTimeUpdate={e => { 64 + lastKnownTime.current = e.currentTarget.currentTime 65 + }} 55 66 /> 56 67 {embed.alt && ( 57 68 <figcaption