Release Notes: v4.0.5
✨ New Features
- KOReader Sync & Progress:
- KOReader Progress: The web reader and book details page now display reading progress from KOReader (if available).
- Resume Playback: If you have progress in KOReader but no web-reader progress, the web reader will now intelligently resume from your KOReader position.
- Send-to-eReader Controls:
- Per-User Customization: Added a new setting in user profiles (
/me) to toggle the "Send to eReader" modal. - Direct Send: Users can now disable the modal to trigger an immediate "direct send" to all configured device addresses.
- Admin Control: Admins can manage this setting for other users via the user edit page.
- Per-User Customization: Added a new setting in user profiles (
- EPUB Fixer UI:
- Single-Book Fixer: You can now run the EPUB fixer on a specific book directly from the UI.
- Live Progress: The page now reloads to show progress immediately, and you can cancel stuck runs.
🚀 Improvements
- Cover Handling & Stability:
- Download Limits: Added a configurable size limit (default 15MB) for cover downloads to prevent the server from hanging on massive images (Fixes #1018).
- Optimized Processing: The system now skips ImageMagick conversion if the cover is already a valid JPEG, saving CPU resources.
- Metadata Management:
- Bulk Edit Enforcement: Editing books via the "List View" (bulk edit) now correctly marks metadata as "dirty," forcing the system to write changes (Series, Tags, etc.) into the actual EPUB files (Fixes #998).
- Startup Robustness:
- Network Shares: Improved startup logic for libraries on network shares (NFS/SMB). The system now gracefully handles "disk I/O errors" by disabling WAL mode and redirecting to the DB config page instead of crashing with a 500 error.
- Ingest Directory: Added a preflight check to ensure the
/cwa-book-ingestdirectory is writable. If permissions are wrong, the upload now fails fast with a clear error message instead of failing silently (Fixes #995).
🐛 Bug Fixes
- Kobo & Sync:
- Sync Crash: Fixed a crash caused by books missing
date_addedortimestampfields during Kobo sync (Fixes #1011). - KOReader Malformed Responses: Hardened the sync plugin against malformed responses from the server to prevent KOReader crashes (Fixes #1003).
- Header Auth: Allowed header-based authentication for the
kosyncendpoint.
- Sync Crash: Fixed a crash caused by books missing
- UI & Styling:
- Delete Button: Fixed the delete button in the book details toolbar (Fixes #1000).
- Mobile View: Fixed styling issues on the new book details page for mobile devices.
- Login Page: Polished the login page styling.
- Duplicates Sidebar: Fixed a bug where the "Duplicates" sidebar link would re-appear after every restart. The migration now runs only once (Fixes #1010).
- Kindle EPUB Fixer: Fixed an issue where the fixer would duplicate XML declarations in files that lacked encoding information.
🌍 Translations
- Japanese: Major update with 198 new translations and 155 corrections.
- German: Updated translations for 4.x features.
- Spanish: Improved phrasing and fixed variable names.
- Slovenian & Dutch: General translation updates.
🔧 Technical & CI
- CI Permissions: Fixed permissions issues in the test pipeline by dynamically setting UID/GID for test containers.
- Python Babel: Switched translation scripts to use
python -m babelto avoid issues with broken virtual environment shebangs. - Directory Ownership: Improved how the initialization script parses
dirs.jsonto ensure all required folders (including/cwa-book-ingest) have correct ownership.