This commit is contained in:
julien 2025-06-19 14:15:07 +02:00
parent cbc5a703f8
commit 43e31c36d8

View File

@ -64,15 +64,18 @@
<script> <script>
let es = null;
if (typeof es === 'undefined') { // Fonction d'initialisation de l'EventSource
let es = new EventSource("/api/download/stream"); function startEventSource() {
} else { if (es !== null) {
es = new EventSource("/api/download/stream"); es.close(); // ferme l'ancien si déjà existant
} }
es.addEventListener("jobs", async (e) => { es = new EventSource("/api/download/stream");
console.log("🧪 Event brut reçu es const:", e.data);
es.addEventListener("jobs", async (e) => {
console.log("🧪 Event brut reçu :", e.data);
const tbody = document.getElementById("test"); const tbody = document.getElementById("test");
if (!tbody) { if (!tbody) {
@ -85,9 +88,7 @@
try { try {
const response = await fetch(url, { const response = await fetch(url, {
headers: { headers: { 'HX-Request': 'true' }
'HX-Request': 'true'
}
}); });
if (!response.ok) { if (!response.ok) {
@ -103,66 +104,73 @@
} }
}); });
es.onerror = e => console.error("❌ Erreur EventSource", e); es.onerror = e => {
console.error("❌ Erreur EventSource", e);
// (optionnel) tu peux tenter de relancer le EventSource ici si besoin
};
}
es.onerror = e => console.error("❌ Erreur EventSource", e); // Lancer dès le chargement initial :
async function postJobAction(url) { startEventSource();
try {
const res = await fetch(url, { // Fonction POST générique
method: "POST", async function postJobAction(url) {
headers: { "HX-Request": "true" } try {
}); const res = await fetch(url, {
if (!res.ok) throw new Error("Échec POST : " + res.status); method: "POST",
console.log("✅ Action POST réussie :", url); headers: { "HX-Request": "true" }
} catch (err) { });
console.error("❌ Erreur action POST :", err); if (!res.ok) throw new Error("Échec POST : " + res.status);
} console.log("✅ Action POST réussie :", url);
} catch (err) {
console.error("❌ Erreur action POST :", err);
} }
}
// DELETE avec effet visuel // Fonction DELETE avec effet visuel
async function deleteJobAnimated(jobId) { async function deleteJobAnimated(jobId) {
const row = document.getElementById(`job-${jobId}`); const row = document.getElementById(`job-${jobId}`);
if (!row) return; if (!row) return;
try { try {
const res = await fetch(`/api/download/delete/${jobId}`, { const res = await fetch(`/api/download/delete/${jobId}`, {
method: "DELETE", method: "DELETE",
headers: { "HX-Request": "true" } headers: { "HX-Request": "true" }
}); });
if (!res.ok) throw new Error("Échec DELETE"); if (!res.ok) throw new Error("Échec DELETE");
// Animation fade out row.style.transition = "opacity 0.4s ease, height 0.4s ease";
row.style.transition = "opacity 0.4s ease, height 0.4s ease"; row.style.opacity = "0";
row.style.opacity = "0"; row.style.height = "0px";
row.style.height = "0px"; setTimeout(() => row.remove(), 400);
setTimeout(() => row.remove(), 400); } catch (err) {
} catch (err) { console.error("❌ Erreur suppression :", err);
console.error("❌ Erreur suppression :", err);
}
} }
}
// Dispatcher global // Dispatcher global des boutons
document.addEventListener("click", function (e) { document.addEventListener("click", function (e) {
const btn = e.target.closest("button[data-action]"); const btn = e.target.closest("button[data-action]");
if (!btn) return; if (!btn) return;
const action = btn.dataset.action; const action = btn.dataset.action;
const jobId = btn.dataset.id; const jobId = btn.dataset.id;
switch (action) {
case "start-job":
postJobAction(`/api/download/start/${jobId}`);
break;
case "pause-job":
postJobAction(`/api/download/pause/${jobId}`);
break;
case "resume-job":
postJobAction(`/api/download/resume/${jobId}`);
break;
case "delete-job":
deleteJobAnimated(jobId);
break;
}
});
switch (action) {
case "start-job":
postJobAction(`/api/download/start/${jobId}`);
break;
case "pause-job":
postJobAction(`/api/download/pause/${jobId}`);
break;
case "resume-job":
postJobAction(`/api/download/resume/${jobId}`);
break;
case "delete-job":
deleteJobAnimated(jobId);
break;
}
});
</script> </script>