Files
storytime/docs/specs/jalon-2-lecture-audio/02-service-audio.md
T
Vincent Bourdon 16fd4c8c36 docs: cadrage initial Storytime (specs par jalon, roadmap, CLAUDE.md)
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>
2026-06-19 17:03:33 +02:00

2.2 KiB

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.