Commit Graph
8 Commits
Author SHA1 Message Date
Claude 488e354bf0 Rafraîchissement automatique de la page Enregistrements
- Nouveau bus de notification (recordingsRefreshBus) : la liste se recharge
  immédiatement dès qu'un enregistrement est créé, planifié ou arrêté depuis
  n'importe où dans l'app (guide EPG, modal, widget rapide)
- Polling en arrière-plan : 5 s quand un enregistrement est en cours ou
  planifié, 20 s sinon, pour suivre les changements de statut sans clic
- Rafraîchissement silencieux (pas de spinner ni de vidage de liste) pour
  éviter le clignotement ; les erreurs transitoires ne remplacent pas la liste
- Indicateur « Suivi auto » avec l'heure de dernière actualisation

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015oEu9QayWsw7hCKhenxgVa
2026-08-27 11:15:48 +00:00
Claude f798b43a1e fix(enregistrements): un enregistrement mené à terme n'est plus marqué « échoué »
Chaque enregistrement arrivé au bout de sa fenêtre était marqué
« Échoué / Interruption inattendue du serveur » alors que le fichier était
bien sur le disque : le tick lisait la base AVANT d'arrêter les captures
terminées, si bien que l'instantané annonçait encore « recording » pour un
enregistrement déjà retiré de la table des processus actifs — la détection
d'orphelin le requalifiait aussitôt en échec. La base est désormais lue
après les arrêts, et la requalification revérifie le statut courant.

Deux autres façons de perdre un enregistrement sont corrigées au passage :

- FFmpeg livre encore des morceaux de stderr après la résolution de
  `exitCode` ; écrire sur l'`IOSink` déjà fermé levait une `StateError`
  depuis un callback de stream, donc une erreur asynchrone non rattrapée
  qui tue l'isolate — et avec lui le serveur et toutes les captures en
  cours. Le log passe par un écrivain tolérant et n'est fermé qu'une fois
  stdout et stderr drainés.
- Une coupure amont terminait la capture définitivement. FFmpeg reçoit
  maintenant les options de reconnexion (comme le proxy live), et le
  planificateur relance la capture sur la fin de fenêtre quand le process
  sort trop tôt (backoff 3→30 s, quota remis à zéro après une capture
  saine). Les parties issues des relances sont recollées dans le fichier
  principal via le demuxer `concat`, la lecture reste donc un seul fichier.

Également :
- reprise des captures interrompues par un redémarrage du conteneur tant
  que la fenêtre est ouverte, au lieu d'un échec sec ; fichier partiel
  conservé (statut « terminé ») quand la fenêtre est passée
- `-t` calculé sur le temps restant jusqu'à la fin programmée : un
  démarrage tardif ne rogne plus la fin du programme
- `-hide_banner -nostats` : le log d'enregistrement redevient lisible (et
  ne pèse plus des mégaoctets, il est relu en entier par l'API)
- `RECORDINGS_DIR` et `FFMPEG_PATH` surchargeables, et le motif d'erreur
  est effacé au (re)démarrage d'une capture

Vérifié avec un faux ffmpeg sur un planificateur réel : avant correctif,
un enregistrement mené jusqu'à la fin de fenêtre ressort « failed /
Interruption inattendue du serveur » ; après, « completed » — de même que
la reprise après interruption, la relance après coupure et la fusion des
parties.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E5xWYTbtZwJuYB3E51K243
2026-08-26 19:09:31 +00:00
Claude 57101a62e3 fix: add build_runner step to Dockerfile and update CACHEBUST to v4
Add `dart run build_runner build --delete-conflicting-outputs` step before Flutter build to ensure all generated files (Riverpod and Hive) are fresh and properly generated. This ensures no stale or incompatible generated code causes build failures.

Also update CACHEBUST to v4 to force Docker to bypass cache and apply all recent fixes.
2025-12-08 17:12:15 +00:00
Claude 3c02f509b7 fix: add build_runner step to Dockerfile and update CACHEBUST to v4
Add `dart run build_runner build --delete-conflicting-outputs` step before Flutter build to ensure all generated files (Riverpod and Hive) are fresh and properly generated. This ensures no stale or incompatible generated code causes build failures.

Also update CACHEBUST to v4 to force Docker to bypass cache and apply all recent fixes.
2025-12-08 17:12:15 +00:00
Claude 9878b05128 fix: update CACHEBUST to v3 to force fresh Docker build
Update CACHEBUST arg to 2025-12-08-v3 to ensure Docker doesn't use cached layers and rebuilds with the latest code fixes. This ensures the duplicate height line fix is included in the build.
2025-12-08 17:08:27 +00:00
Claude b3dfde2f45 fix: update CACHEBUST to v3 to force fresh Docker build
Update CACHEBUST arg to 2025-12-08-v3 to ensure Docker doesn't use cached layers and rebuilds with the latest code fixes. This ensures the duplicate height line fix is included in the build.
2025-12-08 17:08:27 +00:00
Claude 2821158a9d fix: remove duplicate style.height assignment in player_screen.dart
Remove duplicate ..style.height = '100%' line that was left over from merge conflict resolution. This duplicate assignment may have been causing Flutter build compilation issues.
2025-12-08 17:07:47 +00:00
Claude 2bb866a14a fix: remove duplicate style.height assignment in player_screen.dart
Remove duplicate ..style.height = '100%' line that was left over from merge conflict resolution. This duplicate assignment may have been causing Flutter build compilation issues.
2025-12-08 17:07:47 +00:00