Arthur TazhitdinovandCopilot c867669560 feat: Support for multiple OPDS servers (#1209)
* Add support for configuring and using multiple OPDS servers, replacing
the previous single-server limitation. Closes
https://github.com/crosspoint-reader/crosspoint-reader/issues/1178
* New OpdsServerStore singleton (modeled after WifiCredentialStore) that
persists up to 8 OPDS servers to /.crosspoint/opds.json with MAC-based
password obfuscation.
* One-time migration from legacy single-server fields in
CrossPointSettings to the new store on first boot.
* New OpdsServerListActivity for the device UI — works in two modes: a
settings list (add/edit/delete servers) and a picker (select which
server to browse). When only one server is configured, the picker is
skipped automatically.
* Renamed CalibreSettingsActivity → OpdsSettingsActivity for clarity. It
now edits individual OpdsServer entries (name, URL, username, password,
delete).
* OpdsBookBrowserActivity now receives an OpdsServer at construction and
uses its credentials for all fetches/downloads, and shows the server
name in the header.
* HttpDownloader::fetchUrl and downloadToFile accept optional per-call
username/password parameters instead of reading from global settings.
* REST API endpoints on CrossPointWebServer: GET /api/opds, POST
/api/opds, POST /api/opds/delete — passwords are never exposed over the
API (only a hasPassword flag), and omitting the password field on update
preserves the existing one.
* Web UI (SettingsPage.html) with dynamic OPDS server management cards —
add, edit, save, and delete servers from the browser.
<img width="932" height="906" alt="SCR-20260416-stvu"
src="https://github.com/user-attachments/assets/a8f18d84-4204-46a0-bb31-b73d24b3255f"
/>

* The OpdsServerStore JSON format and obfuscation scheme are identical
to WifiCredentialStore, so the same JsonSettingsIO infrastructure
handles both.
* The web API uses POST /api/opds/delete instead of DELETE /api/opds
because the ESP32 WebServer doesn't support the DELETE method with a
request body.
* Existing single-server configurations are migrated automatically — no
user action required. After migration the legacy CrossPointSettings
fields are cleared so it only runs once.
* The HttpDownloader changes are backward-compatible: the credential
parameters default to empty strings, so existing callers are unaffected.

---

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? _**< YES >**_

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-23 11:14:50 +02:00
2026-04-21 22:16:23 +02:00
2026-04-04 10:05:14 +02:00
2026-04-21 22:16:23 +02:00
2026-04-20 17:40:31 +02:00
2025-12-03 22:06:45 +11:00
2026-04-07 09:29:20 +02:00
2025-12-03 22:06:45 +11:00
2025-12-03 22:06:45 +11:00
2026-04-22 07:04:31 +02:00

CrossPoint Reader ++

This firmware is based on the crosspoint-reader for the XTEINK X4, a great piece of software by Dave Allie and others

Why this fork

Unfortunately the official repository suffers from too many good ideas floating around and a lack of clear governance how to deal with these contributions, so it's lacking fundamental fixes for a proper reading experience (rendering issues, sub-par sync capabilities with KOReader, a popular multi-platform open-source epub reader).

Trying to contribute enhancements / fixes became increasingly difficult as the lack of progress effectively prevented further development.

Therefore this branch focuses on real fixes and real improvements while trying to keep up to pace with developments in the main branch.

What's different

  • Proper KOReader Snychronisation (including https TLS OOM fix)
  • Fixes for a lot of css rendering issues
  • Additional sleep screens support (information overlay, transparent pictures over current reader screen)
  • Clock-Support
  • Weather information panel
  • Multiple under-the-hood performance improvements
  • Book information screen
  • ...

Choosing the right reader...

Your usecase might be completely different from mine, so I try to give an overview of the different reader flavors to my best knowledge. If you know of more variants / have more information, then let me know

Last update: April, 12th, 2026

Reader Visual appeal Functionality Formats Pros Cons Custom fonts CJK Bluetooth
Stock Okay Reader XTC, EPUB, TXT Frequent official updates Lot of rendering issues Yes Yes Yes
THIS FORK: CrossPoint ++ Okay Calibre Wireless support; Proper KOReader progress sync; Wi-Fi transfer; Book Info; Clock, Weather Info EPUB, XTC, TXT Faster integration of functionality Small team No No No
CrossPoint Okay Calibre Wireless support; Limited KOReader progress sync; Wi-Fi transfer EPUB, XTC, TXT Biggest community Least common denominator approach No No No
CrossPet Excellent, Playful Virtual pet motivator; mini-games EPUB, TXT A lot of additional apps Higher battery drain, Small team, bloaty Yes Yes Yes
Papyrix Minimalist Calibre Wireless support; exFAT support EPUB, FB2, MD, TXT A lot of good ideas Small team Yes Yes No
Inx Nice mainly crosspoint functionality plus reading statistics EPUB, XTC, TXT Good reading stats Small team No No No
vCodex Nice mainly crosspoint functionality plus reading statistics EPUB, XTC, TXT Good reading stats Small team No No No
PlusPoint Okay Experimental EPUB, TXT, JS Apps Support for custom JS apps; better RTC Based on older code, small team Yes Yes No
SUMI Nice Lua custom apps; Bluetooth keyboard support for notes; Game Boy emulator; Bluetooth Transfer EPUB, TXT, Markdown, XTC Many apps, customizable, Papyrix fork Single Contributor, No Wi-Fi Yes Yes Yes
S
Description
No description provided
Readme MIT
134 MiB
Languages
C 78.2%
C++ 18.2%
Python 2%
HTML 1.4%