Le canvas PDF restait vide après rendu (blank-detected): la détection d'encre
reposait sur un seuil de blanc trop sensible et un fond de canvas non maîtrisé.
Le rendu passe à un fond sentinel explicite avec classification
rendered-ok/blank-detected et un seuil de pixels visibles.
Le lecteur est par ailleurs ramené à une base minimale stable: layout plein
viewport (app-main-reader), suppression des modes de lecture et des préférences
par livre, helpers de pagination/viewport extraits dans readerLayout.ts. Shell,
lecteurs CBZ/EPUB et styles alignés sur cette base.
Refs #31
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Rendu PDF via module dédié pdfRender (worker), correction des pages
blanches et gestion des timeouts de rendu
- Lecteur comics : crop plein écran, locators de page unifiés (pdf/cbz/cbr)
avec ancrage pour le calcul de progression
- Sauvegarde de progression mise en file (queueSave) pour éviter les
pertes lors des navigations rapides
- nginx/vite : en-têtes et proxy alignés pour le streaming des livres
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Adaptateurs comic-vine et mangadex avec helper de fetch partagé,
timeouts et fallback durcis sur les providers existants
- Scoring des correspondances amélioré, normalisation de la date de
publication, chaîne de résolution des providers étendue
- Scanner : statuts par livre (scan/enrichissement) et page admin
d'automatisation alignée
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Table series + colonnes seriesId/volumeNumber/volumeLabel sur les livres,
extraction souple des numéros (T03, 003, etc.) via extract-series-volume
- Contrôleur et page de série, badge volume sur les cartes de livre,
styles associés (fond/clarté série, ajustements globaux)
- Statuts de scan/enrichissement et provenance des métadonnées en base
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Le pattern data/storage ne couvrait pas apps/api/data généré quand l'API
tourne depuis son répertoire. On ignore désormais tout dossier data/
runtime, qui contient la base SQLite et les covers/métadonnées extraites.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Recherche de fiches par nom peu fiable : sans ISBN, les providers
étaient interrogés avec des titres bruts peu discriminants.
- extraction de hints locaux (titre/auteur/année/isbn du fichier et du
nom de fichier) persistés dans books.local_metadata_json
- nouveau use-case ScoreMetadataMatch : tri des résultats par score de
correspondance avant sélection du meilleur candidat
- providers (google-books, open-library, bnf, local) durcis et nourris
par les hints ; colonne + index local_metadata_json avec migrations
idempotentes (création et rebuild legacy)
- web : nettoyage de la description de la fiche livre
(cleanBookDescription, white-space pre-line)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Régression worker PDF : le worker pdf.js est désormais instancié une
seule fois via un port dédié (?worker&url) et reconfiguré à chaque
montage, au lieu d'un workerSrc recalculé qui cassait le rendu.
- ReaderShell : chrome commun aux lecteurs (toolbar, zones de tap,
statut) et contrat ReaderControls pour EPUB/PDF/CBZ
- préférences de lecture par livre (mode horizontal/vertical, fit) :
table reader_preferences + migrations idempotentes, module API,
DTO partagés, client web avec fallback localStorage hors-ligne
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
La création d'une bibliothèque déclenche un scan initial avec état de
réessai en cas d'échec; suppression des fallbacks mock sur create/scan
pour ne masquer aucune erreur réelle.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Composant ReaderError avec diagnostic et actions de repli, worker
pdf.js servi localement (pdfWorker) pour éviter les CDN, typage du
view foliate, navigation retour vers la fiche livre et styles lecteur
associés.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Un fichier dont l'ingestion échoue est enregistré en entrée incomplète
(métadonnées minimales) plutôt que d'interrompre le scan; le digest du
job liste les échecs avec exemples tronqués.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>