7.2 KiB
7.2 KiB
Domaine Import - Analyse et Import de Fichiers CBZ/CBR
Vue d'ensemble
Ce domaine permet l'import de fichiers CBZ/CBR dans Mangarr en utilisant l'analyse intelligente de noms de fichiers pour trouver automatiquement les correspondances avec les mangas de la bibliothèque.
Architecture
Structure des Dossiers
domain/import/
├── domain/
│ └── entities/
│ └── FileImport.js # Entité représentant un fichier à importer
├── infrastructure/
│ └── api/
│ └── apiImportRepository.js # Client API
├── application/
│ └── store/
│ └── newImportStore.js # Store Pinia principal
└── presentation/
├── pages/
│ └── NewImportPage.vue # Page principale d'import
└── components/
├── FileImportCard.vue # Carte de fichier à importer
├── ImportResults.vue # Résumé des résultats
└── StatusBadge.vue # Badge de statut
Fonctionnalités
1. Upload de Fichiers
- Drag & Drop : Support du glisser-déposer pour les fichiers CBZ/CBR
- Sélection multiple : Import de plusieurs fichiers simultanément
- Validation : Vérification automatique des formats acceptés
2. Analyse Intelligente
-
Extraction automatique : Le système analyse le nom de fichier pour extraire :
- Le titre du manga
- Le numéro de chapitre (si présent)
- Le numéro de volume (si présent)
-
Correspondance automatique :
- Recherche des mangas correspondants dans la bibliothèque
- Score de correspondance pour chaque résultat
- Sélection automatique du meilleur match
3. Sélection et Validation
- Sélection de manga : Dropdown avec tous les mangas correspondants et leur score
- Prévisualisation : Affichage de la couverture et des informations du manga sélectionné
- Édition des numéros : Possibilité de modifier les numéros de chapitre/volume extraits
- Exclusivité : Un fichier ne peut être importé que comme chapitre OU volume (pas les deux)
4. Import
- Import unitaire : Import fichier par fichier
- Import groupé : Import de tous les fichiers prêts en une seule fois
- Retry : Possibilité de réessayer en cas d'erreur
- Suivi en temps réel : Indicateurs de progression et statuts
5. Résultats
- Statistiques : Nombre de fichiers importés, erreurs, total
- Détails : Liste des fichiers importés avec leurs associations
- Erreurs : Affichage détaillé des erreurs pour débogage
API Endpoints Utilisés
Analyse de fichiers
GET /api/manga-matches?filename={filename}
Retourne :
{
"matches": [
{
"id": "string",
"title": "string",
"slug": "string",
"alternativeSlugs": ["string"],
"thumbnailUrl": "string",
"matchScore": 100
}
],
"chapterNumber": 1.5,
"volumeNumber": 2.0,
"possibleTitles": ["string"]
}
Import de fichier
POST /api/chapters/import
FormData :
file: Le fichier CBZ à importermangaId: ID du mangachapterNumber: Numéro de chapitre (float, optionnel)
Réponse (200) :
{
"message": "Chapter imported successfully",
"mangaId": "uuid",
"chapterNumber": 1.5
}
Erreurs :
404: Manga ou Chapitre non trouvé422: Paramètres invalides ou fichier absent400: Fichier CBZ invalide
Import de volume (À venir)
POST /api/volumes/import
FormData :
file: Le fichier CBZ à importermangaId: ID du mangavolumeNumber: Numéro de volume (int)
Store Pinia
Le store newImportStore gère tout l'état de l'application :
État
files: Liste des fichiers en cours de traitementanalyzingFiles: Set des IDs de fichiers en analyseimportingFiles: Set des IDs de fichiers en importisLoading: État de chargement globalglobalError: Erreur globale éventuelle
Getters
pendingFiles: Fichiers en attente d'analyseanalyzedFiles: Fichiers analysésreadyFiles: Fichiers prêts pour l'importimportedFiles: Fichiers importés avec succèserrorFiles: Fichiers en erreurhasReadyFiles: Au moins un fichier prêtallFilesProcessed: Tous les fichiers traitésprogressPercentage: Pourcentage de progression
Actions Principales
addFiles(fileList): Ajoute des fichiers et lance l'analyse automatiqueanalyzeFile(fileId): Analyse un fichier spécifiquesetFileManga(fileId, manga): Définit le manga sélectionnésetFileChapterNumber(fileId, number): Définit le numéro de chapitresetFileVolumeNumber(fileId, number): Définit le numéro de volumeimportFile(fileId): Importe un fichierimportAllReadyFiles(): Importe tous les fichiers prêtsautoSelectBestMatches(): Sélection automatique des meilleurs matchsretryFile(fileId): Réessaye l'analyse ou l'import d'un fichier
Entité FileImport
Représente un fichier dans le processus d'import :
Propriétés
file: Objet File du navigateurfilename: Nom du fichier originalanalysis: Résultat de l'analyse (matches, chapterNumber, volumeNumber)selectedManga: Manga sélectionné par l'utilisateurselectedChapterNumber: Numéro de chapitre (auto ou manuel)selectedVolumeNumber: Numéro de volume (auto ou manuel)status: pending | analyzed | importing | imported | errorerrorMessage: Message d'erreur le cas échéant
Méthodes Utiles
hasMatches(): Vérifie si des correspondances ont été trouvéesgetMatches(): Retourne la liste des correspondancesgetBestMatch(): Retourne la meilleure correspondanceisReadyForImport(): Vérifie si le fichier est prêt à être importégetImportData(): Prépare les données pour l'API d'import
Workflow Utilisateur
- Upload: L'utilisateur glisse-dépose ou sélectionne des fichiers CBZ/CBR
- Analyse automatique: Chaque fichier est analysé pour extraire les informations
- Sélection auto: Le meilleur match est automatiquement sélectionné
- Validation: L'utilisateur peut modifier le manga ou les numéros si nécessaire
- Import: Import unitaire ou groupé des fichiers prêts
- Résultats: Affichage du résumé avec succès et erreurs
Gestion des Erreurs
Erreurs d'analyse
- Aucun manga trouvé → Message informatif, possibilité de réessayer
- Erreur réseau → Message d'erreur, bouton retry disponible
Erreurs d'import
- Échec d'upload → Fichier marqué en erreur avec message détaillé
- Erreur serveur → Fichier en erreur, possibilité de retry
Améliorations Futures
- Recherche manuelle : Permettre la recherche manuelle si aucun match
- Multi-sélection : Sélectionner plusieurs fichiers pour actions groupées
- Historique : Garder un historique des imports récents
- Validation avancée : Vérifier si le chapitre/volume existe déjà
- Métadonnées : Extraire et afficher plus de métadonnées des fichiers CBZ
Composants Réutilisables
Depuis Shared
FileUpload.vue: Zone d'upload avec drag & dropLoadingSpinner.vue: Indicateur de chargement
Spécifiques au Domaine
FileImportCard.vue: Carte complète de gestion d'un fichierStatusBadge.vue: Badge de statut avec couleursImportResults.vue: Résumé des résultats d'import