const ProgressBar = { init: () => { window.api.on_render_progress((obj_data) => { ProgressBar.update(obj_data); }); }, update: (obj_data) => { let nb_current = obj_data.nb_current || 0; let nb_total = obj_data.nb_total || 0; let str_camera = obj_data.str_camera || "-"; let nb_frame = obj_data.nb_frame || 0; let str_status = obj_data.str_status || "idle"; let nb_percent = 0; if (nb_total > 0) { nb_percent = Math.round((nb_current / nb_total) * 100); } let obj_bar = document.getElementById("bar_progress"); obj_bar.style.width = nb_percent + "%"; let obj_count = document.getElementById("label_progress_count"); obj_count.textContent = nb_current + " / " + nb_total; let obj_status = document.getElementById("label_progress_status"); if (str_status === "running") { obj_status.textContent = "Rendu en cours..."; } else if (str_status === "paused") { obj_status.textContent = "En pause"; } else if (str_status === "idle" && nb_current >= nb_total && nb_total > 0) { obj_status.textContent = "Termine"; } else { obj_status.textContent = "En attente"; } let obj_camera_label = document.getElementById("label_current_camera"); obj_camera_label.textContent = str_camera; let obj_frame_label = document.getElementById("label_current_frame"); obj_frame_label.textContent = nb_frame !== null && nb_frame !== undefined ? String(nb_frame) : "-"; RenderQueue.update_progress(nb_current, obj_data.nb_last_render_ms || 0, obj_data.str_last_image_path || null, obj_data.list_skipped || [], obj_data.list_stopped || [], obj_data.list_skipped_paths || []); }, reset: () => { let obj_bar = document.getElementById("bar_progress"); obj_bar.style.width = "0%"; document.getElementById("label_progress_count").textContent = "0 / 0"; document.getElementById("label_progress_status").textContent = "En attente"; document.getElementById("label_current_camera").textContent = "-"; document.getElementById("label_current_frame").textContent = "-"; }, };