You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
/* =======================================================================
|
|
File: static/js/progress.js
|
|
Purpose:
|
|
Update progress bars dynamically for the current book.
|
|
Expects data from API endpoints via dashboard.js or start.js.
|
|
======================================================================= */
|
|
|
|
console.log(">>> progress.js LOADED");
|
|
|
|
function updateProgressBars(data) {
|
|
console.log(">>> progress.js updateProgressBars() CALLED with:", data);
|
|
|
|
if (!data) {
|
|
console.warn(">>> progress.js: NO DATA RECEIVED");
|
|
return;
|
|
}
|
|
|
|
// Data format expected:
|
|
// {
|
|
// download_done,
|
|
// download_total,
|
|
// audio_done,
|
|
// audio_total
|
|
// }
|
|
|
|
const barDL = $(".progress-bar-fill");
|
|
const barAU = $(".progress-bar-fill.audio-fill");
|
|
|
|
console.log(">>> progress.js barDL =", barDL);
|
|
console.log(">>> progress.js barAU =", barAU);
|
|
|
|
const pctDL =
|
|
data.download_total > 0
|
|
? (100 * data.download_done) / data.download_total
|
|
: 0;
|
|
|
|
const pctAU =
|
|
data.audio_total > 0 ? (100 * data.audio_done) / data.audio_total : 0;
|
|
|
|
if (barDL) {
|
|
barDL.style.width = pctDL.toFixed(1) + "%";
|
|
console.log(">>> progress.js updated DL bar to", pctDL.toFixed(1) + "%");
|
|
} else {
|
|
console.warn(">>> progress.js: barDL NOT FOUND");
|
|
}
|
|
|
|
if (barAU) {
|
|
barAU.style.width = pctAU.toFixed(1) + "%";
|
|
console.log(">>> progress.js updated AU bar to", pctAU.toFixed(1) + "%");
|
|
} else {
|
|
console.warn(">>> progress.js: barAU NOT FOUND");
|
|
}
|
|
|
|
// Update textual stats
|
|
const stats = $$(".progress-stats span");
|
|
console.log(">>> progress.js stats elements found:", stats.length);
|
|
|
|
// Expected structure: [DL "x/y", DL "pct", AU "x/y", AU "pct"]
|
|
if (stats.length >= 4) {
|
|
stats[0].innerText = `${data.download_done} / ${data.download_total}`;
|
|
stats[1].innerText = pctDL.toFixed(1) + "%";
|
|
stats[2].innerText = `${data.audio_done} / ${data.audio_total}`;
|
|
stats[3].innerText = pctAU.toFixed(1) + "%";
|
|
|
|
console.log(">>> progress.js stats updated");
|
|
} else {
|
|
console.warn(
|
|
">>> progress.js: not enough stats spans, found",
|
|
stats.length
|
|
);
|
|
}
|
|
}
|