101 lines
3.4 KiB
Markdown
101 lines
3.4 KiB
Markdown
|
|
# Changelog
|
||
|
|
|
||
|
|
Toutes les modifications notables de ce projet seront documentées dans ce fichier.
|
||
|
|
|
||
|
|
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/lang/fr/).
|
||
|
|
|
||
|
|
## [Non publié]
|
||
|
|
|
||
|
|
## [0.1.0] - 2025-10-16
|
||
|
|
|
||
|
|
### Ajouté
|
||
|
|
|
||
|
|
#### Structures de base
|
||
|
|
- Struct `Track` pour représenter un track audio avec :
|
||
|
|
- Identifiant unique
|
||
|
|
- Métadonnées (titre, artiste, album, durée)
|
||
|
|
- URI du fichier/flux
|
||
|
|
- URL optionnelle pour l'image/cover
|
||
|
|
- Struct `FifoPlaylist` pour gérer une playlist FIFO avec :
|
||
|
|
- Capacité configurable
|
||
|
|
- Gestion automatique de la rotation (suppression des anciens tracks)
|
||
|
|
- Thread-safety via `Arc<RwLock>`
|
||
|
|
- Support asynchrone avec tokio
|
||
|
|
|
||
|
|
#### Fonctionnalités principales
|
||
|
|
- **Gestion FIFO** :
|
||
|
|
- `append_track()` : Ajoute un track (supprime le plus ancien si capacité atteinte)
|
||
|
|
- `remove_oldest()` : Supprime le track le plus ancien
|
||
|
|
- `remove_by_id()` : Supprime un track par son ID
|
||
|
|
- `clear()` : Vide complètement la playlist
|
||
|
|
- `get_items()` : Navigation partielle avec offset/count
|
||
|
|
|
||
|
|
- **Détection de changements** :
|
||
|
|
- `update_id()` : Compteur incrémenté à chaque modification
|
||
|
|
- `last_change()` : Timestamp de la dernière modification
|
||
|
|
- Compatibilité avec le protocole UPnP ContentDirectory
|
||
|
|
|
||
|
|
- **Génération DIDL-Lite** :
|
||
|
|
- `as_container()` : Génère un Container DIDL-Lite pour ContentDirectory
|
||
|
|
- `as_container_with_parent()` : Génère un Container avec parent_id personnalisé
|
||
|
|
- `as_objects()` : Génère des Items DIDL-Lite avec pagination
|
||
|
|
- Mapping complet Track → DIDL Item (métadonnées, ressources, images)
|
||
|
|
|
||
|
|
- **Image par défaut** :
|
||
|
|
- Image WebP 300x300 intégrée au binaire
|
||
|
|
- Note de musique néon sur fond de briques
|
||
|
|
- Taille optimisée (~10 KB)
|
||
|
|
- Accès via `default_image()`
|
||
|
|
|
||
|
|
#### API ergonomique
|
||
|
|
- Builder pattern pour `Track` :
|
||
|
|
- `with_artist()`, `with_album()`, `with_duration()`, `with_image()`
|
||
|
|
- Méthodes utilitaires :
|
||
|
|
- `len()`, `is_empty()`, `id()`, `title()`
|
||
|
|
- Toutes les méthodes sont asynchrones et thread-safe
|
||
|
|
|
||
|
|
#### Documentation
|
||
|
|
- Documentation complète avec rustdoc
|
||
|
|
- README.md avec :
|
||
|
|
- Guide d'installation
|
||
|
|
- Exemples d'utilisation
|
||
|
|
- API complète
|
||
|
|
- Cas d'usage (radio, album, playlist)
|
||
|
|
- ARCHITECTURE.md avec :
|
||
|
|
- Détails d'implémentation
|
||
|
|
- Design patterns utilisés
|
||
|
|
- Guide d'intégration
|
||
|
|
- Performance et complexité algorithmique
|
||
|
|
|
||
|
|
#### Exemples
|
||
|
|
- `basic_usage.rs` : Utilisation basique de toutes les fonctionnalités
|
||
|
|
- `radio_streaming.rs` : Simulation d'une radio en streaming multi-thread
|
||
|
|
- `http_server_integration.rs` : Intégration avec un serveur HTTP
|
||
|
|
|
||
|
|
#### Tests
|
||
|
|
- 11 tests unitaires couvrant :
|
||
|
|
- Création et état initial
|
||
|
|
- Ajout de tracks
|
||
|
|
- Suppression de tracks (oldest, by_id, clear)
|
||
|
|
- Navigation et pagination
|
||
|
|
- Génération DIDL-Lite
|
||
|
|
- Builder pattern
|
||
|
|
- Gestion de l'update_id
|
||
|
|
- 8 doctests intégrés dans la documentation
|
||
|
|
- 100% de réussite des tests
|
||
|
|
|
||
|
|
### Dépendances
|
||
|
|
- `pmodidl` (local) : Structures DIDL-Lite pour UPnP
|
||
|
|
- `tokio` 1.42.0 : Runtime asynchrone et RwLock
|
||
|
|
- `serde` 1.0.228 : Sérialisation de Track
|
||
|
|
|
||
|
|
### Notes techniques
|
||
|
|
- Edition Rust : 2024
|
||
|
|
- MSRV (Minimum Supported Rust Version) : Non spécifié (version stable recommandée)
|
||
|
|
- Thread-safe : Oui (Arc + RwLock)
|
||
|
|
- Async-first : Toutes les méthodes publiques sont async
|
||
|
|
|
||
|
|
[Non publié]: https://github.com/user/repo/compare/v0.1.0...HEAD
|
||
|
|
[0.1.0]: https://github.com/user/repo/releases/tag/v0.1.0
|