Actualiser js/admin.js

This commit is contained in:
2026-06-21 14:58:52 +02:00
parent 87f0abdf7c
commit 5507882019
+56 -11
View File
@@ -172,23 +172,68 @@ async function saveFilmForm(e) {
try { await fetch(`${API_URL}?action=save_film`, { method: 'POST', headers: { 'Authorization': localStorage.getItem('token'), 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); closeAdminModal(); loadDashboardData(); } catch (err) { console.error('Erreur sauvegarde :', err); }
}
// ── IMPORT CSV (Envoie les données brutes, le PHP fait le mapping) ──
// ── IMPORT CSV OPTIMISÉ (lots de 15 + stats) ──
async function handleCsvUpload(input) {
if (!input.files || input.files.length === 0) return;
const file = input.files[0]; input.value = '';
const file = input.files[0];
input.value = '';
try {
const text = await file.text(); const allData = parseCSV(text);
if (allData.length === 0) { alert('❌ Le fichier CSV est vide ou mal formaté.'); return; }
closeConfigModal(); showProgressModal(allData.length);
const batchSize = 3; let processed = 0;
const text = await file.text();
const allData = parseCSV(text);
if (allData.length === 0) {
alert(' Le fichier CSV est vide ou mal formaté.');
return;
}
closeConfigModal();
showProgressModal(allData.length);
// 🚀 Lots de 15 au lieu de 5 (3× moins de requêtes HTTP)
const batchSize = 15;
let processed = 0;
let totalTmdbCalls = 0;
let totalEanHits = 0;
const startTime = Date.now();
for (let i = 0; i < allData.length; i += batchSize) {
const batch = allData.slice(i, i + batchSize);
try { await fetch(`${API_URL}?action=import_batch`, { method: 'POST', headers: { 'Authorization': localStorage.getItem('token'), 'Content-Type': 'application/json' }, body: JSON.stringify({ items: batch, type: currentAdminTab }) }); }
catch (err) { console.error('Erreur sur un lot:', err); }
processed += batch.length; updateProgressModal(processed, allData.length);
try {
const res = await fetch(`${API_URL}?action=import_batch`, {
method: 'POST',
headers: {
'Authorization': localStorage.getItem('token'),
'Content-Type': 'application/json'
},
body: JSON.stringify({ items: batch, type: currentAdminTab })
});
const result = await res.json();
if (result.stats) {
totalTmdbCalls += (result.stats.tmdb_calls || 0);
totalEanHits += (result.stats.ean_hits || 0);
}
} catch (err) { console.error('Erreur sur un lot:', err); }
processed += batch.length;
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
const speed = (processed / (Date.now() - startTime) * 1000).toFixed(1);
// Affichage enrichi : progression + vitesse + stats
const pct = Math.round((processed / allData.length) * 100);
document.getElementById('progress-bar').style.width = pct + '%';
document.getElementById('progress-text').textContent =
`Import en cours... (${speed} films/s)`;
document.getElementById('progress-count').textContent =
`${processed} / ${allData.length} | 🖼️ ${totalEanHits} jaquettes | 🎬 ${totalTmdbCalls} appels TMDB | ⏱️ ${elapsed}s`;
}
closeProgressModal();
const totalTime = ((Date.now() - startTime) / 1000).toFixed(1);
alert(`✅ Import terminé en ${totalTime}s !\n📦 ${allData.length} film(s)\n🖼️ ${totalEanHits} jaquette(s) récupérée(s)\n ${totalTmdbCalls} appel(s) TMDB`);
loadDashboardData();
} catch (err) {
closeProgressModal();
alert('❌ Impossible de lire le fichier CSV.');
}
closeProgressModal(); alert(`✅ Import terminé ! ${allData.length} élément(s) traité(s).`); loadDashboardData();
} catch (err) { closeProgressModal(); alert('Impossible de lire le fichier CSV.'); }
}
async function saveTmdbKey() {