Backoffice complet : materiel, compteur, destinations, cadres, animations
- Onglet Materiel : choix appareil photo + imprimante - Compteur avec limite configurable (399/400) affiche sur l'accueil - Destinations multiples : memoire interne, cle USB, FTP, site web, email - Choix sauvegarder toutes les photos ou seulement les imprimees - Gestion des cadres : activation/desactivation + import - 7 animations de compte a rebours : classique, explosion, rebond, rotation 3D, fondu, emoji fun, tremblement - Preview des animations dans le backoffice - Module destinations.py (copie USB, envoi FTP, compteur) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,7 @@ from backend.camera import camera
|
||||
from backend.gallery import lister_photos, compter_photos, supprimer_photo, vider_galerie
|
||||
from backend.effects import appliquer_filtre, appliquer_overlay, chroma_key, lister_overlays, lister_fonds, FILTRES
|
||||
from backend.collage import creer_strip, creer_collage
|
||||
|
||||
from backend.destinations import distribuer_photo, detecter_usb, compteur_restant, reset_compteur
|
||||
from backend.printer import lister_imprimantes, imprimer
|
||||
from backend.mailer import envoyer_photo
|
||||
from backend.qrcode_gen import generer_qr, qr_galerie
|
||||
@@ -73,10 +73,19 @@ async def api_config_update(modifications: dict):
|
||||
|
||||
@app.post("/api/capturer")
|
||||
async def api_capturer():
|
||||
# Verifier le compteur
|
||||
etat = compteur_restant()
|
||||
if etat["actif"] and etat["restantes"] <= 0:
|
||||
return JSONResponse({"erreur": "Limite de photos atteinte"}, status_code=403)
|
||||
|
||||
chemin = camera.capturer()
|
||||
if chemin is None:
|
||||
return JSONResponse({"erreur": "Echec capture"}, status_code=500)
|
||||
nom = chemin.name
|
||||
|
||||
# Distribuer vers les destinations
|
||||
distribuer_photo(chemin, imprimee=False)
|
||||
|
||||
await diffuser_ws({"type": "photo_capturee", "nom": nom})
|
||||
return {"nom": nom, "chemin": f"/data/photos/{nom}"}
|
||||
|
||||
@@ -206,6 +215,8 @@ async def api_imprimer(donnees: dict):
|
||||
if not chemin.exists():
|
||||
return JSONResponse({"erreur": "Photo introuvable"}, status_code=404)
|
||||
ok = imprimer(chemin)
|
||||
if ok:
|
||||
distribuer_photo(chemin, imprimee=True)
|
||||
return {"succes": ok}
|
||||
|
||||
|
||||
@@ -278,6 +289,60 @@ async def api_upload_fond(fichier: UploadFile = File(...)):
|
||||
return {"nom": fichier.filename}
|
||||
|
||||
|
||||
# --- API Compteur ---
|
||||
|
||||
@app.get("/api/compteur")
|
||||
async def api_compteur_etat():
|
||||
return compteur_restant()
|
||||
|
||||
|
||||
@app.post("/api/compteur/reset")
|
||||
async def api_compteur_reset():
|
||||
reset_compteur()
|
||||
return compteur_restant()
|
||||
|
||||
|
||||
# --- API Destinations ---
|
||||
|
||||
@app.get("/api/usb/detecter")
|
||||
async def api_detecter_usb():
|
||||
return detecter_usb()
|
||||
|
||||
|
||||
# --- API Cadres actifs ---
|
||||
|
||||
@app.get("/api/cadres")
|
||||
async def api_cadres():
|
||||
config = charger_config()
|
||||
tous = lister_overlays()
|
||||
actifs = config.get("cadres", {}).get("actifs", [])
|
||||
return {"tous": tous, "actifs": actifs}
|
||||
|
||||
|
||||
@app.post("/api/cadres")
|
||||
async def api_cadres_update(donnees: dict):
|
||||
actifs = donnees.get("actifs", [])
|
||||
mettre_a_jour_config({"cadres": {"actifs": actifs}})
|
||||
return {"actifs": actifs}
|
||||
|
||||
|
||||
# --- API Animations compte a rebours ---
|
||||
|
||||
ANIMATIONS_CAR = {
|
||||
"classique": "Classique (chiffres simples)",
|
||||
"explosion": "Explosion (chiffres qui eclatent)",
|
||||
"rebond": "Rebond (chiffres qui rebondissent)",
|
||||
"rotation": "Rotation 3D",
|
||||
"fondu": "Fondu enchaine",
|
||||
"emoji": "Emoji fun",
|
||||
"shake": "Tremblement",
|
||||
}
|
||||
|
||||
@app.get("/api/animations")
|
||||
async def api_animations():
|
||||
return ANIMATIONS_CAR
|
||||
|
||||
|
||||
# --- API Systeme ---
|
||||
|
||||
@app.post("/api/systeme/redemarrer")
|
||||
|
||||
Reference in New Issue
Block a user