feat: fix merge audio

This commit is contained in:
2026-02-27 13:42:14 +01:00
parent 582992551e
commit cdaf7b2727
5 changed files with 177 additions and 18 deletions
+38 -8
View File
@@ -9,7 +9,7 @@ import BorderGradientButton from '../../components/BorderGradientButton'
import GradientButton from '../../components/GradientButton'
import MusicLandHeader from '../../components/MusicLandHeader'
import AppCheckbox from '../../components/AppCheckbox'
import firebase, { projectsRef, serverTimestamp } from '../../config/firebase'
import firebase, { getFunctionsClient, projectsRef, serverTimestamp } from '../../config/firebase'
import { uploadFileToFirebase } from '../../helpers/uploadToFirebase'
import Page from '../../layouts/Page'
import { Routes } from '../../navigation'
@@ -135,6 +135,12 @@ const uploadSourceRecording = async ({ uri, uid, projectId }) => {
return { sourcePath, videoUrl }
}
const FUNCTIONS_REGION = 'europe-west1'
const callMergeVideoAndAudio = (payload) => {
const callable = getFunctionsClient(FUNCTIONS_REGION).httpsCallable('upload-mergeVideoAndAudio')
return callable(payload)
}
const PlaybackDownload = ({ route }) => {
const { currentUID, selectedProject } = useUserData()
const { hasActiveSubscription, hasPurchased, videos } = useUser() || {}
@@ -282,8 +288,6 @@ const PlaybackDownload = ({ route }) => {
})
tempSourcePath = sourcePath
const callable = firebase.functions().httpsCallable('upload-mergeVideoAndAudio')
const payload = {
projectId: projectForDownload?.id,
videoUrl,
@@ -293,7 +297,7 @@ const PlaybackDownload = ({ route }) => {
console.log('[PlaybackDownload] calling upload-mergeVideoAndAudio', payload)
const { data: result } = await callable(payload)
const { data: result } = await callMergeVideoAndAudio(payload)
console.log('[PlaybackDownload] upload-mergeVideoAndAudio result', result)
@@ -431,8 +435,12 @@ const PlaybackDownload = ({ route }) => {
}, [downloadPaymentPending, handleDownloadUri, hasPaidPlaybackDownload, isDownloading])
const handlePublish = async () => {
if (isPublishing) return
if (isPublishing) {
console.log('[PlaybackDownload] publish blocked: already publishing')
return
}
if (!hasAcceptedPublication) {
console.log('[PlaybackDownload] publish blocked: publication not accepted')
setTooltip({
type: 'error',
text: 'Confirme la diffusion de ton playback sur Musicland avant de publier',
@@ -440,6 +448,9 @@ const PlaybackDownload = ({ route }) => {
return
}
if (!projectForDownload?.id) {
console.log('[PlaybackDownload] publish: missing project id, navigating directly', {
projectForDownload: projectForDownload?.id,
})
setTooltip({
type: 'success',
text: publishSuccessMessage,
@@ -451,6 +462,10 @@ const PlaybackDownload = ({ route }) => {
let playbackUrlToSave = pendingPlaybackUrl || projectForDownload?.playbackUrl || null
const audioUrl = resolveAudioUrl()
if (!audioUrl && !playbackUrlToSave) {
console.log('[PlaybackDownload] publish blocked: missing audioUrl and playbackUrl', {
audioUrl,
playbackUrlToSave,
})
setTooltip({
type: 'error',
text: 'Aucune piste audio disponible pour ce projet',
@@ -458,6 +473,7 @@ const PlaybackDownload = ({ route }) => {
return
}
if (!currentUID) {
console.log('[PlaybackDownload] publish blocked: missing currentUID')
setTooltip({
type: 'error',
text: 'Utilisateur non authentifié',
@@ -466,10 +482,18 @@ const PlaybackDownload = ({ route }) => {
}
try {
console.log('[PlaybackDownload] publish start', {
projectId: projectForDownload?.id,
hasPendingPlaybackUrl: Boolean(pendingPlaybackUrl),
hasPlaybackUrl: Boolean(projectForDownload?.playbackUrl),
hasAudioUrl: Boolean(audioUrl),
hasUri: Boolean(uri),
})
setIsPublishing(true)
setIsLoading(true)
if (!playbackUrlToSave) {
console.log('[PlaybackDownload] publish: no playback url, uploading source')
const { sourcePath, videoUrl } = await uploadSourceRecording({
uri,
uid: currentUID,
@@ -477,8 +501,6 @@ const PlaybackDownload = ({ route }) => {
})
tempSourcePath = sourcePath
const callable = firebase.functions().httpsCallable('upload-mergeVideoAndAudio')
const payload = {
projectId: projectForDownload?.id,
videoUrl,
@@ -488,15 +510,20 @@ const PlaybackDownload = ({ route }) => {
console.log('[PlaybackDownload] publish: calling merge', payload)
const { data: result } = await callable(payload)
const { data: result } = await callMergeVideoAndAudio(payload)
playbackUrlToSave = result?.url || null
if (!playbackUrlToSave) {
console.log('[PlaybackDownload] publish: merge result missing url', result)
throw new Error('merge_failed')
}
setPendingPlaybackUrl(playbackUrlToSave)
}
console.log('[PlaybackDownload] publish: saving playback url', {
projectId: projectForDownload.id,
playbackUrlToSave,
})
await projectsRef.doc(projectForDownload.id).set(
{
playbackUrl: playbackUrlToSave,
@@ -509,6 +536,9 @@ const PlaybackDownload = ({ route }) => {
type: 'success',
text: publishSuccessMessage,
})
console.log('[PlaybackDownload] publish: navigate to PublishYoutube', {
projectId: projectForDownload.id,
})
navigate(Routes.PublishYoutube, { projectId: projectForDownload.id })
} catch (error) {
console.log('[PlaybackDownload] publish error', {