[v1.1.6] — 2026-06-14
Added
- Update the plugin itself from GitHub. Maintenance → Check for updates is
now a submenu with Update Syncthing binary (the existing binary updater) and
a new Check for plugin updates. The latter checks the plugin's GitHub
releases, shows the release notes, downloads the new version and unpacks it in
place, then offers to restart KOReader. Your settings, paired devices and the
downloaded Syncthing binary are preserved. It prefers the release's install-zip
asset and falls back to the source archive when none is attached. - Android remote mode can update the plugin too. The dedicated Android menu
now includes Check for plugin updates. Remote mode has no plugin-managed
Syncthing binary, so there is no "Update Syncthing binary" item there — only
the plugin updater, with help text that reflects the remote-mode setup.
Fixed
- The conflict menu no longer crashes on open. Tapping Status & conflicts
with one or more conflicts present could crash with anipairs(nil)error in
KOReader'stouchmenu.lua. The conflict screens are flat item lists, so they
now use KOReader'sMenuwidget instead ofTouchMenu(which expects tabbed
tab_item_tableinput). ~-separated conflict files are now detected. Syncthing writes a conflict
copy as eithername.sync-conflict-….extorname~sync-conflict-….ext; both
scanners previously matched only the.form, so~conflicts were never
surfaced (nor de-mangled on resolve). Both separators are handled everywhere now.- Auto-merge no longer runs while a book is open. Reading-progress auto-merge
(after Quick Sync, or the manual Auto-merge progress action) replaces a
KOReader metadata sidecar on disk when the remote copy has higher progress. - The "devices online" count no longer includes this device. Syncthing's
/system/connectionslists the local device itself (markedisLocal, keyed
by the local device ID), so the status header and the Status submenu reported
one device too many — e.g. "1/2 devices online" with a single online peer. - Updates no longer crash on the LuaSocket fallback. When neither curl nor
wget could complete a GitHub request — e.g. an e-reader whose BusyBox wget
cannot negotiate theapi.github.comTLS — the download fell through to
KOReader's built-in LuaSocket transport, which crashed with "attempt to use a
closed file".
Changed
- IgnoreRegistry: a companion may register a LIST of patterns (not just a
single one), and the call REPLACES that plugin's set. A conflict copy is now
matched by de-mangling it to its original name and testing the registered
globs, so a companion registers plain names/globs (state.lua,*.sdr)
without encoding Syncthing's.sync-conflict-…form. Both conflict scanners
share this one matcher, which excludes only genuine conflict copies (a file
that merely contains the text, with no./~separator, is left alone).
The companion API version is now1.1.0. - Enabling auto-merge now requires an explicit double confirmation (on every
device, including Android), mirroring the factory-reset flow. The first dialog
spells out that the winner is chosen by reading position only — so a copy that
is further ahead can overwrite annotations held by a copy that is not the
furthest-read — with a concrete two-device example; a second dialog is the
final confirm. Disabling stays a single tap. - More robust kernel detection for Legacy mode.
kernelState()still tries
uname -rfirst, then falls back to the kernel's own procfs files
(/proc/sys/kernel/osrelease, then/proc/version), so a stripped e-ink
firmware with nounamebinary is still classified instead of falling through
to "unknown". KOReader already relies on procfs for device detection, so it is
present wherever the plugin runs.
Documentation
- README: the UI-string table and the menu tree show real singular/plural forms
instead of the(s)shorthand; the IgnoreRegistry overview documents pattern
lists and conflict-copy matching. - API.md:
IgnoreRegistry:registerdocuments list input and replace semantics,
getAllreturns{ plugin_id = { pattern, … } }, and the new
matchesConflictBasenamemethod is described. - README: the Android (remote mode) section documents the plugin self-updater
(and why there is no binary updater there). - spec/README: the test catalogue is updated to 508 tests across 16 spec files,
adding the plugin-updater logic spec and the download-transport regression spec.