feat: téléchargement groupé en zip #7
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/queue-zip-download"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Résumé
Empilée sur #6 (toujours ouverte) — à merger après elle. Remplace le "tout télécharger" par téléchargements individuels décalés (introduit dans #5) par une unique archive zip.
Détails
server/src/routes/queue.ts:GET /api/queue/download-all, construit le zip à la volée depuis les fichiers des élémentscompleted(paquetarchiver, jamais bufferisé en mémoire), noms dédupliqués en cas de titres identiques (Vidéo (2).mp4). Point d'attention : le flux est envoyé à la réponse avantarchive.finalize(), pas l'inverse —finalize()n'aboutit qu'une fois tout le contenu écrit dans le flux, ce qui bloquerait indéfiniment sur une grosse archive si rien ne la lit encore.QueueService:buildDelivery()factorise la logique de livraison (chemin + nettoyage post-envoi) entreconsumeCompletedFile(un fichier) et le nouveauconsumeAllCompletedFiles(tous les fichiers prêts).QueuePanel: le bouton "Tout télécharger (.zip)" déclenche maintenant un seul lien vers/api/queue/download-all. Tous les liens de téléchargement (individuel et groupé) portenttarget="_blank": si jamais rien n'est disponible côté serveur au moment du clic, l'erreur s'ouvre dans un nouvel onglet plutôt que de remplacer l'application.test/helpers.ts:extractOutputDir/waitForfactorisés (dupliqués entre deux fichiers de test) ;waitForaccepte désormais un prédicat async (la version précédente, sync uniquement, aurait toujours vu un prédicat async comme "vrai" immédiatement — unePromiseest truthy).Tests
4 nouveaux tests (65 au total), dont un qui vérifie la signature zip réelle (
PK\x03\x04) sur une archive construite à partir de vrais fichiers temporaires — pas juste des mocks.Vérifications locales
npm run lint(Biome) + tests + typecheck + build, serveur et client : cleanGET /api/queue/download-allrépond bien404sur une file vide, bouton "Tout télécharger" correctement câblé et masqué côté client🤖 Generated with Claude Code