Commit Graph
741 Commits
Author SHA1 Message Date
pablohc 53ca4f30d5 fix: keyboard feedback #1644 (#1697)
Addresses reviewer feedback from #1644:
- **Localize keyboard hint strings** — 13 hardcoded English strings
replaced with \`tr()\` macro (\`STR_KB_HINT_*\`), making them
translatable across all 22 languages (fallback to English when not yet
translated)
- **Deduplicate \`Lyra3CoversMetrics\`** — now derives from
\`LyraMetrics\` via lambda copy, overriding only \`homeCoverTileHeight\`
and \`homeRecentBooksCount\` (eliminates ~30 duplicated metric fields)
- **Unify keyboard drawing in \`BaseTheme\`** — \`drawTextField\` and
\`drawKeyboardKey\` overrides removed from \`LyraTheme\`; variability
controlled via \`keyboardKeyCornerRadius\` metric (0=Base, 6=Lyra).
Unified text field padding to 6, adopted Lyra's secondary label draw
order (main first, then secondary)
- **Add URL-optimized keyboard layout** — \`urlLayout\` with \`:\` and
\`/\` replacing \`=\` and \`,\` for easier URL input without switching
to SYM mode
---

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 **_
2026-04-27 21:28:36 +02:00
jpirnayandCopilot aed297b2b1 First attempt
Co-authored-by: Copilot <copilot@github.com>
2026-04-27 15:30:43 +02:00
jpirnay 54e7aaef82 Updating vietnamese weekdays 2026-04-27 11:39:08 +02:00
jpirnay 5439b120c3 Merge branch 'master' of https://github.com/jpirnay/crosspoint-reader into feat-vietnam 2026-04-27 11:38:31 +02:00
jpirnay ad7789f53d Introduce toc caching 2026-04-27 11:19:42 +02:00
jpirnay 7bca342d0c Propert utf8 encoding 2026-04-26 22:59:02 +02:00
jpirnay 088710378b Add vietnamese (extend UI fonts) 2026-04-26 22:42:50 +02:00
jpirnayandCopilot 3046a1a94a More cleaningup
Co-authored-by: Copilot <copilot@github.com>
2026-04-26 17:12:52 +02:00
jpirnayandCopilot f0fe02d77a Update logic to avoid collision
Co-authored-by: Copilot <copilot@github.com>
2026-04-26 16:46:22 +02:00
jpirnay a1d0ddec49 Introduce extended button handler 2026-04-26 12:26:29 +02:00
jpirnay 539c66efb3 Language updates 2026-04-25 12:38:53 +02:00
jpirnay dbd2ce8541 Merge pull request #131 from jpirnay/fix-css-text-indent
feat: Honor css defined paragraph intent (and clamp it if necessary)
2026-04-25 11:28:40 +02:00
jpirnay 81a784985e yaclf 2026-04-25 11:19:39 +02:00
jpirnayandCopilot 12372aaafc Clamp indent to page dimensions
Co-authored-by: Copilot <copilot@github.com>
2026-04-25 11:19:04 +02:00
jpirnay c8a2332ed3 Add recommendation 2026-04-25 11:14:21 +02:00
jpirnay 6060607bda Eliminate tmp file creation 2026-04-25 10:54:32 +02:00
jpirnay be6b7fa0c6 Finer granularity of popup methods 2026-04-25 10:32:49 +02:00
jpirnay 920a9e035c Reduce popup progress frequency 2026-04-25 10:24:04 +02:00
jpirnay 17ea700538 Honor css defined paragraph intent 2026-04-25 09:17:26 +02:00
jpirnay 37395f8e0f Final review 2026-04-24 19:42:18 +02:00
jpirnay a73836c594 cppcheck complains 2026-04-24 18:08:37 +02:00
jpirnay 73eee418e0 Merge branch 'master' of https://github.com/jpirnay/crosspoint-reader into feat-rendering-perf 2026-04-24 17:22:10 +02:00
jpirnay 646001a672 Add benchmark 2026-04-24 17:08:53 +02:00
jpirnay 6f31202332 Minor adjustment 2026-04-24 16:37:39 +02:00
jpirnay 7291ccacc8 Further code review 2026-04-24 16:23:14 +02:00
jpirnay c4498cd535 Merge branch 'master' of https://github.com/jpirnay/crosspoint-reader into feat-rendering-perf 2026-04-24 15:47:47 +02:00
jpirnay 7c15c8aa85 Reestablish 1.37 upload behaviour 2026-04-24 15:35:56 +02:00
jpirnayandCopilot 7533ed1a9c Add font foverrides to reader menu
Co-authored-by: Copilot <copilot@github.com>
2026-04-24 11:38:55 +02:00
jpirnay 1bf0278eec Autorefresh after image pages to get rid of ghosting artifacts (#116) 2026-04-24 10:30:07 +02:00
jpirnayandCopilot e968a54e77 Improve nested lists
Co-authored-by: Copilot <copilot@github.com>
2026-04-23 22:04:19 +02:00
jpirnayandCopilot 35735b5175 Add code style
Co-authored-by: Copilot <copilot@github.com>
2026-04-23 21:36:31 +02:00
jpirnayandCopilot 01a9d7cb36 Add TOC support
Co-authored-by: Copilot <copilot@github.com>
2026-04-23 21:27:14 +02:00
jpirnay a90290a596 add Markdown (.md) file reader with formatting support #1698 by dcherrera 2026-04-23 21:00:19 +02:00
jpirnay e299318851 Merge pull request #122 from jpirnay/integrate-pr-1209
feat: multiple opds server support (upstream 1209 by osteotek)
2026-04-23 19:51:34 +02:00
jpirnay e0e3bd4251 Fix reindexing on toc-page-break 2026-04-23 13:15:30 +02:00
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
jpirnay 7c6e4728f4 Add swedish keyboard translations (#1726) 2026-04-23 09:42:01 +02:00
jpirnay 700d7b442b fix: Erroneous navigation with long filenames in footnote links (#1723) 2026-04-23 09:39:58 +02:00
jpirnay e5e825e7a5 Update Italian according to #1718 2026-04-23 09:25:50 +02:00
jpirnay 9116070335 Update Spanish according to upstream #1717 2026-04-23 09:24:39 +02:00
jpirnayandClaude Sonnet 4.6 23a77c6aa5 fontconvert.py: cap group uncompressed size at 64 KB
Script-range boundaries alone don't bound group size — dense Unicode
blocks (CJK, user fonts) can produce groups of hundreds of KB. Add a
64 KB hard cap: when adding the next glyph would exceed it, close the
current group and start a new one with the same script ID.

64 KB is well above the largest current built-in group (~50 KB for
notosans_18 Cyrillic) and a safe transient malloc on the ESP32-C3.
The decompressor side already handles any number of groups per font.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 08:36:36 +02:00
jpirnayandClaude Sonnet 4.6 e76118dff0 FontDecompressor: eliminate persistent hot group buffer
The hot group buffer (formerly up to 50 KB BSS / heap) is removed.
During prewarm, each group is now decompressed into a transient malloc
that is freed immediately after its glyphs are extracted — only one
group buffer and the page buffer coexist at a time.

For getBitmap() cache misses (rare: only hit when a glyph wasn't
covered by prewarm), the group is also decompressed transiently and
freed after the single glyph is compacted into _hotGlyphBuf.

Peak heap during prewarm is now: page buffer + one group buffer.
Outside of prewarm, heap usage is only the page buffer itself.
Works correctly for large future fonts (Vietnamese, CJK) regardless
of group size, with no permanent allocation overhead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 08:31:44 +02:00
jpirnayandClaude Sonnet 4.6 80722118a2 FontDecompressor: heap-allocate hot group buffer sized to active font
Replace the 50 KB static BSS _hotGroupBuf array with a heap pointer
allocated once per font (ensureHotGroupBuf). The buffer is sized to the
largest group in the active font — 6 KB for small fonts, ~50 KB for 18pt
— so no memory is wasted when rendering body text at typical sizes.

The buffer persists across pages (freed only in freeHotGroup/deinit),
so there is exactly one malloc per font session rather than one per page.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 08:14:04 +02:00
jpirnayandClaude Sonnet 4.6 e4170e2272 Font rendering performance improvements
- FontDecompressor: replace heap-allocated std::vector hot-group and glyph
  scratch buffers with static BSS arrays, eliminating per-page malloc/free
  and the heap fragmentation it causes during rendering
- FontDecompressor: add bounds checks on group/glyph buffer sizes; sort
  prewarm group list by ascending index for sequential flash reads
- ParsedText: upgrade line-break cost function to Knuth-Plass cubic badness
  (strongly penalises very loose lines, lenient on moderate looseness)
- ParsedText: exclude gaps before closing punctuation (. , ) » etc.) from
  justification distribution so they stay at natural space width

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 07:33:39 +02:00
jpirnay e30b7a551a Introduction of small helper routines 2026-04-22 07:18:28 +02:00
jpirnay b7928a86e3 Add hotel Wifi connection 2026-04-21 17:15:56 +02:00
jpirnay 425c1db132 Review comments 2026-04-20 21:16:31 +02:00
jpirnay a00712a085 Adjust warnings for x3 2026-04-20 20:50:33 +02:00
jpirnay a6aed8d30e Add additional timezones 2026-04-20 20:40:38 +02:00
jpirnay 966ba71a90 Embrace utf8-counting helpers 2026-04-20 20:16:40 +02:00