An ATproto social media client -- with an independent Appview.

[Video] Try/catch video play/pause (#4930)

Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>

authored by samuel.fm

Samuel Newman and committed by
GitHub
630ebf52 57be2ea1

+21 -7
+12 -4
src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx
··· 8 8 9 9 import {HITSLOP_30} from '#/lib/constants' 10 10 import {useAppState} from '#/lib/hooks/useAppState' 11 + import {logger} from '#/logger' 11 12 import {useVideoPlayer} from '#/view/com/util/post-embeds/VideoPlayerContext' 12 13 import {android, atoms as a, useTheme} from '#/alf' 13 14 import {Mute_Stroke2_Corner0_Rounded as MuteIcon} from '#/components/icons/Mute' ··· 25 26 const isAppFocused = useAppState() 26 27 27 28 useEffect(() => { 28 - if (isAppFocused === 'active' && isScreenFocused && !player.playing) { 29 - player.play() 30 - } else if (player.playing) { 31 - player.pause() 29 + try { 30 + if (isAppFocused === 'active' && isScreenFocused && !player.playing) { 31 + player.play() 32 + } else if (player.playing) { 33 + player.pause() 34 + } 35 + } catch (err) { 36 + logger.error( 37 + 'Failed to play/pause while backgrounding/switching screens', 38 + {safeMessage: err}, 39 + ) 32 40 } 33 41 }, [isAppFocused, player, isScreenFocused]) 34 42
+9 -3
src/view/com/util/post-embeds/VideoPlayerContext.tsx
··· 2 2 import type {VideoPlayer} from 'expo-video' 3 3 import {useVideoPlayer as useExpoVideoPlayer} from 'expo-video' 4 4 5 + import {logger} from '#/logger' 6 + 5 7 const VideoPlayerContext = React.createContext<VideoPlayer | null>(null) 6 8 7 9 export function VideoPlayerProvider({ ··· 13 15 }) { 14 16 // eslint-disable-next-line @typescript-eslint/no-shadow 15 17 const player = useExpoVideoPlayer(source, player => { 16 - player.loop = true 17 - player.muted = true 18 - player.play() 18 + try { 19 + player.loop = true 20 + player.muted = true 21 + player.play() 22 + } catch (err) { 23 + logger.error('Failed to init video player', {safeMessage: err}) 24 + } 19 25 }) 20 26 21 27 return (