Ajoute la possibilité de convertir un livre CBR en CBZ depuis le backoffice. La conversion est sécurisée : le CBR original n'est supprimé qu'après vérification du CBZ généré et mise à jour de la base de données. - parsers: nouvelle fn `convert_cbr_to_cbz` (unar extract → zip pack → vérification → rename atomique) - api: `POST /books/:id/convert` crée un job `cbr_to_cbz` (vérifie format CBR, détecte collision) - indexer: nouveau `converter.rs` dispatché depuis `job.rs` - backoffice: bouton "Convert to CBZ" sur la page détail (visible si CBR), label dans JobRow - migrations: colonne `book_id` sur `index_jobs` + type `cbr_to_cbz` dans le check constraint Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.5 KiB
1.5 KiB
Why
CBR est un format RAR propriétaire qui nécessite des outils tiers non-libres (unrar) pour la lecture. CBZ est un simple ZIP — standard ouvert, mieux supporté par les lecteurs et les outils. Permettre la conversion en backoffice évite une manipulation manuelle des fichiers et garantit une bibliothèque homogène.
What Changes
- Nouvelle fonction
convert_cbr_to_cbz()danscrates/parsers - Nouveau endpoint API
POST /books/:id/convertqui crée un job de conversion - Nouveau type de job
cbr_to_cbztraité par l'indexer - Bouton "Convert to CBZ" sur la page détail d'un livre (visible uniquement si
file_format == 'cbr') - Affichage du type
cbr_to_cbzdans la liste des jobs du backoffice
Capabilities
New Capabilities
cbr-conversion: Conversion d'un fichier CBR en CBZ via un job asynchrone, avec suppression sécurisée du CBR uniquement après vérification du CBZ généré.
Modified Capabilities
Impact
- crates/parsers : nouvelle fonction publique
convert_cbr_to_cbz - apps/api : nouveau endpoint
POST /books/:id/convert, nouveau type de job dansindex_jobs.rs - apps/indexer : nouveau
converter.rs, dispatch dansworker.rs - apps/backoffice : page détail livre + liste des jobs
- infra/migrations : migration
0013_add_book_id_to_index_jobs.sqlpour stocker la cible du job - Dépendances système :
unar(déjà requis) +zipcrate (déjà présent via CBZ)