Docfile commited on
Commit
21e127e
·
verified ·
1 Parent(s): f4edd21

Upload main.js

Browse files
Files changed (1) hide show
  1. static/js/main.js +55 -62
static/js/main.js CHANGED
@@ -149,7 +149,7 @@ document.addEventListener('DOMContentLoaded', function() {
149
  setLoadingState(true, true);
150
 
151
  try {
152
- // Call API to generate podcast
153
  const response = await fetch('/generate-podcast', {
154
  method: 'POST',
155
  headers: {
@@ -158,74 +158,67 @@ document.addEventListener('DOMContentLoaded', function() {
158
  body: JSON.stringify(scenario)
159
  });
160
 
161
- // Setup progress event handling
162
- const reader = response.body.getReader();
163
- const contentLength = +response.headers.get('Content-Length') || 0;
164
-
165
- // Process the stream
166
- let receivedLength = 0;
167
- let jsonData = '';
168
-
169
- // Monitor the generation progress
170
- const progressMonitor = setInterval(() => {
171
- fetch('/generation-progress')
172
- .then(res => res.json())
173
- .then(progress => {
174
- if (progress.status === 'in_progress') {
175
- updateProgress(progress.current, progress.total, progress.message);
176
- }
177
- })
178
- .catch(err => console.error('Error fetching progress:', err));
179
- }, 1000);
180
-
181
- while (true) {
182
- const { done, value } = await reader.read();
183
-
184
- if (done) {
185
- clearInterval(progressMonitor);
186
- break;
187
- }
188
-
189
- receivedLength += value.length;
190
- const chunk = new TextDecoder().decode(value);
191
- jsonData += chunk;
192
-
193
- // Update progress if we have content length
194
- if (contentLength) {
195
- const percentComplete = Math.round((receivedLength / contentLength) * 100);
196
- updateProgress(percentComplete, 100, 'Réception des données...');
197
- }
198
- }
199
-
200
- // Parse the response
201
- const data = JSON.parse(jsonData);
202
 
203
  if (!response.ok) {
204
- throw new Error(data.error || 'Échec de génération du podcast');
205
  }
206
 
207
- // Process successful response
208
- currentAudioUrl = data.audioUrl;
209
- currentAudioFilename = currentAudioUrl.split('/').pop();
210
-
211
- // Setup audio player
212
- audioPlayer.src = currentAudioUrl;
213
- audioPlayer.load();
214
-
215
- // Show audio card
216
- audioCard.classList.remove('d-none');
217
- audioCard.classList.add('fade-in');
218
-
219
- // Auto-play the audio
220
- try {
221
- await audioPlayer.play();
222
- } catch (playError) {
223
- console.log('Lecture automatique empêchée par le navigateur.', playError);
224
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
 
226
  } catch (error) {
227
  showError(error.message || 'Une erreur inattendue est survenue. Veuillez réessayer.');
228
- } finally {
229
  setLoadingState(false);
230
  }
231
  });
 
149
  setLoadingState(true, true);
150
 
151
  try {
152
+ // Call API to start podcast generation in the background
153
  const response = await fetch('/generate-podcast', {
154
  method: 'POST',
155
  headers: {
 
158
  body: JSON.stringify(scenario)
159
  });
160
 
161
+ const data = await response.json();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
 
163
  if (!response.ok) {
164
+ throw new Error(data.error || 'Échec de démarrage de la génération du podcast');
165
  }
166
 
167
+ // Start polling for podcast status
168
+ const statusPoller = setInterval(async () => {
169
+ try {
170
+ const statusResponse = await fetch('/podcast-status');
171
+ const statusData = await statusResponse.json();
172
+
173
+ if (statusData.status === 'in_progress') {
174
+ // Update progress bar
175
+ updateProgress(
176
+ statusData.current,
177
+ statusData.total,
178
+ statusData.message || 'Génération en cours...'
179
+ );
180
+ } else if (statusData.status === 'complete') {
181
+ // Podcast is complete
182
+ clearInterval(statusPoller);
183
+
184
+ // Process successful response
185
+ if (statusData.audioUrl) {
186
+ currentAudioUrl = statusData.audioUrl;
187
+ currentAudioFilename = currentAudioUrl.split('/').pop();
188
+
189
+ // Setup audio player
190
+ audioPlayer.src = currentAudioUrl;
191
+ audioPlayer.load();
192
+
193
+ // Show audio card
194
+ audioCard.classList.remove('d-none');
195
+ audioCard.classList.add('fade-in');
196
+
197
+ // Auto-play the audio
198
+ try {
199
+ await audioPlayer.play();
200
+ } catch (playError) {
201
+ console.log('Lecture automatique empêchée par le navigateur.', playError);
202
+ }
203
+
204
+ // Turn off loading state
205
+ setLoadingState(false);
206
+ } else {
207
+ throw new Error('Podcast généré mais URL audio manquante');
208
+ }
209
+ } else if (statusData.status === 'error' || statusData.message.startsWith('Erreur')) {
210
+ // Error occurred
211
+ clearInterval(statusPoller);
212
+ throw new Error(statusData.message || 'Erreur pendant la génération du podcast');
213
+ }
214
+ } catch (pollError) {
215
+ clearInterval(statusPoller);
216
+ throw pollError;
217
+ }
218
+ }, 1000);
219
 
220
  } catch (error) {
221
  showError(error.message || 'Une erreur inattendue est survenue. Veuillez réessayer.');
 
222
  setLoadingState(false);
223
  }
224
  });