Skip to content

Commit 78e34c8

Browse files
authored
preserve video's last known time when scrolling away (bluesky-social#6239)
1 parent f882cf9 commit 78e34c8

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/view/com/util/post-embeds/VideoEmbed.web.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) {
2424
useActiveVideoWeb()
2525
const [onScreen, setOnScreen] = useState(false)
2626
const [isFullscreen] = useFullscreen()
27+
const lastKnownTime = useRef<number | undefined>()
2728

2829
useEffect(() => {
2930
if (!ref.current) return
@@ -82,6 +83,7 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) {
8283
active={active}
8384
setActive={setActive}
8485
onScreen={onScreen}
86+
lastKnownTime={lastKnownTime}
8587
/>
8688
</ViewportObserver>
8789
</ErrorBoundary>

src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx

+11
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ export function VideoEmbedInnerWeb({
1313
active,
1414
setActive,
1515
onScreen,
16+
lastKnownTime,
1617
}: {
1718
embed: AppBskyEmbedVideo.View
1819
active: boolean
1920
setActive: () => void
2021
onScreen: boolean
22+
lastKnownTime: React.MutableRefObject<number | undefined>
2123
}) {
2224
const containerRef = useRef<HTMLDivElement>(null)
2325
const videoRef = useRef<HTMLVideoElement>(null)
@@ -40,6 +42,12 @@ export function VideoEmbedInnerWeb({
4042
setHlsLoading,
4143
})
4244

45+
useEffect(() => {
46+
if (lastKnownTime.current && videoRef.current) {
47+
videoRef.current.currentTime = lastKnownTime.current
48+
}
49+
}, [lastKnownTime])
50+
4351
return (
4452
<View style={[a.flex_1, a.rounded_md, a.overflow_hidden]}>
4553
<div ref={containerRef} style={{height: '100%', width: '100%'}}>
@@ -52,6 +60,9 @@ export function VideoEmbedInnerWeb({
5260
preload="none"
5361
muted={!focused}
5462
aria-labelledby={embed.alt ? figId : undefined}
63+
onTimeUpdate={e => {
64+
lastKnownTime.current = e.currentTarget.currentTime
65+
}}
5566
/>
5667
{embed.alt && (
5768
<figcaption

0 commit comments

Comments
 (0)