Skip to content

refactor(qualite): retirer le grisé d'un serveur sans ffmpeg - #53

Merged
InstaZDLL merged 1 commit into
mainfrom
refactor/retirer-grise-ffmpeg
Sep 11, 2026
Merged

refactor(qualite): retirer le grisé d'un serveur sans ffmpeg#53
InstaZDLL merged 1 commit into
mainfrom
refactor/retirer-grise-ffmpeg

Conversation

@InstaZDLL

@InstaZDLL InstaZDLL commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Pourquoi

La #51 grisait les profils transcodés quand GET /api/v2/transcode/status répondait available: false. Ce cas ne se présente jamais : waveflow-server refuse de démarrer sans ffmpeg (src/lib.rs), si bien qu'un serveur joignable répond toujours available: true.

Le grisé représentait donc un état impossible, et coûtait :

  • du code : un appel réseau à chaque ouverture du compte, un état à trois valeurs dont une erreur, deux messages ;
  • des tests qui éprouvaient cet état impossible ;
  • une ambiguïté sur le contrat client/serveur.

Retrait décidé avec l'utilisateur le 11/09 (docs/PASSATION.md, « La suite », point 1).

Ce qui sort

  • CatalogApi.transcodingAvailable, son implémentation HTTP, TranscodeStatusResponse, CatalogRepository.transcodingAvailable.
  • Dans StreamQualityUiState : transcodingAvailable, isSelectable, isCurrentUnavailable. L'état ne porte plus que le choix courant.
  • Dans StreamQualityViewModel : refresh() et la garde de choose(). Il ne dépend plus du catalogue. Son test n'a plus besoin de Robolectric, qui n'était là que pour android.util.Log.
  • Dans StreamQualitySection : le grisé des lignes et les deux messages d'erreur. La note « S'applique aux pistes lancées ensuite, pas à la file en cours. » reste, et son explication passe en commentaire.
  • MainActivity ne relève plus la capacité du serveur à l'ouverture du compte.

Tests

Onze tests retirés, tous consacrés à l'état retiré : StreamQualitySectionTest en entier (5), quatre de StreamQualityViewModelTest, un serveur sans ffmpeg le dit (HTTP) et un serveur sans ffmpeg grise les profils transcodes (écran).

Ce qui reste couvert : l'écran s'ouvre sur le choix enregistré, un choix s'enregistre, et un appui sur Haute qualité est transmis (ServerScreenTest). Ce dernier test échouerait si la ligne restait inactive.

Pas de validation par retrait : cette PR ne corrige aucun défaut et n'ajoute aucun test de régression, elle retire une fonction.

ktlintCheck detekt testDebugUnitTest vert : 418 tests (429 − 11), aucun avertissement de compilation.

Hors de cette PR

Un transcodage qui échoue en pleine lecture (429, erreur serveur) sera traité avec le 429, point 3 de la suite. Le client ne le devinera pas d'avance : il réagira à la réponse du serveur.

https://claude.ai/code/session_01GH1rcBbYQX41tkDEtKfATL

Summary by CodeRabbit

  • Modifications fonctionnelles

    • La sélection de qualité de streaming reste toujours accessible.
    • Les profils choisis sont désormais enregistrés directement, sans vérification préalable de la disponibilité du transcodage.
    • Une note précise que le réglage s’applique uniquement aux pistes lancées ensuite.
    • L’ouverture d’un compte serveur déclenche uniquement l’actualisation du cache.
  • Tests

    • Les tests liés à la détection de FFmpeg et à la disponibilité du transcodage ont été supprimés ou simplifiés.

waveflow-server refuse de démarrer sans ffmpeg : GET /api/v2/transcode/status
répond toujours available: true. Le grisé des profils transcodés, ses deux
messages et le relevé fait à chaque ouverture du compte défendaient un état
impossible.

Sortent l'appel au statut du transcodage, sa réponse, le dépôt, et ce que
l'état et le ViewModel de la qualité en tiraient. Les onze tests qui
éprouvaient cet état sortent avec lui.

Claude-Session: https://claude.ai/code/session_01GH1rcBbYQX41tkDEtKfATL
@github-actions github-actions Bot added scope: data Persistence, scanning, repositories scope: ui Views, components, theming, assets scope: tests Unit and UI tests type: refactor Code refactoring size: l 200-500 lines labels Sep 11, 2026
@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: b19d466e-c0d9-4d1e-8051-8aef31f9026d

📥 Commits

Reviewing files that changed from the base of the PR and between 722b162 and aae52e8.

