v4.12.0
Added
- Novel list filtering —
GET /api/novelsgains sort modes (popular,updated,created,chapters,title_asc,title_desc) via a newNovelSortenum, backed by anovel_popularitymigration and activity-derived popularity scoring - Per-novel tags — tag attachments now live in a dedicated
NovelTagtable (newnovel_tagsmigration) instead of being embedded, with supporting DAO/service changes acrosstags.py,novels.py, andcrawler.py - CLI resume & rate limit (#3105) —
lncrawl crawlgains--resume/--missingto download only not-yet-crawled chapters and--rate-limitto throttle requests;--resumeand--refreshare mutually exclusive novelarrow.com— new source crawler
Changed
- Enums stored as plain scalars — DAO models no longer use native DB enum types; enum columns are stored as plain scalars, removing the need for Postgres enum-sync migrations (new
drop_native_enumsmigration) - Dialect-split schema evolution —
services/db.pyschema evolution is now split by dialect, and the SQLite DB is rebuilt from the current models while preserving data - Sources list not cached —
GET /api/sourcesno longer caches its response
Fixed
novelfull— stop downloading duplicate "half" chapters, and drop an unnecessarysoup.decomposecall in chapter-body parsing- Source language generation — corrected language derivation in the sources helper
New Contributors
- @HaProxyMage made their first contribution in #3104
- @shagunchandel made their first contribution in #3103
Full Changelog: v4.11.0...v4.12.0