Skip to content

BeePub v0.6.0

Choose a tag to compare

@oalieno oalieno released this 11 Jul 12:17
77f0f9d

Highlights

  • Paragraph-level e-reader sync, both directions — v0.5.0 synced positions between the web reader and KOReader/Readest at chapter granularity; v0.6.0 makes it paragraph-exact. Device→web: the web reader resolves the e-reader's native position (a crengine xpointer like /body/DocFragment[12]/body/div[2]/p[35]/text().260) through the chapter's DOM and jumps to the exact paragraph — this also fixes books where renderer percentage scales diverge so badly (footnote- or image-heavy) that the old chapter fallback looked like the jump did nothing. Web→device: the reader now computes a crengine-style xpointer for every position it saves, and KOReader/Readest pull it and open at the exact paragraph. Positions degrade gracefully (paragraph → in-chapter percentage → chapter start) when a book resists exact resolution. Verified in both directions against a real Kobo running KOReader, and Readest. As far as we know, no other kosync server does cross-renderer position translation at all.

Setup notes

  • Nothing new to configure — paragraph-level sync works through the existing /kosync endpoint for books whose digests already match.

Internal

  • Migration 050 adds a deleted_at tombstone to highlights: deletes are now soft and idempotent, and highlight creation accepts a client-supplied UUID (idempotent re-create revives a tombstoned row). API behavior is unchanged for existing clients; this is groundwork for the upcoming local-first app's two-way highlight sync.
  • The reader now talks to books and sync through BookSource/SyncBackend abstractions (Readium-style locators) instead of calling the BeePub API directly — zero behavior change, groundwork for local books and third-party OPDS/kosync sources on iOS.