- CHANGELOG.md : historique complet des fonctionnalités, corrections, limitations - ROADMAP.md : planification des phases restantes (clipboard, watcher, service, Ditto, cross-compile, etc.)
123 lines
5.2 KiB
Markdown
123 lines
5.2 KiB
Markdown
# Changelog — imagod-web
|
||
|
||
Toutes les modifications notables de imagod-web sont documentées ici.
|
||
|
||
Le format est basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/),
|
||
et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||
|
||
---
|
||
|
||
## [0.1.0] — 2026-06-23
|
||
|
||
### 🎯 Vision
|
||
|
||
imagod-web est un **daemon + dashboard web embarqué** pour Imago, le backend intelligent de gestion d'images. Il capture automatiquement les screenshots, les envoie à Imago pour analyse (OCR, AI vision, EXIF), et offre un dashboard responsive pour les consulter.
|
||
|
||
---
|
||
|
||
### 🏗️ Architecture
|
||
|
||
| Composant | Technologie | Statut |
|
||
|-----------|-------------|--------|
|
||
| **Daemon** | Rust (tokio, clap, rusqlite) | ✅ Partiel |
|
||
| **Serveur web** | axum 0.8 + tower-http | ✅ Complet |
|
||
| **Frontend** | Vanilla JS (rust-embed) | ✅ Complet |
|
||
| **Client API** | reqwest (rustls) → Imago v2 | ✅ Complet |
|
||
| **Dédoublonnage** | SHA-256 + SQLite | ✅ Complet |
|
||
| **Temps réel** | WebSocket (broadcast) | ✅ Complet |
|
||
| **Cross-platform** | Windows (arboard, tray) + Linux (notify) | 🏗️ Partiel |
|
||
|
||
---
|
||
|
||
### ✨ Fonctionnalités
|
||
|
||
#### Dashboard Web (`serve`)
|
||
- **Authentification** par clé API Imago (login/logout, localStorage)
|
||
- **Galerie responsive** — grille adaptative desktop/mobile, breakpoints 768px et 400px
|
||
- **Upload par drag & drop** — zone de drop avec feedback visuel
|
||
- **Raccourcis clavier** — `Ctrl+U` pour upload, `Ctrl+V` pour coller depuis le presse-papier
|
||
- **Recherche** plein texte (nom, tags, description, texte OCR)
|
||
- **Pagination** — navigation par pages de 24 images
|
||
- **Modale détail** — aperçu pleine résolution, métadonnées EXIF, texte OCR, description AI
|
||
- **Suppression** — bouton 🗑️ par carte + boîte de dialogue de confirmation
|
||
- **Gestion des tags** — ajout (+), suppression (×), édition inline des tags
|
||
- **Statistiques** — nombre d'images, stockage total, nombre de tags, statut en ligne
|
||
- **Notifications toast** — succès/erreur avec code couleur
|
||
- **FAB mobile** — bouton d'upload flottant en bas à droite sur mobile
|
||
- **WebSocket** — mises à jour en temps réel quand de nouveaux screenshots sont uploadés
|
||
- **Thème sombre** — design moderne, palette cohérente
|
||
|
||
#### Client API Imago v2
|
||
- `GET /api/v1/images` — liste paginée
|
||
- `GET /api/v1/images/search` — recherche plein texte
|
||
- `GET /api/v1/images/{id}` — détail complet (EXIF, OCR, AI, métadonnées)
|
||
- `POST /api/v1/images/upload` — upload multipart
|
||
- `GET /api/v1/images/{id}/thumbnail-url` — thumbnail signé → proxy binaire
|
||
- `GET /api/v1/images/{id}/download-url` — fichier original signé → proxy binaire
|
||
- `DELETE /api/v1/images/{id}` — suppression
|
||
- `PUT /api/v1/images/{id}/tags` — mise à jour des tags
|
||
|
||
#### CLI
|
||
- `imagod-web serve` — démarre le dashboard web sur `0.0.0.0:9199`
|
||
- `imagod-web watcher` — lance le daemon de capture (stub)
|
||
- `imagod-web install` — installation comme service Windows (stub)
|
||
- `imagod-web uninstall` — désinstallation du service (stub)
|
||
- Flags : `--host`, `--port`, `--api-key`, `--api-url`
|
||
|
||
#### Dédoublonnage
|
||
- Hash SHA-256 des images
|
||
- Base SQLite locale (`imagod.db`)
|
||
- Cache LRU configurable
|
||
|
||
#### Configuration
|
||
- Fichier TOML (`~/.config/imagod-web/imagod.toml`)
|
||
- Sections : `[imago]`, `[watcher]`, `[dedup]`, `[server]`
|
||
- Variables d'environnement supportées
|
||
|
||
---
|
||
|
||
### 🐛 Corrections
|
||
|
||
- **Structs Imago v2** — `ExifData`, `OcrData`, `AiData` corrigés pour matcher l'API réelle (champs imbriqués camera/gps, `has_text`, nouveaux champs AI)
|
||
- **Affichage des images** — passage aux URLs signées (`thumbnail-url`/`download-url`) car les endpoints directs `/thumbnail` et `/file` n'existent pas dans Imago
|
||
- **Fallback placeholder** — remplacement du data URI SVG cassé par un placeholder DOM (emoji + texte)
|
||
- **Erreur de décodage Rust** — champ `tags` manquant dans les structs, corrigé avec `Option<Vec<String>>`
|
||
|
||
---
|
||
|
||
### ⚠️ Limitations connues
|
||
|
||
| Problème | Impact | Solution |
|
||
|----------|--------|----------|
|
||
| Clé API sans scope `images:delete` | DELETE → 403 Forbidden | Ajouter le scope dans l'admin Imago |
|
||
| Endpoint `PUT /tags` absent d'Imago | Tags non persistants | Déployer la v2.1 d'Imago |
|
||
| Stockage Imago partiellement cassé | Upload 500, file_size=0 | Correction backend Imago |
|
||
| Pas de support Linux desktop natif | Watcher clipboard inactif | Alternative `wl-clipboard` / `xclip` |
|
||
| Pas de cross-compilation testée | Binaire Linux seulement | CI/CD + tests multi-plateformes |
|
||
|
||
---
|
||
|
||
### 📦 Dépendances clés
|
||
|
||
| Crate | Version | Usage |
|
||
|-------|---------|-------|
|
||
| axum | 0.8 | Serveur HTTP + WebSocket |
|
||
| reqwest | 0.12 | Client HTTP Imago (rustls) |
|
||
| serde / serde_json | 1.x | Serialization JSON |
|
||
| rusqlite | 0.32 | Base de dédoublonnage |
|
||
| rust-embed | 8 | Frontend embarqué dans le binaire |
|
||
| clap | 4 | CLI |
|
||
| tokio | 1 | Runtime async |
|
||
| sha2 | 0.10 | Hashing SHA-256 |
|
||
| dashmap | 6 | État partagé thread-safe |
|
||
| chrono | 0.4 | Formatage dates |
|
||
|
||
---
|
||
|
||
### 🔗 Liens
|
||
|
||
- **Code source** : https://git.dracodev.net/Projets/imagod-web
|
||
- **Backend Imago** : https://git.dracodev.net/Projets/Imago
|
||
- **Auteur** : Bruno Charest <bruno.charest@gmail.com>
|
||
- **Licence** : MIT
|