Update chat_window.php
This commit is contained in:
+42
-5
@@ -372,6 +372,9 @@ if (empty($user_id)) {
|
|||||||
<button class="btn btn-outline-light btn-sm me-2" onclick="refreshChat()">
|
<button class="btn btn-outline-light btn-sm me-2" onclick="refreshChat()">
|
||||||
<i class="fas fa-sync-alt"></i>
|
<i class="fas fa-sync-alt"></i>
|
||||||
</button>
|
</button>
|
||||||
|
<button id="loadConverterBtn" class="btn btn-outline-light btn-sm me-2" title="Cargar conversor de audio">
|
||||||
|
<i class="fas fa-play-circle"></i> Cargar conversor
|
||||||
|
</button>
|
||||||
<button class="btn btn-outline-light btn-sm" onclick="window.close()">
|
<button class="btn btn-outline-light btn-sm" onclick="window.close()">
|
||||||
<i class="fas fa-times"></i>
|
<i class="fas fa-times"></i>
|
||||||
</button>
|
</button>
|
||||||
@@ -566,26 +569,40 @@ if (empty($user_id)) {
|
|||||||
throw new Error('WebAssembly no está disponible en este navegador; no se puede convertir en cliente');
|
throw new Error('WebAssembly no está disponible en este navegador; no se puede convertir en cliente');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si FFmpeg no está presente, intentar cargar desde varios CDNs
|
// Si FFmpeg no está presente, intentar cargar desde varios CDNs (varias URLs de fallback)
|
||||||
if (!window.FFmpeg || !window.FFmpeg.createFFmpeg) {
|
if (!window.FFmpeg || !window.FFmpeg.createFFmpeg) {
|
||||||
const cdns = [
|
const cdns = [
|
||||||
|
// CDN funcional conocido (prioritario)
|
||||||
|
'https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg/dist/ffmpeg.min.js',
|
||||||
|
// Versioned sources and other fallbacks
|
||||||
'https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js',
|
'https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js',
|
||||||
'https://unpkg.com/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js'
|
'https://unpkg.com/@ffmpeg/ffmpeg@0.11.8/dist/ffmpeg.min.js',
|
||||||
|
'https://unpkg.com/@ffmpeg/ffmpeg/dist/ffmpeg.min.js',
|
||||||
|
// Fallback local path - recomendamos descargar y colocar manualmente si CDN falla
|
||||||
|
'/assets/vendor/ffmpeg.min.js'
|
||||||
];
|
];
|
||||||
let loaded = false;
|
let loaded = false;
|
||||||
|
const failedSources = [];
|
||||||
for (const url of cdns) {
|
for (const url of cdns) {
|
||||||
try {
|
try {
|
||||||
await loadScript(url);
|
await loadScript(url);
|
||||||
if (window.FFmpeg && window.FFmpeg.createFFmpeg) {
|
if (window.FFmpeg && window.FFmpeg.createFFmpeg) {
|
||||||
|
console.info('FFmpeg loaded from', url);
|
||||||
loaded = true;
|
loaded = true;
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
failedSources.push(url + ' (no FFmpeg object)');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn('No se pudo cargar ffmpeg desde', url, e);
|
console.warn('No se pudo cargar ffmpeg desde', url, e);
|
||||||
|
failedSources.push(url + ' (' + (e.message || e) + ')');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!loaded) {
|
if (!loaded) {
|
||||||
throw new Error('No se pudo cargar ffmpeg.wasm desde los CDNs');
|
// Mostrar guía al usuario sobre cómo instalar localmente
|
||||||
|
const helpMsg = 'No se pudo cargar ffmpeg.wasm desde CDNs. Intenta descargar `ffmpeg.min.js` y colócalo en `assets/vendor/ffmpeg.min.js`. Fuentes intentadas: ' + failedSources.join('; ');
|
||||||
|
console.error(helpMsg);
|
||||||
|
throw new Error(helpMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1712,7 +1729,27 @@ if (empty($user_id)) {
|
|||||||
startRecording();
|
startRecording();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Botón para cargar conversor de audio manualmente (ffmpeg WASM)
|
||||||
|
const loadBtn = document.getElementById('loadConverterBtn');
|
||||||
|
if (loadBtn) {
|
||||||
|
loadBtn.addEventListener('click', async function() {
|
||||||
|
loadBtn.disabled = true;
|
||||||
|
loadBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Cargando...';
|
||||||
|
try {
|
||||||
|
await ensureFFmpeg();
|
||||||
|
showAlert('Conversor cargado correctamente', 'success');
|
||||||
|
loadBtn.innerHTML = '<i class="fas fa-check"></i> Listo';
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error cargando conversor:', e);
|
||||||
|
showAlert('Error cargando conversor: ' + (e.message || e), 'danger');
|
||||||
|
loadBtn.innerHTML = '<i class="fas fa-exclamation-triangle"></i> Error';
|
||||||
|
} finally {
|
||||||
|
loadBtn.disabled = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Auto-refresh cada 30 segundos para nuevos mensajes
|
// Auto-refresh cada 30 segundos para nuevos mensajes
|
||||||
setInterval(refreshChat, 30000);
|
setInterval(refreshChat, 30000);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user