Kobo and KOReader highlights stop going missing, and the New UI shows what you have started.
docker pull ghcr.io/new-usemame/calibre-web-nextgen:v4.1.39
Most of this release is one subject seen from several sides: highlights you made on a Kobo, in the
web reader, or in KOReader could be silently lost, silently miscoloured, or silently never shown at
all. Each of those had a different cause, and all of them are fixed here.
Highlights
- A KOReader sync can no longer delete a highlight it did not make. It could previously take
ownership of a highlight created on your Kobo or in the web reader and then remove it — sometimes
in that same request. KOReader can still edit the contents of those highlights; it can only
delete the ones it created. - Highlights now work throughout books that keep many chapters in a single file — the shape
almost every Project Gutenberg book has. A Kobo recognises a chapter by the file it lives in, so
in these books only the first chapter per file could hold a highlight; everything you marked in
the rest was saved on the device and never displayed. Newly uploaded, converted, or auto-ingested
books are stored one chapter per file. Measured on a 41-book library: 13 of 1653 chapters could
hold a highlight before this work, 1192 after the existing repair, and 1584 with chapter
splitting on top. Books you have already highlighted are deliberately left alone, because
restructuring them would stop those highlights showing on your device. - Highlights come back in books whose contents links point at an anchor, including safe repairs
to books you converted before upgrading. Sync and open the book on your Kobo to pick up the
repair. - Imported Kobo highlights keep their real colours — yellow, pink, blue, green and grey now
survive aKoboReader.sqliteimport into the reader, the Highlights page and exports. Notes can
again be saved on imported pink and grey highlights. - The KOReader plugin's colour table was wrong four ways. Blue and green arrived swapped, Kobo
pink was misnamed, and greyscale-reader highlights fell back to yellow. The plugin and the server
now share one device-measured mapping. - The repair notice now tells you what to do. It used to say a book had been repaired and that
older highlights might need recreating — true, but not actionable. It now leads with "sync, then
try highlighting again", and gives the fallback for devices that will not re-download on their
own. - The log no longer overstates how many books cannot show highlights, having previously counted
page-number anchors as broken chapters.
The New UI
- A "Reading" badge on books you have started, matching what the classic UI always showed.
Everywhere: library grid, shelves, magic shelves including Currently Reading, and search results.
Until now a part-read book looked identical to one you had never opened. Reported by @magdalar and
@JamesHACS (#1702). - Covers stop re-checking with the server on every scroll, and a book page requests an image
sized for your screen instead of the full original. - Replacing a cover now reaches everywhere it is used — other pages refresh, Kobo is told to
sync it, and the change is written into the downloadable file. - Reduce Motion now stops all seven loading spinners, not four.
- Returning to a browser tab no longer refreshes the entire app. Live polling such as the task
queue is unaffected. - Opening the library no longer fetches a page-sized response it cannot use, removing a failed
request and retry from every load.
Server
- Container updates and restarts shut down promptly instead of running out the full Docker
grace period waiting on the ingest watcher. - An import in progress no longer triggers a false "run a duplicate scan" prompt on bare-metal
installs and servers with a customised ingest marker path.
Also in this release
The Kobo LastModified fix from #1706 — a device sending a timestamp with milliseconds failed the
whole reading-state sync with a generic 400. Reported with a full payload and the correct fix by
@jakejoh; it merged shortly after v4.1.38 was tagged, so this is its first published release.
Thanks to @magdalar, @JamesHACS and @jakejoh for reports that were specific enough to act on
directly.