fix: miniatures manquantes (résultats de recherche + file d'attente) #8

Closed
kyuno wants to merge 0 commits from fix/video-thumbnails into main
Owner

Résumé

Deux causes distinctes au même symptôme (aucune ligne de liste n'affichait de miniature) :

  • Résultats de recherche de chaîne : bug réel. En --flat-playlist, l'extracteur YouTube de yt-dlp ne renseigne quasiment jamais le champ singulier thumbnail — seulement thumbnails (tableau, trié par résolution croissante). Le parsing ne lisait que thumbnail, donc thumbnailUrl valait toujours null. Passé inaperçu en test car le mock ne reproduisait que la forme théorique (thumbnail), jamais la forme réelle observée en usage. extractThumbnailUrl() lit désormais aussi thumbnails en repli (dernier élément = meilleure résolution).
  • File d'attente : pas une régression, une fonctionnalité qui n'avait jamais existé — QueueItem/QueueItemDto n'avaient aucun champ thumbnailUrl. Ajoutée de bout en bout : POST /api/queue accepte thumbnailUrl (purement informatif, jamais transmis à yt-dlp), QueueService la conserve et l'expose, DownloadForm la transmet depuis les résultats de recherche, QueuePanel l'affiche (miniature 96×54 à gauche de chaque ligne).

Vérifications locales

  • npm run lint (Biome) + tests + typecheck + build, serveur et client : clean (67 tests serveur, dont 2 nouveaux ciblant directement ce bug ; 7 tests client)
  • Testé en navigateur réel : élément ajouté à la file via POST /api/queue avec un vrai thumbnailUrl YouTube, image effectivement chargée (naturalWidth: 480, complete: true) et correctement positionnée dans le DOM rendu.

🤖 Generated with Claude Code

## Résumé Deux causes distinctes au même symptôme (aucune ligne de liste n'affichait de miniature) : - **Résultats de recherche de chaîne** : bug réel. En `--flat-playlist`, l'extracteur YouTube de yt-dlp ne renseigne quasiment jamais le champ singulier `thumbnail` — seulement `thumbnails` (tableau, trié par résolution croissante). Le parsing ne lisait que `thumbnail`, donc `thumbnailUrl` valait toujours `null`. Passé inaperçu en test car le mock ne reproduisait que la forme théorique (`thumbnail`), jamais la forme réelle observée en usage. `extractThumbnailUrl()` lit désormais aussi `thumbnails` en repli (dernier élément = meilleure résolution). - **File d'attente** : pas une régression, une fonctionnalité qui n'avait jamais existé — `QueueItem`/`QueueItemDto` n'avaient aucun champ `thumbnailUrl`. Ajoutée de bout en bout : `POST /api/queue` accepte `thumbnailUrl` (purement informatif, jamais transmis à yt-dlp), `QueueService` la conserve et l'expose, `DownloadForm` la transmet depuis les résultats de recherche, `QueuePanel` l'affiche (miniature 96×54 à gauche de chaque ligne). ## Vérifications locales - `npm run lint` (Biome) + tests + typecheck + build, serveur et client : clean (67 tests serveur, dont 2 nouveaux ciblant directement ce bug ; 7 tests client) - **Testé en navigateur réel** : élément ajouté à la file via `POST /api/queue` avec un vrai `thumbnailUrl` YouTube, image effectivement chargée (`naturalWidth: 480`, `complete: true`) et correctement positionnée dans le DOM rendu. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-17 21:43:58 +02:00
fix: miniatures manquantes (resultats de recherche + file d'attente)
Some checks failed
Publier l'image Docker / test (pull_request) Failing after 4s
Publier l'image Docker / publish (pull_request) Has been skipped
a8cd7ae907
Deux causes distinctes au meme symptome (aucune ligne de liste n'affichait
de miniature) :

- ChannelDiscoveryService : en --flat-playlist, l'extracteur YouTube de
  yt-dlp ne renseigne quasiment jamais le champ singulier `thumbnail`,
  seulement `thumbnails` (tableau, trie par resolution croissante). Le
  parsing ne lisait que `thumbnail` -> thumbnailUrl toujours null. Passe
  inapercu en test car le mock ne reproduisait que la forme theorique,
  jamais la forme reelle observee en prod. extractThumbnailUrl() lit
  desormais aussi `thumbnails`, en repli.
- QueuePanel (file d'attente) : aucun champ thumbnailUrl n'existait sur
  QueueItem/QueueItemDto - fonctionnalite jamais implementee, pas de
  regression. Ajoutee de bout en bout : POST /api/queue accepte
  thumbnailUrl (purement informatif, jamais transmis a yt-dlp),
  QueueService la conserve et l'expose, DownloadForm la transmet depuis
  les resultats de recherche, QueuePanel l'affiche (miniature 96x54 a
  gauche de chaque ligne).

Verifie en navigateur reel (pas seulement les tests) : element ajoute via
POST direct avec thumbnailUrl, image reellement chargee (naturalWidth 480)
et positionnee dans le DOM rendu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno closed this pull request 2026-09-17 21:49:25 +02:00
Some checks failed
Publier l'image Docker / test (pull_request) Failing after 4s
Publier l'image Docker / publish (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/youtubeDownloader#8
No description provided.