11 Commits
Author SHA1 Message Date
bruno 08dca81e7c fix: --config flag ignoré par la commande serve + Config::load_from()
- Ajout de Config::load_from(path) pour charger depuis un chemin custom
- cmd_serve() accepte maintenant un Option<PathBuf> pour --config
- Le flag --config du CLI est maintenant passé à cmd_serve()
- Version bump 0.2.1 → 0.2.2

Corrige le bug où le service Windows NSSM passait --config mais
la commande serve lisait toujours depuis %APPDATA%/imagod-web/imagod.toml
2026-06-30 09:33:22 -04:00
bruno 05d13a7725 feat: implémentation réelle du service Windows via NSSM (install/uninstall) 2026-06-26 08:47:46 -04:00
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 f51d70a646 feat: reset sélection batch au chargement + style toast warning
- initApp() appelle deselectAll() au démarrage (sécurité)
- Toast warning : fond jaune transparent + icône colorée
- Ajout classe toast-icon pour colorer l'icône selon le type
- Correction broadcast WebSocket batch delete (type mismatch)
- Correction compilation Linux : service install/uninstall gated
2026-06-25 12:25:50 -04:00
bruno 7936106227 feat: Phase 10 — Service Windows NSSM + cross-compilation Windows
Phase 10 (service.rs):
- install: télécharge NSSM, installe le service 'ImagodWeb' (auto-start, restart on crash)
- uninstall: arrête et supprime le service
- Service configuré avec: démarrage auto, redémarrage sur crash, délai 5s
- Extraction ZIP NSSM intégrée (crate zip, deflate only)

Phase 12 (cross-compilation Windows):
- Cible x86_64-pc-windows-gnu configurée
- Linker mingw-w64
- Corrections compatibilité: Cow→Vec dans clipboard.rs, API zip v2
- Binaire Windows .exe généré (8.1 MB, statique)

Fix: compilation croisée Windows fonctionnelle
2026-06-25 11:35:00 -04:00
bruno 8e4743b6da chore: mise à jour ROADMAP, CHANGELOG et version v0.2.0
- ROADMAP: phases 3 et 6 marquées complétées avec tests et statuts
- CHANGELOG: v0.2.0 documentée (phases 3/6, fix thumbnails, navigation, tests)
- Cargo.toml: version bump 0.1.0 → 0.2.0
2026-06-25 10:47:53 -04:00
bruno 3bab62733d feat: watcher (phase 3+6) + navigation dashboard (version, changelog, aide)
Phase 3 — Clipboard Watcher (Windows):
- clipboard.rs: détection d'images via arboard, conversion BGRA→PNG
- Gère les doublons consécutifs (même image dans le presse-papier)

Phase 6 — Watcher Loop:
- Windows: polling clipboard → hash → dédoublonnage → upload
- Linux/macOS: polling de dossier configurable (watch_dir)
- Ajout champ watch_dir dans WatcherConfig
- Client Imago cloné avant await (évite problème Send/Sync)

Dashboard:
- Badge version v0.1.0 dans le header
- Barre de navigation: Galerie / Changelog / Aide
- Pages changelog.html et help.html (chargement dynamique)
- Endpoint GET /api/version avec infos build
- Correction import delete inutilisé dans routes.rs
2026-06-25 09:41:51 -04:00
bruno f25174f143 feat: upload drag-drop + responsive mobile
Backend:
- Route POST /api/upload avec multipart (axum 0.8)
- Proxy vers Imago, validation MIME, feedback JSON

Frontend:
- Zone de drop avec drag & drop (effet visuel au survol)
- Bouton Upload dans le header + FAB flottant mobile
- Support Ctrl+V (coller depuis presse-papier)
- Upload multiple, feedback toast (succès/erreur)
- Raccourci Ctrl+U pour upload
- Responsive: 2 breakpoints (768px, 400px)
- Gallery 2 colonnes sur mobile, FAB, toasts bottom
- user-scalable=no, tap-highlight transparent
2026-06-23 10:31:02 -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 b680c0fff7 feat: Phase 7 — CLI complet (start/serve/stop/status/config/logs)
- Gestion PID (write/read/remove + verification processus)
- cmd_start: lance watcher + dashboard avec Ctrl+C graceful shutdown
- cmd_serve: dashboard seul (Linux) avec --no-watcher
- cmd_stop: kill processus via SIGTERM/OpenProcess + nettoyage PID
- cmd_status: affiche PID, dashboard URL, config, polling
- cmd_config show/set/reset: gestion dotted keys (imago.url, watcher.*, etc.)
- cmd_logs: affiche derniers logs
- Fix Default derives: ImagoConfig, DedupConfig, UiConfig, LoggingConfig
- Ajout dependances: open, libc (Unix)
- Watcher::run(self) au lieu de &self pour Send
- tests: start → API /api/health OK → stop → status OK
- 0 errors, 0 warnings (cargo check + cargo build --release)
2026-06-22 16:57:41 -04:00
bruno 38f274c3d5 fix: corriger les erreurs de compilation (Default, Debug, rustls) 2026-06-22 16:47:02 -04:00