📒 Files selected for processing (12)
  • app/src/main/java/app/waveflow/MainActivity.kt
  • app/src/main/java/app/waveflow/data/remote/CatalogApi.kt
  • app/src/main/java/app/waveflow/data/remote/CatalogRepository.kt
  • app/src/main/java/app/waveflow/data/remote/Dto.kt
  • app/src/main/java/app/waveflow/data/remote/HttpCatalogApi.kt
  • app/src/main/java/app/waveflow/ui/quality/StreamQualitySection.kt
  • app/src/main/java/app/waveflow/ui/quality/StreamQualityViewModel.kt
  • app/src/test/java/app/waveflow/data/remote/HttpCatalogApiTest.kt
  • app/src/test/java/app/waveflow/testing/ServerFakes.kt
  • app/src/test/java/app/waveflow/ui/quality/StreamQualitySectionTest.kt
  • app/src/test/java/app/waveflow/ui/quality/StreamQualityViewModelTest.kt
  • app/src/test/java/app/waveflow/ui/server/ServerScreenTest.kt
💤 Files with no reviewable changes (8)
  • app/src/main/java/app/waveflow/data/remote/CatalogRepository.kt
  • app/src/test/java/app/waveflow/data/remote/HttpCatalogApiTest.kt
  • app/src/main/java/app/waveflow/data/remote/Dto.kt
  • app/src/test/java/app/waveflow/testing/ServerFakes.kt
  • app/src/test/java/app/waveflow/ui/server/ServerScreenTest.kt
  • app/src/test/java/app/waveflow/ui/quality/StreamQualitySectionTest.kt
  • app/src/main/java/app/waveflow/data/remote/HttpCatalogApi.kt
  • app/src/main/java/app/waveflow/data/remote/CatalogApi.kt

Included review availability: 3 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 8 reviews per hour.


📝 Walkthrough

Walkthrough

La détection distante de ffmpeg est supprimée. Le ViewModel de qualité dépend uniquement des préférences. Tous les profils restent sélectionnables. Les tests liés au transcodage sont retirés ou simplifiés.

Changes

Sélection de qualité sans détection distante

Layer / File(s) Summary
Suppression du contrat de transcodage
app/src/main/java/app/waveflow/data/remote/..., app/src/test/java/app/waveflow/data/remote/..., app/src/test/java/app/waveflow/testing/...
transcodingAvailable, TranscodeStatusResponse et l’endpoint api/v2/transcode/status sont supprimés des API, du dépôt, du DTO et des faux catalogues. Le test HTTP associé est supprimé.
Simplification du flux de qualité
app/src/main/java/app/waveflow/ui/quality/..., app/src/main/java/app/waveflow/MainActivity.kt
StreamQualityViewModel utilise uniquement PreferencesStore. choose enregistre chaque profil. L’interface affiche une sélection toujours active. L’ouverture du compte serveur ne rafraîchit plus le ViewModel de qualité.
Mise à jour des tests de qualité
app/src/test/java/app/waveflow/ui/quality/..., app/src/test/java/app/waveflow/ui/server/ServerScreenTest.kt
Les tests conservent l’ouverture et l’enregistrement d’un profil. Les scénarios liés à ffmpeg, aux profils non servis et aux erreurs serveur sont supprimés.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Refactor

Merge Risk: ⚪ Minimal · up to aae52

The quality-selection flow now consistently relies on local preferences and removes the obsolete server capability check without an identified current-head regression.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 4 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Le titre décrit clairement le retrait du grisé des profils transcodés pour un serveur sans FFmpeg. Il suit le format Conventional Commits avec le scope qualite.
Description check ✅ Passed La description explique la motivation, les changements, les tests exécutés et le périmètre exclu. Elle ne reprend toutefois pas les sections du modèle, la checklist, les captures d’écran ni un lien Gi…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/retirer-grise-ffmpeg

Comment @coderabbitai help to get the list of available commands.

@InstaZDLL InstaZDLL self-assigned this Sep 11, 2026
@InstaZDLL
InstaZDLL merged commit e671937 into main Sep 11, 2026
4 checks passed
@InstaZDLL
InstaZDLL deleted the refactor/retirer-grise-ffmpeg branch September 11, 2026 20:37
InstaZDLL added a commit that referenced this pull request Sep 11, 2026
main = 9ff45f5, 455 tests. Les #52, #53 et #54 sont fusionnées : le cache
d'un transcodage inachevé, le retrait du grisé, et le déplacement dans un
morceau transcodé. Du lot 4 il reste le 429 et le profil Automatique.

Consigné pour la suite : les règles vivent dans
docs/deplacement-dans-un-transcodage.md, ce que les sources de media3 ont
appris sur l'enveloppe du lecteur, et la leçon de la revue — relire ce
qu'une note affirme avec la même sévérité qu'un test.

Claude-Session: https://claude.ai/code/session_01GH1rcBbYQX41tkDEtKfATL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: data Persistence, scanning, repositories scope: tests Unit and UI tests scope: ui Views, components, theming, assets size: l 200-500 lines type: refactor Code refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant