diff options
author | Hailey <me@haileyok.com> | 2024-09-04 08:00:53 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-04 08:00:53 -0700 |
commit | 21e48bb2d80a5becf3ffdecb1415322e7eae3f14 (patch) | |
tree | 6a16dee91dd230c358f9af4425f6bc873fb409e8 | |
parent | 515f87ed2487d6d875dfc6a266e47e7785e94818 (diff) | |
download | voidsky-21e48bb2d80a5becf3ffdecb1415322e7eae3f14.tar.zst |
[Video] Tweak playback handling (#5127)
-rw-r--r-- | src/view/com/util/post-embeds/VideoEmbed.tsx | 31 | ||||
-rw-r--r-- | src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx | 5 |
2 files changed, 26 insertions, 10 deletions
diff --git a/src/view/com/util/post-embeds/VideoEmbed.tsx b/src/view/com/util/post-embeds/VideoEmbed.tsx index 55ac18824..03838b662 100644 --- a/src/view/com/util/post-embeds/VideoEmbed.tsx +++ b/src/view/com/util/post-embeds/VideoEmbed.tsx @@ -18,7 +18,8 @@ import * as VideoFallback from './VideoEmbedInner/VideoFallback' export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { const t = useTheme() - const {activeSource, setActiveSource} = useActiveVideoNative() + const {activeSource, setActiveSource, player} = useActiveVideoNative() + const [isFullscreen, setIsFullscreen] = React.useState(false) const isActive = embed.playlist === activeSource const {_} = useLingui() @@ -31,6 +32,20 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { ) const gate = useGate() + const onChangeStatus = (isVisible: boolean) => { + if (isVisible) { + setActiveSource(embed.playlist) + if (!player.playing) { + player.play() + } + } else if (!isFullscreen) { + player.muted = true + if (player.playing) { + player.pause() + } + } + } + if (!gate('video_view_on_posts')) { return null } @@ -54,15 +69,13 @@ export function VideoEmbed({embed}: {embed: AppBskyEmbedVideo.View}) { a.my_xs, ]}> <ErrorBoundary renderError={renderError} key={key}> - <VisibilityView - enabled={true} - onChangeStatus={isVisible => { - if (isVisible) { - setActiveSource(embed.playlist) - } - }}> + <VisibilityView enabled={true} onChangeStatus={onChangeStatus}> {isActive ? ( - <VideoEmbedInnerNative embed={embed} /> + <VideoEmbedInnerNative + embed={embed} + isFullscreen={isFullscreen} + setIsFullscreen={setIsFullscreen} + /> ) : ( <> <Image diff --git a/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx b/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx index b9c0a99a9..913fca568 100644 --- a/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx +++ b/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx @@ -20,13 +20,16 @@ import {TimeIndicator} from './TimeIndicator' export function VideoEmbedInnerNative({ embed, + isFullscreen, + setIsFullscreen, }: { embed: AppBskyEmbedVideo.View + isFullscreen: boolean + setIsFullscreen: (isFullscreen: boolean) => void }) { const {_} = useLingui() const {player} = useActiveVideoNative() const ref = useRef<VideoView>(null) - const [isFullscreen, setIsFullscreen] = useState(false) const enterFullscreen = useCallback(() => { ref.current?.enterFullscreen() |