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:
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user