16fd4c8c36
Lecteur d'histoires cadenassé pour le coucher (Android/Flutter). - CLAUDE.md : principes craftsmanship/TDD/clean code/clean archi + decisions techniques - ROADMAP.md : suivi haut niveau des 7 jalons, a tenir a jour par etape - docs/specs/ : specs completes decoupees par jalon, etapes en sous-fichiers - .gitignore Flutter (pubspec.lock versionne, projet applicatif) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
38 lines
2.2 KiB
Markdown
38 lines
2.2 KiB
Markdown
# 2.2 — Service audio (just_audio + audio_service)
|
|
|
|
## Objectif
|
|
Implémenter `PlaybackRepository` avec `just_audio` pour le streaming et
|
|
`audio_service` pour la lecture en arrière-plan / contrôles écran verrouillé.
|
|
|
|
## Périmètre & hors-périmètre
|
|
- Inclus : impl. concrète du repository, configuration `audio_service`, mapping états plugin → `PlaybackState`, mapping erreurs → `PlaybackFailure`.
|
|
- Exclus : domaine (2.1), UI (2.3).
|
|
|
|
## Dépendances
|
|
2.1.
|
|
|
|
## Conception
|
|
- **Data** (`features/playback/data/`) :
|
|
- `JustAudioPlaybackRepository implements PlaybackRepository`.
|
|
- Encapsule un `AudioPlayer` (just_audio) + une `ConcatenatingAudioSource` pour la file.
|
|
- Expose `watch()` en combinant les streams just_audio (`playerStateStream`, `positionStream`, `currentIndexStream`) → `PlaybackState`.
|
|
- Capture les erreurs de source (URL invalide, réseau) → `AudioSourceFailure`.
|
|
- Intégration `audio_service` : `AudioHandler` reliant les commandes système (notification, casque) au repository.
|
|
- **DI** : `playbackRepositoryProvider` (override en test par un fake).
|
|
- **Android** : permissions/manifest requis par `audio_service` (service de premier plan, etc.).
|
|
|
|
## Plan TDD
|
|
1. **Red** : `just_audio_playback_repository_test.dart` — en abstrayant `AudioPlayer` derrière une fine façade mockable : `load` configure la source et `play` délègue ; une exception de source → `AudioSourceFailure`. Le mapping des streams vers `PlaybackState` est vérifié sur des événements simulés.
|
|
2. **Green** : implémenter la façade + le repository + le mapping.
|
|
3. **Validation manuelle** : lire une URL audio de test sur l'appareil (la lecture réelle ne s'automatise pas de façon fiable en unit test) — consigner le résultat.
|
|
4. **Refactor**.
|
|
|
|
## Definition of Done
|
|
- Test du repository vert (façade mockée) ; lecture réelle vérifiée manuellement.
|
|
- Lecture en arrière-plan fonctionnelle (écran éteint = audio continue).
|
|
- `tool/check.sh` passe ; étape 2.2 cochée dans `ROADMAP.md`.
|
|
|
|
## Risques / notes
|
|
- `audio_service` impose une configuration Android précise (manifest, init). Prévoir un temps de mise au point.
|
|
- Garder la frontière nette : aucune logique métier dans cette couche, uniquement adaptation au plugin.
|