continue fix generating flow

This commit is contained in:
Thomas Demirdjian
2025-09-02 15:42:45 +02:00
parent d634c55aaa
commit 07053bc8db
10 changed files with 314 additions and 95 deletions
+44 -48
View File
@@ -13,14 +13,12 @@ import BorderGradientButton from "../../components/BorderGradientButton";
import GradientButton from "../../components/GradientButton";
import { Routes } from "../../navigation";
import ValidateModal from "../../components/modal/ValidateModal";
import { useRoute } from "@react-navigation/core";
import firebase from "../../config/firebase";
import firebase, { projectsRef } from "../../config/firebase";
import { useAudioPlayer } from "expo-audio";
import { responsiveHeight } from "react-native-responsive-dimensions";
const SongReady = () => {
const params = useRoute().params || {};
const projectId = params?.projectId;
const SongReady = ({ route }) => {
const { projectId = null } = route?.params || {};
const [showValidateModal, setShowValidateModal] = useState(false);
const [musicUrls, setMusicUrls] = useState([]);
const [selectedIndex, setSelectedIndex] = useState(0);
@@ -35,6 +33,7 @@ const SongReady = () => {
const player1 = useAudioPlayer(
musicUrls[1] ? { uri: musicUrls[1] } : undefined,
);
const wasPlayingBeforeSeek = useRef({ 0: false, 1: false });
// Charger les URLs depuis le document projet
useEffect(() => {
@@ -118,18 +117,14 @@ const SongReady = () => {
try {
const url = musicUrls[selectedIndex];
if (!projectId || !url) return;
await firebase
.firestore()
.collection("projects")
.doc(projectId)
.set(
{
songUrl: url,
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
},
{ merge: true },
);
navigate(Routes.PouchReady, { projectId });
await projectsRef.doc(projectId).set(
{
songUrl: url,
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
},
{ merge: true },
);
navigate(Routes.FlowSelection, { projectId });
} catch (e) {
console.log("Validate error", e?.message);
}
@@ -137,36 +132,7 @@ const SongReady = () => {
const onPressRegenerate = async () => {
try {
if (!projectId) return goBack();
const doc = await firebase
.firestore()
.collection("projects")
.doc(projectId)
.get();
const project = doc.data() || {};
const musicConfig = project?.musicConfig || {};
const callable = firebase
.functions()
.httpsCallable("music-generateMusic");
const { data } = await callable({
...musicConfig,
projectId,
});
const taskId =
data?.response?.data?.taskId || data?.response?.data?.task_id;
if (taskId) {
await firebase.firestore().collection("projects").doc(projectId).set(
{
sunoTaskId: taskId,
musicStatus: "GENERATING",
generationStartAt: firebase.firestore.FieldValue.serverTimestamp(),
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
},
{ merge: true },
);
}
navigate(Routes.GeneratingSong, { projectId });
} catch (e) {
console.log("Regenerate error", e?.message);
} finally {
@@ -176,7 +142,10 @@ const SongReady = () => {
return (
<Page headerType="NONE" backgroundImg={background.studioBG2}>
<MusicLandHeader onPressBack={goBack} progress={63} />
<MusicLandHeader
onPressBack={() => navigate(Routes.FlowSelection, { projectId })}
progress={63}
/>
<View style={{ flex: 1, marginTop: 16 }}>
<CreateLyricsHeader
title="Ta chanson est prête !"
@@ -226,7 +195,34 @@ const SongReady = () => {
: 0
}
seekEnabled={!!musicUrls[idx]}
onSeekStart={async () => {
try {
const player = idx === 0 ? player0 : player1;
wasPlayingBeforeSeek.current[idx] = !!player?.playing;
if (player?.playing) {
await player.pause?.();
setIsPlaying((p) => ({ ...p, [idx]: false }));
}
} catch (e) {
console.log(
"SongReady pause on seek start",
e?.message,
);
}
}}
onSeek={(ratio) => onSeek(idx, ratio)}
onSeekEnd={async () => {
try {
const player = idx === 0 ? player0 : player1;
if (player && wasPlayingBeforeSeek.current[idx]) {
await player.play?.();
setIsPlaying((p) => ({ ...p, [idx]: true }));
}
wasPlayingBeforeSeek.current[idx] = false;
} catch (e) {
console.log("SongReady resume after seek", e?.message);
}
}}
/>
</View>
<Pressable