From 4c133a92488d3def375b2128dda9be7d7e187cca Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 22 Jan 2026 11:49:45 -0500 Subject: [PATCH] Update chat_window.php --- chat_window.php | 61 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/chat_window.php b/chat_window.php index 729e5e4..cb55e23 100644 --- a/chat_window.php +++ b/chat_window.php @@ -1485,36 +1485,59 @@ if (empty($user_id)) { try { showTyping(); -// Si es WebM y no se convirtió en servidor, intentar convertir en el navegador a OGG - if (selectedFile && selectedFile.type === 'audio/webm') { - try { - selectedFile = await convertWebmToOgg(selectedFile); - showAlert('Conversión a OGG completada localmente', 'success'); - } catch (convErr) { - console.warn('Conversión local falló:', convErr); - showAlert('No se pudo convertir el audio localmente. Se intentará subir el archivo original.', 'warning'); - } - } - - // Subir archivo +// Subir archivo inicialmente const formData = new FormData(); formData.append('file', selectedFile); formData.append('uploaded_by', userId); - + const uploadResponse = await fetch('api/upload_media.php', { method: 'POST', body: formData }); - - const uploadData = await uploadResponse.json(); - + + let uploadData = await uploadResponse.json(); + if (!uploadData.success) { throw new Error(uploadData.error || 'Error subiendo archivo'); } - // Avisar si la conversión falló en el servidor (ej. shell_exec deshabilitado o sin ffmpeg) - if (uploadData.conversion_error) { - console.warn('upload conversion issue:', uploadData.conversion_error); + // Si el servidor no pudo convertir (p. ej. shell_exec disabled), intentar conversión en navegador y re-subir + let clientConversionTried = false; + if (uploadData.conversion_error && selectedFile && selectedFile.type === 'audio/webm') { + console.debug('Server conversion failed:', uploadData.conversion_error); + showAlert('Servidor no pudo convertir el audio; intentando conversión local en el navegador...', 'info'); + try { + clientConversionTried = true; + const converted = await convertWebmToOgg(selectedFile); + + // Re-subir archivo convertido + const formData2 = new FormData(); + formData2.append('file', converted); + formData2.append('uploaded_by', userId); + + const uploadResponse2 = await fetch('api/upload_media.php', { + method: 'POST', + body: formData2 + }); + + const uploadData2 = await uploadResponse2.json(); + if (!uploadData2.success) { + throw new Error(uploadData2.error || 'Error subiendo archivo convertido'); + } + + uploadData = uploadData2; // usar el resultado de la re-subida + selectedFile = converted; // actualizar selectedFile a la versión convertida + showAlert('Conversión local completada y archivo subido correctamente', 'success'); + console.debug('Client-side conversion and reupload succeeded'); + } catch (convErr) { + console.error('Client-side conversion failed:', convErr); + showAlert('No se pudo convertir el audio en el navegador: ' + (convErr.message || convErr), 'danger'); + // seguimos con el archivo original subido; avisamos al usuario + } + } + + // Si aún hay conversion_error y no se intentó conversión en cliente, avisar + if (uploadData.conversion_error && !clientConversionTried) { showAlert('Advertencia: La conversión de audio no se realizó en el servidor. El audio puede no reproducirse en algunos clientes. (' + uploadData.conversion_error + ')', 'warning'); }