about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-08-13 22:00:03 +0100
committerGitHub <noreply@github.com>2024-08-13 14:00:03 -0700
commit630ebf523d2e70db295ef1dc1705ea38c05104af (patch)
tree977c73c2843e94241101e43c4e11da8ec7457c29
parent57be2ea15b5bea019abf95a590640d688b7a8633 (diff)
downloadvoidsky-630ebf523d2e70db295ef1dc1705ea38c05104af.tar.zst
[Video] Try/catch video play/pause (#4930)
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
-rw-r--r--src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx16
-rw-r--r--src/view/com/util/post-embeds/VideoPlayerContext.tsx12
2 files changed, 21 insertions, 7 deletions
diff --git a/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx b/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx
index 5cbe01872..11fff4796 100644
--- a/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx
+++ b/src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx
@@ -8,6 +8,7 @@ import {useIsFocused} from '@react-navigation/native'
 
 import {HITSLOP_30} from '#/lib/constants'
 import {useAppState} from '#/lib/hooks/useAppState'
+import {logger} from '#/logger'
 import {useVideoPlayer} from '#/view/com/util/post-embeds/VideoPlayerContext'
 import {android, atoms as a, useTheme} from '#/alf'
 import {Mute_Stroke2_Corner0_Rounded as MuteIcon} from '#/components/icons/Mute'
@@ -25,10 +26,17 @@ export function VideoEmbedInnerNative() {
   const isAppFocused = useAppState()
 
   useEffect(() => {
-    if (isAppFocused === 'active' && isScreenFocused && !player.playing) {
-      player.play()
-    } else if (player.playing) {
-      player.pause()
+    try {
+      if (isAppFocused === 'active' && isScreenFocused && !player.playing) {
+        player.play()
+      } else if (player.playing) {
+        player.pause()
+      }
+    } catch (err) {
+      logger.error(
+        'Failed to play/pause while backgrounding/switching screens',
+        {safeMessage: err},
+      )
     }
   }, [isAppFocused, player, isScreenFocused])
 
diff --git a/src/view/com/util/post-embeds/VideoPlayerContext.tsx b/src/view/com/util/post-embeds/VideoPlayerContext.tsx
index 8f2d11f6b..20ebb6d2f 100644
--- a/src/view/com/util/post-embeds/VideoPlayerContext.tsx
+++ b/src/view/com/util/post-embeds/VideoPlayerContext.tsx
@@ -2,6 +2,8 @@ import React, {useContext} from 'react'
 import type {VideoPlayer} from 'expo-video'
 import {useVideoPlayer as useExpoVideoPlayer} from 'expo-video'
 
+import {logger} from '#/logger'
+
 const VideoPlayerContext = React.createContext<VideoPlayer | null>(null)
 
 export function VideoPlayerProvider({
@@ -13,9 +15,13 @@ export function VideoPlayerProvider({
 }) {
   // eslint-disable-next-line @typescript-eslint/no-shadow
   const player = useExpoVideoPlayer(source, player => {
-    player.loop = true
-    player.muted = true
-    player.play()
+    try {
+      player.loop = true
+      player.muted = true
+      player.play()
+    } catch (err) {
+      logger.error('Failed to init video player', {safeMessage: err})
+    }
   })
 
   return (