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