diff options
author | Andrew Aquino <dawneraq@gmail.com> | 2024-11-19 14:42:25 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-19 22:42:25 +0000 |
commit | 78e34c8d35a7e0876e3831468e549151de49e95d (patch) | |
tree | fc24e1340f58fd4ebc36783d3d99f142ee2eba1f /src | |
parent | f882cf97374bd85beba03fcedfc9789019b50e83 (diff) | |
download | voidsky-78e34c8d35a7e0876e3831468e549151de49e95d.tar.zst |
preserve video's last known time when scrolling away (#6239)
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/util/post-embeds/VideoEmbed.web.tsx | 2 | ||||
-rw-r--r-- | src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/view/com/util/post-embeds/VideoEmbed.web.tsx b/src/view/com/util/post-embeds/VideoEmbed.web.tsx index 3180dd99e..a1f4652ac 100644 --- a/src/view/com/util/post-embeds/VideoEmbed.web.tsx +++ b/src/view/com/util/post-embeds/VideoEmbed.web.tsx @@ -24,6 +24,7 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { useActiveVideoWeb() const [onScreen, setOnScreen] = useState(false) const [isFullscreen] = useFullscreen() + const lastKnownTime = useRef<number | undefined>() useEffect(() => { if (!ref.current) return @@ -82,6 +83,7 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { active={active} setActive={setActive} onScreen={onScreen} + lastKnownTime={lastKnownTime} /> </ViewportObserver> </ErrorBoundary> diff --git a/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx b/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx index ef989c4a4..fb1860708 100644 --- a/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx +++ b/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerWeb.tsx @@ -13,11 +13,13 @@ export function VideoEmbedInnerWeb({ active, setActive, onScreen, + lastKnownTime, }: { embed: AppBskyEmbedVideo.View active: boolean setActive: () => void onScreen: boolean + lastKnownTime: React.MutableRefObject<number | undefined> }) { const containerRef = useRef<HTMLDivElement>(null) const videoRef = useRef<HTMLVideoElement>(null) @@ -40,6 +42,12 @@ export function VideoEmbedInnerWeb({ setHlsLoading, }) + useEffect(() => { + if (lastKnownTime.current && videoRef.current) { + videoRef.current.currentTime = lastKnownTime.current + } + }, [lastKnownTime]) + return ( <View style={[a.flex_1, a.rounded_md, a.overflow_hidden]}> <div ref={containerRef} style={{height: '100%', width: '100%'}}> @@ -52,6 +60,9 @@ export function VideoEmbedInnerWeb({ preload="none" muted={!focused} aria-labelledby={embed.alt ? figId : undefined} + onTimeUpdate={e => { + lastKnownTime.current = e.currentTarget.currentTime + }} /> {embed.alt && ( <figcaption |