From 99f8234b9ddd721b34e65603b0e7166b9acd3c4d Mon Sep 17 00:00:00 2001 From: Leon Date: Thu, 12 Feb 2026 14:51:27 +0100 Subject: [PATCH] stop audio & go back to home --- src/screens/Playback/RecordedPlayback.js | 18 ++++++++++-- src/screens/Playback/RecordedPlayback.web.js | 16 +++++++++-- src/screens/Production/PlaybackDownload.js | 29 ++++++++------------ 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/screens/Playback/RecordedPlayback.js b/src/screens/Playback/RecordedPlayback.js index 0ab766e..1d40254 100644 --- a/src/screens/Playback/RecordedPlayback.js +++ b/src/screens/Playback/RecordedPlayback.js @@ -1,3 +1,4 @@ +import { useFocusEffect } from '@react-navigation/native' import useSharedAudioPlayer from '../../hooks/useSharedAudioPlayer' import * as FileSystem from 'expo-file-system' import { VideoView, useVideoPlayer } from 'expo-video' @@ -40,13 +41,21 @@ const RecordedPlayback = ({ route }) => { // Start both players on mount const stopPlayback = useCallback(async () => { try { - if (audioPlayer?.playing) await audioPlayer.pause?.() + if (audioPlayer) await audioPlayer.pause?.() } catch (e) { } try { - if (videoPlayer?.playing) videoPlayer.pause() + videoPlayer?.pause?.() } catch (e) { } }, [audioPlayer, videoPlayer]) + useFocusEffect( + useCallback(() => { + return () => { + void stopPlayback() + } + }, [stopPlayback]) + ) + useEffect(() => { playbackEndedRef.current = false const start = async () => { @@ -213,7 +222,10 @@ const RecordedPlayback = ({ route }) => { { + onPress={async () => { + try { + await stopPlayback() + } catch (e) { } navigate(Routes.PlaybackDownload, { action: 'playback', uri: videoUri, diff --git a/src/screens/Playback/RecordedPlayback.web.js b/src/screens/Playback/RecordedPlayback.web.js index 3649565..9bfb61d 100644 --- a/src/screens/Playback/RecordedPlayback.web.js +++ b/src/screens/Playback/RecordedPlayback.web.js @@ -1,3 +1,4 @@ +import { useFocusEffect } from '@react-navigation/native' import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { Image, Pressable, Text, View } from 'react-native' import { background, icons } from '../../assets' @@ -54,7 +55,7 @@ const RecordedPlayback = ({ route }) => { const stopPlayback = useCallback(async () => { try { - if (audioPlayer?.playing) await audioPlayer.pause?.() + if (audioPlayer) await audioPlayer.pause?.() } catch { } try { if (videoElRef.current && !videoElRef.current.paused) { @@ -63,6 +64,14 @@ const RecordedPlayback = ({ route }) => { } catch { } }, [audioPlayer]) + useFocusEffect( + useCallback(() => { + return () => { + void stopPlayback() + } + }, [stopPlayback]) + ) + useEffect(() => { return () => { if (!shouldPreserveBlobRef.current) { @@ -363,8 +372,11 @@ const RecordedPlayback = ({ route }) => { > { + onPress={async () => { shouldPreserveBlobRef.current = true + try { + await stopPlayback() + } catch { } navigate(Routes.PlaybackDownload, { action: 'playback', uri: videoUri || null, // peut être null sur web diff --git a/src/screens/Production/PlaybackDownload.js b/src/screens/Production/PlaybackDownload.js index 0e5003d..3cf39bc 100644 --- a/src/screens/Production/PlaybackDownload.js +++ b/src/screens/Production/PlaybackDownload.js @@ -152,6 +152,7 @@ const PlaybackDownload = ({ route }) => { const [isDownloading, setIsDownloading] = useState(false) const [hasAcceptedPublication, setHasAcceptedPublication] = useState(true) const hasShownAfterPlaybackRef = useRef(false) + const publishSuccessMessage = action === 'playback' ? 'Playback publié !' : 'Chanson publiée !' const afterPlaybackUrl = useMemo(() => { if (!videos) return null @@ -333,15 +334,11 @@ const PlaybackDownload = ({ route }) => { return } if (!project?.id) { - if (action === 'playback') { - setTooltip({ - type: 'success', - text: 'Playback publié !', - }) - navigate(Routes.Home) - } else { - navigate(Routes.SongRelease, { action }) - } + setTooltip({ + type: 'success', + text: publishSuccessMessage, + }) + navigate(Routes.Home) return } let tempSourcePath = null @@ -402,15 +399,11 @@ const PlaybackDownload = ({ route }) => { { merge: true } ) - if (action === 'playback') { - setTooltip({ - type: 'success', - text: 'Playback publié !', - }) - navigate(Routes.Home) - } else { - navigate(Routes.SongRelease, { action }) - } + setTooltip({ + type: 'success', + text: publishSuccessMessage, + }) + navigate(Routes.Home) } catch (error) { console.log('[PlaybackDownload] publish error', { message: error?.message,