Port three unmerged upstream PRs with adaptations for the fork's
callback-based ActivityWithSubactivity architecture:
- PR #1185: Cache KOReader document hash using mtime fingerprint +
file size validation to avoid repeated MD5 computation on sync.
- PR #1217: Proper KOReader XPath synchronisation via new
ChapterXPathIndexer (Expat-based on-demand XHTML parsing) with
XPath-first mapping and percentage fallback in ProgressMapper.
- PR #1090: Push Progress & Sleep menu option with PUSH_ONLY sync
mode. Adapted to fork's callback pattern with deferFinish() for
thread-safe completion. Modified to sleep silently on any failure
(hash, upload, no credentials) rather than returning to reader.
Made-with: Cursor
## Summary
- Adds KOReader progress sync integration, allowing CrossPoint to sync
reading positions with other
KOReader-compatible devices
- Stores credentials securely with XOR obfuscation
- Uses KOReader's partial MD5 document hashing for cross-device book
matching
- Syncs position via percentage with estimated XPath for compatibility
# Features
- Settings: KOReader Username, Password, and Authenticate options
- Sync from chapters menu: "Sync Progress" option appears when
credentials are configured
- Bidirectional sync: Can apply remote progress or upload local progress
---------
Co-authored-by: Dave Allie <dave@daveallie.com>