Release 6.1.0
Featuring an integrated KoSync server, ebook-only sync support, and significant performance improvements.
🚀 New Features
-
Integrated KoSync Server: Implemented a built-in KoSync server with endpoints for progress syncing (PUT/GET /syncs/progress), document management, and "furthest progress wins" logic.
-
Ebook-Only Sync Mode: Full support for syncing ebooks without audiobooks, including dashboard filters and cover display.
-
Progress Suggestions & Logic:
- Audiobooks: Automatically retrieves and offers progress suggestions when starting a new audiobook.
- Ebooks: If using the Internal KoSync Server, starting an ebook will now fetch and display progress suggestions.
- Fallback: If Internal KoSync is not detected, the system defaults to linking the document in "Ebook Only" mode.
-
Performance Overhaul:
- Implemented parallel execution for fetching service states.
- Added
requests.Session()reuse for connection pooling (Keep-Alive). - Added bulk data pre-fetching for Storyteller and ABS to reduce API calls.
- Added MD5 hash cache for KOReader hash computations.
-
SMIL Support: Added validation and auto-fix fallback logic for SMIL transcripts.
-
Auto-Discovery: Added audiobook suggestion priority to KoSync auto-discovery.
-
Delete Cleanup: Removing a book mapping now cleans up external collections (ABS, Booklore shelf, Storyteller).
🐛 Bug Fixes
-
BookNexus Compatibility: Fixed auth validation (
/users/auth) and response formats (stringified booleans) to support BookNexus and BookFuse clients. -
Sync Logic:
- Fixed race conditions in progress syncing with sync locks.
- Fixed "Book not found" crashes and infinite loading bugs.
- Resolved
time_listenedcalculation errors. - Fixed clear progress to delete KoSync document (satisfies furthest-wins logic).
-
KOReader: Updated hash computation to use an exponential sampling algorithm.
-
Booklore: Fixed API timeouts, caching issues, shelf name usage, and search
TypeError. -
UI/UX: Fixed UI lockups, added application icons/favicons, and implemented "Retry Now" for failed jobs.
⚙️ Chores & Refactoring
- Refactored fuzzy matching logic to a shared utility.
- Added regression tests for settings routes and sync logic.
- Added
[abs_id]logging context for better sync correlation. - Standardized ISO 8601 timestamps for sync progress responses.
- Added PR target check workflow to enforce PRs target
devbranch. - Added contribution guidelines (CONTRIBUTING.md).
📝 Configuration Notes
-
Database Migration: New
kosync_documentstable is created automatically on startup - no manual steps required. -
New Environment Variables (Optional):
BOOKLORE_ENABLED- Enable/disable Booklore integration (defaults totrueif configured)BOOKLORE_SHELF_NAME- Shelf name for synced books (defaults toabs-kosync)KOSYNC_USE_PERCENTAGE_FROM_SERVER- Toggle percentage source authority (defaults tofalse)
👥 Contributors
- @giejay - Test fixes and Flask testability improvements