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>
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>
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>
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>
- 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>
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>
- 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>
- 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>