github crocodilestick/Calibre-Web-Automated v4.0.8
Version 4.0.8 - Kobo First Sync Fixed 📲, Books Waiting in Ingest Now Imported at Startup 📥, Correct "Date Added" Times 🕒, No More Root-Owned Files 🔐, Less Background Load ⚡ and more!

3 hours ago

Release Notes: v4.0.8

Changelog

🐛 Bug Fixes

Kobo

  • First Sync on New Devices: Freshly paired or factory-reset Kobos on current firmware failed their first sync with "Sync failed. Please try again." CWA now answers the device's add-device and token refresh requests, so the first sync completes. (Fixes #1476)

Ingest

  • Books Waiting at Startup: Books already in the ingest folder when CWA starts (copied in while it was down, or left behind by a restart) are now imported straight away, instead of sitting there until something touched them.
  • Polling Mode Repeats: With NETWORK_SHARE_MODE, CWA_WATCH_MODE=poll or Docker Desktop, any file left in the ingest folder was handed to the importer again every 5 seconds. Each file is now picked up once, and again only if it changes.
  • Date Added in Non-UTC Timezones: On containers with a TZ other than UTC, v4.0.7 stored the local time as UTC in a new book's "date added", so fresh imports could sort below books added earlier the same day. Imports now record the real UTC time. The OPDS feed's "updated" time had the same mix-up and is fixed too. (Fixes #1563)

File Ownership

  • Root-Owned Files After Metadata Changes: The cover & metadata enforcer, which runs after every metadata edit, ran as root, so files it created could end up owned by root and block later edits, deletes and folder moves. It now runs as the same abc user as the web app. Together with v4.0.7's change to the ingest service, the services that write into your library all run as abc now. (Fixes #1472)

Duplicates

  • Bulk Delete & Merge: Deleting or merging many books from the Duplicate Manager rebuilt the whole duplicate list after every single book, keeping the web UI busy for the whole operation. It's now rebuilt once per operation, which makes large bulk deletes noticeably quicker. (Thanks to @cd-dr, who found this in PR #1095)

Editing

  • Custom Columns: Saving a book with custom columns no longer fails with a 500 error when the database reconnects mid-save (e.g. while a book is being imported). (Fixes #1536)

KOReader Sync

  • Checksum Errors: With KOReader sync turned off, downloads, imports, the cover enforcer and the EPUB fixer no longer try to store KOReader checksums, which filled the logs with "no such table: book_format_checksums" errors and checksum warnings. (Fixes #1086, #1183)

🚀 Improvements

  • Less Background Load: Open pages no longer ask the server for the duplicate status every 2.5 seconds. It's checked when a page loads, when you come back to the tab and every few minutes, and only polled continuously while a duplicate refresh is running. (Fixes #1288)
  • Background Services Stop Cleanly: The ingest service and metadata change detector now stop and restart properly. The ingest service ignored stop requests, and each restart of the metadata change detector left an extra watcher running, so metadata changes could be processed more than once.
  • Healthcheck: The Docker healthcheck now gives up on its own after a couple of seconds, so a hung web server is reported as unhealthy cleanly instead of leaving connections open. (From PR #1335)
  • Book Loading: The edit page now loads a book's authors, tags, formats, identifiers and custom columns with a few small queries instead of one large combined one.

⚠️ Upgrade Notes

  • Kobo books that never arrived: If your Kobo synced shelves but no books while on v4.0.6, CWA may have marked those books as already sent. After updating, press Force full kobo sync once in your profile so they're sent again. (#1470)

🔧 Technical & CI

  • Tests: The ingest service tests run in CI again, with new coverage for the startup import, the polling watcher, KOReader checksum handling, custom column loading, bulk deletes and the healthcheck.
  • KOReader Setting Check: Checking whether KOReader sync is enabled now takes a single database query instead of re-checking the whole CWA database schema on every download and sync request.

Thanks to our Contributors! 🙏


Supporting the Project ❤️

CWA is and always will be free and open source. If it makes your library life easier and you're able to support development, contributions go directly to:

  • Testing hardware (ereader devices & tablets etc.)
  • Development tools and infrastructure
  • Coffee ☕ (lots of coffee)

ko-fi

Don't miss a new Calibre-Web-Automated release

NewReleases is sending notifications on new releases.