feat: barra de progreso general (videos, textos, recursos) y corrección de extensiones .bin a su formato original (.xls, .ppt, .mp4, .html)

This commit is contained in:
Ricardo Monla
2026-05-03 09:23:04 -03:00
parent 6fe09eb038
commit 129f995115
17 changed files with 263 additions and 24 deletions
+32 -15
View File
@@ -621,14 +621,9 @@ function generarHTML(datos) {
let totalModulos = datos.length;
let totalSecciones = 0;
let totalTemas = 0;
let totalVideos = 0;
for (const m of datos) {
totalSecciones += m.secciones.length;
for (const s of m.secciones) {
totalTemas += s.temas.length;
for (const t of s.temas) if (t.vimeoID) totalVideos++;
}
}
let totalVideos = 0, videosDescargados = 0;
let totalRecursos = 0, recursosDescargados = 0;
let totalContenidos = 0, contenidosDescargados = 0;
// Leer mapa de videos descargados si existe
const mapaVideosPath = path.join(__dirname, ".mapa_videos.json");
@@ -639,16 +634,38 @@ function generarHTML(datos) {
}
} catch { /* sin mapa */ }
// Contar cuántos videos están descargados
let videosDescargados = 0;
for (const m of datos) {
totalSecciones += m.secciones.length;
for (const s of m.secciones) {
totalTemas += s.temas.length;
for (const t of s.temas) {
if (t.vimeoID && videosMap[t.vimeoID]) videosDescargados++;
if (t.vimeoID) {
totalVideos++;
if (videosMap[t.vimeoID]) videosDescargados++;
}
if (t.recursoURL) {
totalRecursos++;
if (t.recursoID) {
const secDir = path.join(__dirname, "descargas", "secciones", m.carpeta, s.carpeta);
let downloaded = false;
if (fs.existsSync(secDir)) {
const archivos = fs.readdirSync(secDir).filter(f => f.startsWith(`recurso_${t.recursoID}.`) || f.startsWith(`archivo_${t.recursoID}_`));
if (archivos.length > 0) downloaded = true;
}
if (downloaded) recursosDescargados++;
}
}
if (t.contenidoHTML) {
totalContenidos++;
contenidosDescargados++;
}
}
}
}
const videoPct = totalVideos > 0 ? Math.round((videosDescargados / totalVideos) * 100) : 0;
const totalItems = totalVideos + totalRecursos + totalContenidos;
const itemsDescargados = videosDescargados + recursosDescargados + contenidosDescargados;
const globalPct = totalItems > 0 ? Math.round((itemsDescargados / totalItems) * 100) : 0;
const css = `
* { margin: 0; padding: 0; box-sizing: border-box; }
@@ -1332,9 +1349,9 @@ body {
${sidebarNav}
</div>
<div class="progress-section">
<div class="progress-label">Descarga de videos</div>
<div class="progress-bar-bg"><div class="progress-bar-fill" style="width: ${videoPct}%"></div></div>
<div class="progress-stats"><span>${videosDescargados} de ${totalVideos}</span><span>${videoPct}%</span></div>
<div class="progress-label">Progreso de Descargas (Videos, Textos y Recursos)</div>
<div class="progress-bar-bg"><div class="progress-bar-fill" style="width: ${globalPct}%"></div></div>
<div class="progress-stats"><span>${itemsDescargados} de ${totalItems} ítems</span><span>${globalPct}%</span></div>
</div>
</nav>