feat: gestion événements — historique, export ZIP, filtre galerie
🚀 Deploy — JH Photomaton / 🔍 Vérification (push) Has been cancelled
🚀 Deploy — JH Photomaton / 🍓 Deploy sur le Pi (push) Has been cancelled

This commit is contained in:
2026-07-17 14:43:05 +02:00
parent 7d60eba86d
commit d5f111d60b
10 changed files with 329 additions and 117 deletions
+1 -117
View File
@@ -801,120 +801,4 @@ async function loadBrightnessConfig() {
document.getElementById('toggle-auto-brightness').checked = auto;
document.getElementById('auto-brightness-status').textContent = auto
? '✅ Auto-flash actif — le flash s\'adapte à l\'ambiance'
: '⏸ Auto-flash désactivé — luminosité flash fixe à 100 %';
} catch(e) { console.warn('loadBrightnessConfig:', e); }
}
async function previewBrightness() {
const v = parseInt(document.getElementById('brightness-slider').value);
await api('PUT', `/api/leds/brightness?value=${v}&save=false`);
showToast(`Luminosité ${v}/255 appliquée`, 'info');
}
async function saveBrightness() {
const v = parseInt(document.getElementById('brightness-slider').value);
const status = document.getElementById('brightness-status');
try {
await api('PUT', `/api/leds/brightness?value=${v}&save=true`);
status.textContent = '✅ Sauvegardé';
showToast(`Luminosité ${v}/255 sauvegardée`, 'success');
} catch(e) {
status.textContent = '❌ Erreur';
showToast('Erreur : ' + e.message, 'error');
}
setTimeout(() => { status.textContent = ''; }, 3000);
}
async function setAutoBrightness(enabled) {
const statusEl = document.getElementById('auto-brightness-status');
try {
await api('PUT', `/api/leds/auto-brightness?enabled=${enabled}&save=true`);
statusEl.textContent = enabled
? '✅ Auto-flash actif — le flash s\'adapte à l\'ambiance'
: '⏸ Auto-flash désactivé — luminosité flash fixe à 100 %';
showToast(enabled ? '✅ Auto-luminosité activée' : '⏸ Auto-luminosité désactivée', 'success');
} catch(e) {
showToast('Erreur : ' + e.message, 'error');
document.getElementById('toggle-auto-brightness').checked = !enabled;
}
}
loadBrightnessConfig();
// ════════════════════════════════════════════════════════════════════════════
// Flash LED
// ════════════════════════════════════════════════════════════════════════════
async function loadFlashConfig() {
try {
const effects = await api('GET', '/api/leds/effects');
const cap = effects.capture;
if (!cap) return;
document.getElementById('flash-r').value = cap.color[0] ?? 255;
document.getElementById('flash-g').value = cap.color[1] ?? 200;
document.getElementById('flash-b').value = cap.color[2] ?? 80;
document.getElementById('flash-duration').value = cap.flash_duration ?? 0.30;
document.getElementById('flash-dur-val').textContent = parseFloat(cap.flash_duration ?? 0.30).toFixed(2);
document.getElementById('flash-count').value = cap.flashes ?? 2;
updateFlashPreview();
} catch(e) { console.warn('loadFlashConfig:', e); }
}
function updateFlashPreview() {
const r = parseInt(document.getElementById('flash-r').value) || 0;
const g = parseInt(document.getElementById('flash-g').value) || 0;
const b = parseInt(document.getElementById('flash-b').value) || 0;
document.getElementById('flash-preview').style.background = `rgb(${r},${g},${b})`;
['flash-r','flash-g','flash-b'].forEach(id =>
document.getElementById(id).addEventListener('input', updateFlashPreview, {once:true})
);
}
function colorPickerToRgb(hex) {
const r = parseInt(hex.slice(1,3),16);
const g = parseInt(hex.slice(3,5),16);
const b = parseInt(hex.slice(5,7),16);
document.getElementById('flash-r').value = r;
document.getElementById('flash-g').value = g;
document.getElementById('flash-b').value = b;
updateFlashPreview();
}
function setFlashPreset(r, g, b, dur, flashes) {
document.getElementById('flash-r').value = r;
document.getElementById('flash-g').value = g;
document.getElementById('flash-b').value = b;
document.getElementById('flash-duration').value = dur;
document.getElementById('flash-dur-val').textContent = dur.toFixed(2);
document.getElementById('flash-count').value = flashes;
updateFlashPreview();
}
async function previewFlash() {
await api('POST', '/api/leds/effect?effect=capture');
showToast('Flash test declenche', 'info');
}
async function saveFlash() {
const r = parseInt(document.getElementById('flash-r').value);
const g = parseInt(document.getElementById('flash-g').value);
const b = parseInt(document.getElementById('flash-b').value);
const dur = parseFloat(document.getElementById('flash-duration').value);
const flashes = parseInt(document.getElementById('flash-count').value);
try {
await api('PUT', `/api/leds/effect/capture?r=${r}&g=${g}&b=${b}&flash_duration=${dur}&flashes=${flashes}&save=true`);
showToast('Flash sauvegarde', 'success');
updateFlashPreview();
} catch(e) { showToast('Erreur : ' + e.message, 'error'); }
}
// Liaison input -> preview
['flash-r','flash-g','flash-b'].forEach(id => {
document.getElementById(id).addEventListener('input', updateFlashPreview);
});
loadFlashConfig();
// Init dots
showDots(0);
</script>
{% endblock %}
: '⏸ Auto-flash désactivé — lumi