Commit Graph

31 Commits

Author SHA1 Message Date
cd34fd603c Dev build 2026-06-13 00:26 2026-06-13 00:26:35 +02:00
ac640e4c16 Dev build 2026-06-12 23:51 2026-06-12 23:51:25 +02:00
f93703bcc3 Dev build 2026-06-12 23:37 2026-06-12 23:37:14 +02:00
697c893a2f Dev build 2026-06-12 23:28 2026-06-12 23:28:32 +02:00
9daf271a52 Dev build 2026-06-12 23:10 2026-06-12 23:10:46 +02:00
0d19365cca Reader: Page Up/Down scroll within page instead of switching chapters
Chapter navigation stays on the arrow keys. Bump to v0.2.14; reset BUILD=0 for release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 19:23:32 +02:00
84d95dc886 Dev build 2026-06-01 22:17 2026-06-01 22:17:51 +02:00
3093af68d6 Backup & Restore: db-book restore, full/local/upload DB restore with safety rollback; pin postgresql-client 16; sidebar version display-only
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 21:58:02 +02:00
a8aa3e4fbf Release v0.2.12
Summarise the Sepia reading theme, sidebar build-version indicator, and
editor Find & Replace scope option into changelog.py and changelog.md. Reset
the dev BUILD segment to 0 and mark the develop log as released.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 14:03:33 +02:00
3ce9df9bae Editor: Find & Replace scope option
Add a "Current chapter only" checkbox to the Find & Replace modal. When
checked, search/replace runs against the open chapter instead of every chapter
in the book. Default unchecked, preserving the existing all-chapters behaviour.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 14:02:03 +02:00
347f959d80 Sidebar: show running build version
Display the running build version at the bottom of the sidebar (e.g. v0.2.11
for releases, v0.2.11.3 for dev builds), linking to the changelog. New
version.py exposes display_version(); shared_templates.py registers it as the
app_version Jinja global; main.py adds /api/version.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 14:02:03 +02:00
74de3ddee2 Reader: add Sepia reading theme
Add a Dark/Sepia theme toggle to the reader's reading-settings drawer for
easier long-form reading. Sepia uses a warm paper background with dark brown
text via a :root[data-theme="sepia"] palette in theme.css. Text colour is now
stored per theme with theme-specific swatch sets; the old single key migrates
into the dark slot. An inline head script applies the saved theme before paint
to avoid a flash.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 14:00:46 +02:00
5207da0792 Release v0.2.11 2026-05-10 22:43:58 +02:00
1bc2c5c7f2 Release v0.2.10 2026-05-10 22:31:53 +02:00
91f8380a1f Release v0.2.9
Reader: monotonic reading progress across devices — saved position only
advances, never rewinds (explicit Mark as read/unread still resets).

Plus the previously uncommitted v0.2.5–v0.2.8 work (FlareSolverr scraping,
Book Info pages, deferred chapter add/delete, scanned/uploaded backup
counters, Dropbox upload tuning, four inline editor formatting buttons,
migration logging, "New view" needs_review fix, consecutive break-image
collapsing, and the related TECHNICAL.md updates).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 11:50:49 +02:00
aeed71a8ff v0.1.12: reader font size slider, new scrapers, series nav, series_volume, and more
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 21:39:20 +02:00
e4d2e2c636 DB-stored books, full-text search, backup restore, and AO3 scraper
- DB-stored books (Fase 1–6): chapters and images stored in PostgreSQL; grabber writes to DB, EPUB→DB conversion, DB→EPUB export, FTS search page (/search)
- Chapter editor: Monaco editor supports DB-stored books; inline title editing
- Grabber: DB/EPUB storage toggle on Convert page
- Backup: restore from Dropbox snapshot (browse snapshots, restore individual or selected files)
- AO3 scraper: initial implementation
- Changelog: v0.1.2 and v0.1.3 entries added to changelog.py and changelog.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 15:13:08 +02:00
b0cb365f98 Add Changelog page, shared JS/CSS, branding, volume-aware duplicates, and CBR improvements
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 20:03:18 +02:00
b43366723c Add Bulk Import, Following, Incomplete, status overhaul, performance, and CBR fixes
- Bulk Import page: filename pattern parsing, shared metadata, duplicate detection (volume-aware), batch upload with progress
- Following page: track external author URLs; authors table; sidebar counter
- Incomplete view: non-archived books with publication_status ≠ Complete
- Status: added Temporary Hold, renamed Hiatus → Long-Term Hold; statusBadgeHtml() helper
- Status/want-to-read badges: dark fill + ring for readability on any cover colour
- Disk usage warning in sidebar (amber/red thresholds)
- Bulk delete batched via POST /library/bulk-delete
- CBR: magic bytes format detection + py7zr 7-zip support; unrar → proprietary unrar v6
- Performance: IntersectionObserver lazy covers, ETag 304, single DOM pass, json_agg tags
- Duplicate detection in library and Convert page warning
- All books Grid/List toggle; star ratings; reader text colour presets; bookmarks
- Docs: TECHNICAL.md and changelog updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 14:20:25 +02:00
5d83bfccab Performance: lazy covers, ETag caching, single DOM pass, SQL tag aggregation
- IntersectionObserver defers both cover images and placeholder canvas
  drawing until cards enter viewport — eliminates 1000+ upfront ops
