Skip to content

Commit

Permalink
[Video] Fix web autoplay (#5274)
Browse files Browse the repository at this point in the history
  • Loading branch information
mozzius authored Sep 11, 2024
1 parent dd2d0e6 commit 9912029
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions src/view/com/util/post-embeds/VideoEmbed.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,6 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) {
return () => observer.disconnect()
}, [sendPosition, isFullscreen])

// In case scrolling hasn't started yet, send up the position
const isAnyViewActive = currentActiveView !== null
useEffect(() => {
if (ref.current && !isAnyViewActive) {
const rect = ref.current.getBoundingClientRect()
const position = rect.y + rect.height / 2
sendPosition(position)
}
}, [isAnyViewActive, sendPosition])

const [key, setKey] = useState(0)
const renderError = useCallback(
(error: unknown) => (
Expand Down Expand Up @@ -84,7 +74,9 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) {
style={{display: 'flex', flex: 1, cursor: 'default'}}
onClick={evt => evt.stopPropagation()}>
<ErrorBoundary renderError={renderError} key={key}>
<ViewportObserver sendPosition={sendPosition}>
<ViewportObserver
sendPosition={sendPosition}
isAnyViewActive={currentActiveView !== null}>
<VideoEmbedInnerWeb
embed={embed}
active={active}
Expand All @@ -105,9 +97,11 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) {
function ViewportObserver({
children,
sendPosition,
isAnyViewActive,
}: {
children: React.ReactNode
sendPosition: (position: number) => void
isAnyViewActive: boolean
}) {
const ref = useRef<HTMLDivElement>(null)
const [nearScreen, setNearScreen] = useState(false)
Expand All @@ -134,6 +128,15 @@ function ViewportObserver({
return () => observer.disconnect()
}, [sendPosition, isFullscreen])

// In case scrolling hasn't started yet, send up the position
useEffect(() => {
if (ref.current && !isAnyViewActive) {
const rect = ref.current.getBoundingClientRect()
const position = rect.y + rect.height / 2
sendPosition(position)
}
}, [isAnyViewActive, sendPosition])

return (
<View style={[a.flex_1, a.flex_row]}>
{nearScreen && children}
Expand Down

0 comments on commit 9912029

Please sign in to comment.