Commit Graph

34 Commits

Author SHA1 Message Date
fcf1760031 feat(web): zoom du lecteur — contrôles +/−/reset (50–300 %) sur PDF et CBZ 2026-08-24 14:28:53 +02:00
b3bd678291 fix(web,api): lecteur PDF — options pdf.js, assets cmaps/fonts et recherche sans limite par défaut 2026-08-24 14:15:25 +02:00
f8c8ffd45c merge: fix/31-reader-pdf-blank-minimal-stable dans develop (détection pages blanches PDF + lecteur minimal stable)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-24 12:52:56 +02:00
50a0b392e1 fix(web): lecteur PDF — pages blanches après rendu et base minimale stable
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>
2026-08-24 12:52:49 +02:00
7cc44871d9 merge: feature/metadata-series-reader-batch dans develop (séries/volumes, providers ComicVine/MangaDex, correctifs lecteur PDF/CBZ)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-24 09:11:34 +02:00
84e789acc4 fix(web): lecteur PDF/CBZ — pages blanches, timeouts et modes fullscreen
- 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>
2026-08-24 09:11:25 +02:00
d79f502dd2 feat(api,web): providers ComicVine + MangaDex et pilotage de l'enrichissement
- 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>
2026-08-24 09:11:18 +02:00
93bb40a8cd feat(api,web): modélisation série + volume et parcours de série
- 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>
2026-08-24 09:11:10 +02:00
34159e5e9b chore: ignorer les données runtime générées par le scan (sqlite, covers, métadonnées)
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>
2026-08-24 08:00:00 +02:00
77c9892be9 merge: fix/reader-worker-metadata-search dans develop (worker pdf.js, shell lecteur, enrichissement par hints)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 18:07:37 +02:00
18d73a4db6 fix(api,web): enrichissement métadonnées — hints locaux et scoring des correspondances
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>
2026-08-23 18:07:29 +02:00
5de46a6f6d fix(web,api): lecteur — worker pdf.js dédié, shell commun et préférences par livre
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>
2026-08-23 18:06:22 +02:00
8024cab11c merge: feat/metadata-automation dans develop (métadonnées multi-providers + automatisation)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:24:18 +02:00
a6488d160f fix(web): admin — scan initial après création, retrait des fallbacks mock
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>
2026-08-23 16:24:02 +02:00
4aacac12da fix(web): lecteurs EPUB/PDF — gestion d'erreurs, worker pdf.js local
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>
2026-08-23 16:24:02 +02:00
f3c6da2889 feat(api): digest de scan avec fichiers incomplets en cas d'échec
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>
2026-08-23 16:23:57 +02:00
c26169bcf2 feat(api): streaming des fichiers livres avec support Range
Réponses 206 partielles avec Content-Range/Accept-Ranges pour la
lecture PDF, types MIME explicites par format, en-tête
Content-Disposition UTF-8 et nosniff.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
2f98c48259 fix(api): robustesse des providers de métadonnées
Recherche ISBN directe sur Open Library avec repli titre/auteur,
normalisation des réponses, timeouts et User-Agent explicites sur les
trois providers distants, abandon de l'extraction de jaquette CBR en
échec silencieux (fallback métadonnées seules), tests des providers et
garde du test de migration si better-sqlite3 est indisponible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
7b72cc0d83 fix(api): chemins de bibliothèques — validation dédiée, alias et unicité
Validation des chemins externalisée (library-path) avec codes d'erreur
explicites, support d'alias LIBRARY_PATH_ALIASES pour traduire un chemin
hôte vers le montage conteneur, rejet des doublons de chemin entre
bibliothèques, documentation README/.env.example et docker-compose
paramétrable via READABOOK_LIBRARY_HOST_PATH.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 16:23:57 +02:00
0fa2f99289 fix(api): migrations idempotentes pour bases existantes (metadata/automation)
Les colonnes metadata_source_config et automation_settings sont
désormais ajoutées par ALTER TABLE conditionnels sur les bases déjà
initialisées, l'index books_isbn13_idx est créé via le chemin de
migration, et un test couvre la base de données existante.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 13:11:06 +02:00
62abf890e0 feat(web): page admin des sources de métadonnées et de l'automatisation
Configuration des providers (activation, priorité, clé API), réglages
d'automatisation (watch des bibliothèques, auto-enrichissement,
planifications scan/enrichissement) et déclenchement manuel, avec
client API, mocks et styles associés.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 13:10:50 +02:00
48e9459cf3 feat(api,shared): métadonnées multi-providers et automatisation des scans/enrichissements
Chaîne de résolution metadata (local, Open Library, Google Books, BNF)
avec activation/priorité/clé API par provider, colonnes isbn13 et
identifiers sur les livres, et intégration au scanner pour compléter
métadonnées et jaquettes manquantes. Module automation: réglages
persistés, planifications scan/enrichissement et déclenchement manuel,
exposés via des endpoints admin.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-23 13:10:45 +02:00
1ac4144d0e merge: feat/17-cbr-support dans develop (support CBR) 2026-08-23 12:08:05 +02:00
369fbb0e07 feat(api,web): support CBR — extraction RAR, scan et lecture d'albums
- api: cbr utilitaire (extraction RAR), scanner/métadonnées (+ tests), books, schéma
- web: ReaderPage/locators (+ tests), mockData, types partagés
- deps: pnpm-lock

