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>