Repository navigation
Everything since v1.19.
Fixed — sync
- A finished chapter never reached the server. Finishing a chapter queued
read, but a final page-progress record then replaced that queued row with
progress— carrying the read flag correctly, and then having it stripped on
the way out, because progress pushes deliberately omitisRead. The device
showed the chapter read, the queue drained successfully, and every sync
reported nothing to do.isReadis now withheld only when the queued change
does not know the chapter is read, and a progress record no longer overwrites
an explicitreadorunreadalready waiting to send. - Marking a chapter unread on the server was undone. Our sync metadata is
not removed when another client changes the read flag, so the plugin saw its
own last write beside a state that no longer matched, treated that as a tie,
and pushedreadstraight back. When there is nothing unsent locally, the
server now wins — in both directions. An unsent local change still takes
precedence, so a read you have just made is never lost. - Queued changes were never sent after reconnecting. The outbox only
drained on a manual sync or on opening a chapter list. It now also drains
when Wi-Fi returns and when the bookshelf opens. - Finishing a chapter did not mark it read in the list or the cache. Only
the long-press "Mark read" did that, so offline — where nothing refreshes —
a finished chapter went on showing unread. - An expired login was not renewed. The server reports authentication
failures inside a normal response rather than as an HTTP error, so the
automatic token refresh never triggered and pushes failed until you logged in
by hand. - Queue writes are now verified, so a change can no longer be recorded locally
while silently failing to queue.
Fixed — navigation
- KOReader could exit to the device home screen after reading, when closing
the chapter list and then the bookshelf. Opening a chapter closes all three
plugin views, so nothing remained underneath, and an empty screen ends the
application. The file browser is now restored before the last view closes. - Closing the chapter list returned to the bookshelf instead of the manga
you were reading. The way back is now chapter list → manga details →
bookshelf → file browser.
Fixed — bookshelf
- The chosen sort was silently reverted. Opening the shelf sorted the
cached list correctly, then a background refresh replaced it with the
server's own order — title ascending — while the header still named your
sort. - The header now names the sort that was actually applied, not the one
requested, in the rare case a library has no data to sort on.
Changed
- Sort the bookshelf by last read or by newest chapter. Sorting by date
added has been removed: for a library built months ago it answers no useful
question. A saved "Recent" preference becomes "Newest".
Added
- Debug → Sync diagnostics now reports the path index, the open document
and whether it is recognised, unsynced chapter states, the queued rows with
their recorded errors, and a warning when a change is marked unsynced but
never queued. It no longer requires a network connection to show local
findings, and it never writes to the server.
Performance
- Cover statistics were quadratic — the stale count scanned the whole cache
directory once per manga. Now a single pass. - Menu labels no longer recompute six filesystem, database and JSON operations
on every draw. - Chapter lists did one file check per chapter; a 500-chapter series meant 500
system calls each time the list opened. Now one directory listing.
Notes
- Upgrading is a straight folder replacement. Settings, covers, downloads and
queued sync changes are untouched. - 1135 assertions across 20 spec files, clean
luacheckrun across 42 files.
Full Changelog: v1.19...v1.35