Refs: #17
2026-08-23 12:08:05 +02:00
de29850c31 merge: feat/16-cbz-support dans develop (support CBZ) 2026-08-23 11:54:13 +02:00
e5513d81eb feat(api,web): support CBZ — scan, métadonnées, lecteur d'albums
- api: cbz utilitaire commun, scanner/métadonnées (+ tests), books, schéma et migrations
- web: CbzReader, ReaderPage/locators (+ tests), types et client API
- shared: types formats

Refs: #16
2026-08-23 11:52:40 +02:00
a30971f1e9 fix(web): admin bibliothèques — correctifs complémentaires client et AdminPage
- web: AdminPage, client API (+ tests), styles

Refs: #15
2026-08-23 11:36:17 +02:00
39dd130c47 fix(web): admin des bibliothèques — UX, gestion d'erreur, styles
- web: AdminPage (admin bibliothèques), client API, styles
- web: nginx

Refs: #15
2026-08-23 11:28:07 +02:00
4b7d4d45ce merge: feat/14-auth-first-run dans develop (auth + first-run) 2026-08-23 11:13:09 +02:00
0af88a63ca fix(api,web): corrections auth — gestion d'erreur login, messages explicites
- web: auth/errors (+ tests), LoginPage, client API
- api: auth controller/service

Refs: #14
2026-08-23 11:10:08 +02:00
8f7555cfe4 feat(api,web): auth et first-run — bootstrap admin, login, session, gardes
- api: auth controller/service, config env
- web: App/LoginPage/ProfilePage, garde d'auth, client API, styles
- shared: types/contrats auth
- compose: variables d'environnement first-run

Refs: #14
2026-08-23 11:01:00 +02:00
85b56ef3b2 fix(web,api): UI fiche livre et lecteur — progression, locators EPUB/PDF, styles
- web: BookPage/ReaderPage enrichis, sauvegarde de progression lecteur
- web: locators EPUB/PDF normalisés (+ tests), EpubReader/PdfReader ajustés
- web: nginx et service worker ajustés
- api: progress — corrections contrôleur/service

Refs: #13
2026-08-23 10:32:44 +02:00
e94524f119 fix(web,api): débloquer la boucle de chargement 'Inventaire en cours' (Recherche/Admin)
- web: gestion d'erreur et d'état vide sur SearchPage/AdminPage
- web: client API — traitement des réponses sans contenu/erreurs réseau
- api: jobs.service — éviter le statut de scan perpétuellement en cours
- tests: client.test.ts

Refs: #12 (QA non-GREEN faute d'exécution, pas d'échec réel)
2026-08-23 10:01:54 +02:00
8f1140127f chore: initial commit — monorepo ReadaBook (API NestJS, web PWA, Docker) 2026-08-23 09:56:53 +02:00