Update chat_window.php
This commit is contained in:
+42
-19
@@ -1485,36 +1485,59 @@ if (empty($user_id)) {
|
|||||||
try {
|
try {
|
||||||
showTyping();
|
showTyping();
|
||||||
|
|
||||||
// Si es WebM y no se convirtió en servidor, intentar convertir en el navegador a OGG
|
// Subir archivo inicialmente
|
||||||
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
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', selectedFile);
|
formData.append('file', selectedFile);
|
||||||
formData.append('uploaded_by', userId);
|
formData.append('uploaded_by', userId);
|
||||||
|
|
||||||
const uploadResponse = await fetch('api/upload_media.php', {
|
const uploadResponse = await fetch('api/upload_media.php', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData
|
body: formData
|
||||||
});
|
});
|
||||||
|
|
||||||
const uploadData = await uploadResponse.json();
|
let uploadData = await uploadResponse.json();
|
||||||
|
|
||||||
if (!uploadData.success) {
|
if (!uploadData.success) {
|
||||||
throw new Error(uploadData.error || 'Error subiendo archivo');
|
throw new Error(uploadData.error || 'Error subiendo archivo');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Avisar si la conversión falló en el servidor (ej. shell_exec deshabilitado o sin ffmpeg)
|
// Si el servidor no pudo convertir (p. ej. shell_exec disabled), intentar conversión en navegador y re-subir
|
||||||
if (uploadData.conversion_error) {
|
let clientConversionTried = false;
|
||||||
console.warn('upload conversion issue:', uploadData.conversion_error);
|
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');
|
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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user