- ETag on /library/list: browser gets 304 Not Modified when nothing changed
- Single DOM pass in renderBooksGrid/renderDuplicatesView/renderSeriesDetail:
  card.querySelector replaces second iteration with 500+ getElementById calls
- book_tags joined via json_agg in main query, removing separate SELECT + Python merge
- loadLibrary: error handling prevents silent failures showing as infinite loading
- Delete TODO-PERF-library-load.md (all four bottlenecks resolved)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 01:04:32 +01:00
00e75a6106 Add duplicate detection, Convert warning, and performance TODO
- Convert: warn when title+author already exists in library (preload check)
- Library: Duplicates sidebar section with grouped view and live counter
- Fix: Duplicates view cover loading now uses same canvas/two-pass pattern as renderBooksGrid
- Docs: add TODO-PERF-library-load.md with four identified bottlenecks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 16:22:02 +01:00
2d672ff7bc Add Book Builder: WYSIWYG EPUB editor with draft management and publish flow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 10:24:57 +01:00
1b885e1873 Add bookmarks, bulk delete, series suffixes, CBR/CBZ reader, Dropbox OAuth2, backup progress, autocomplete, and path migration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 08:42:56 +01:00
39eef0a388 Add publisher to PDF and CBR/CBZ storage paths
All formats now use {publisher}/{author} consistently:
- pdf/{publisher}/{author}/{title}.pdf
- comics/{publisher}/{author}/{title}.cbr|cbz
Previously PDF and comics only had {author}, unlike EPUB.
Updated TECHNICAL.md path table accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:56:53 +01:00
f3f9d45d2b Fix CBZ path, add download endpoint, rewrite TECHNICAL.md
- Fix CBZ extension: common.make_rel_path now accepts ext param;
  CBZ files are stored as comics/{author}/{title}.cbz instead of .cbr;
  library.py import passes actual file suffix
- Add GET /download/{filename} endpoint (was 404, referenced in book.html)
- TECHNICAL.md fully rewritten: File Storage Paths section with exact
  path patterns per format, complete endpoint lists for all routers
  including settings.py (previously undocumented), metadata save
  behaviour table, updated Known Bugs Fixed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:53:50 +01:00
92cd301658 Add PDF reader/editor support, fix metadata save and dir cleanup
- PDF reader: page-image rendering via /library/pdf/{filename}?page=N;
  new /api/pdf/info/{filename} endpoint returns page count; reader.html
  branches on FORMAT (epub/pdf) injected by server
- PDF metadata edit: PATCH /library/book now updates DB for all formats;
  _sync_epub_metadata only called for .epub; non-EPUB formats skip file write
- Fix file path on metadata save: _make_rel_path now includes format prefix
  (epub/, pdf/, comics/) matching common.make_rel_path used during import;
  previously files were moved outside their format directory
- Fix empty dir cleanup: prune_empty_dirs always runs after successful
  metadata save, not only when file was moved
- Hide Edit EPUB button for non-EPUB files in book detail
- Docs: TECHNICAL.md and changelog-develop.md updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:47:01 +01:00
e60b86ea7e Standardize remaining UI/config text to English 2026-03-22 19:46:48 +01:00
58268a4906 Implement library/home/stats/backup updates and refresh docs 2026-03-22 19:34:40 +01:00
ced5b25dbe Apply review fixes for reader/editor, backup deps, and env docs 2026-03-22 16:23:42 +01:00
b8ca0c7483 Remove Python cache artifacts from repository 2026-03-22 16:13:54 +01:00
0ae181706d Bootstrap Novela 2.0 implementation and docs 2026-03-22 16:13:45 +01:00