Commit Graph
6 Commits
Author SHA1 Message Date
bruno 5a2e12da01 fix: anti-doublon upload — lock mémoire in-flight + garde click/drag frontend
- Backend: Mutex<HashSet> pour bloquer les uploads concurrents du même hash (409 Conflict)
- Backend: logs tracing pour tracer chaque upload entrant
- Frontend: flag isDragging pour éviter le double déclenchement click+drag
- Dépendance: ajout hex = 0.4 pour log du hash

Corrige le bug où un seul fichier uploadé générait 4 copies sur Imago.
2026-06-25 14:23:55 -04:00
bruno e867dadb1f fix: synchronisation dédoublonnage entre upload web et watcher
- Ajout de dedup_db_path dans AppState (partagé avec le watcher)
- upload_image() calcule le SHA-256 avant upload et marque le hash
  dans la DB de dédoublonnage après succès
- Le watcher voit maintenant les fichiers uploadés via le dashboard
  comme 'déjà vus' → plus de doublons watcher/drag-and-drop
- Correction compilation: indentation du match upload_image
2026-06-25 13:18:08 -04:00
bruno 0fce8f6727 feat: build.rs — génération automatique des pages HTML depuis CHANGELOG.md et ROADMAP.md
- build.rs convertit CHANGELOG.md → changelog.html et ROADMAP.md → help.html
- Injection automatique de la version Cargo.toml dans toutes les pages
- Correction du routage : /changelog et /help sans .html fonctionnent
- Templates changelog.tmpl.html et help.tmpl.html avec placeholders {{VERSION}}
- Plus jamais de désynchronisation entre .md et pages web !
- v0.2.0 affichée partout (index, changelog, help, API)
2026-06-25 11:16:33 -04:00
bruno a020cc3099 feat: login écran + clé API utilisateur + affichage nom connecté
- Route POST /api/auth/validate (backend) : valide la clé contre Imago
- AppState supporte clé dynamique (X-Api-Key header utilisateur)
- Écran de login overlay avec champ clé API + validation
- Nom d'utilisateur affiché dans le header (👤 bruno) avec bouton logout
- Stockage clé + nom dans localStorage (persiste entre sessions)
- Tous les appels API incluent X-Api-Key du frontend
2026-06-23 11:14:44 -04:00
bruno e92da02067 feat: Phase 9 — Dashboard web embarqué
- Frontend vanilla JS (18.9KB) : dark theme, gallery grid, search, stats, WebSocket
- rust-embed : frontend servi depuis le binaire (zéro dépendance externe)
- API REST fonctionnelle : /api/health, /api/images, /api/search, /api/images/:id, /api/stats
- WebSocket hub (dashmap + broadcast) : notifications temps réel
- ImagoClient: méthode get_raw() pour proxy thumbnails, Serialize sur ImageInfo
- MIME guess pour servir CSS/JS/images avec bons headers
- Fallback SPA : routes inconnues → index.html
- Dépendances : tokio-stream, futures-util, dashmap, chrono
- Testé : health OK, stats JSON, dashboard 18.9KB HTML, WS upgrade 400 (HTTP)

0 errors, 0 warnings (cargo check + build --release)
2026-06-22 17:05:49 -04:00
bruno a3b853de04 chore: initialiser le projet imagod-web (Rust)
- Structure du projet Cargo avec dépendances (clap, axum, reqwest, rusqlite, arboard, tray-icon)
- CLI avec sous-commandes start, serve, stop, status, config, install, uninstall, logs
- Module config: parsing TOML, chemins Windows/Linux
- Module dedup: dédoublonnage SHA-256 avec cache SQLite
- Module imago_client: client HTTP pour API Imago (upload, search, get)
- Module watcher: boucle de polling stub
- Module server: serveur web axum avec routes API REST stub
- Platform-specific: clipboard, tray, service, window_info (Windows)
- Frontend placeholder HTML
- Config par défaut (imagod.toml)
- README.md, LICENSE (MIT), .gitignore
2026-06-22 16:44:47 -04:00