Skip to content

Fix empty module list and blank README pages (#765) - #2

Merged
h3nnes merged 1 commit into
h3nnes:fix/android17-iserviceconnectionfrom
JingMatrix:master
Jul 15, 2026
Merged

Fix empty module list and blank README pages (#765)#2
h3nnes merged 1 commit into
h3nnes:fix/android17-iserviceconnectionfrom
JingMatrix:master

Conversation

@h3nnes

Copy link
Copy Markdown
Owner

Symptoms: the module list came up empty and detail pages showed nothing. There were two independent causes.

  1. DNS. With the "doh" setting on, CloudflareDNS resolved every host only through cloudflare-dns.com (bootstrapped on 1.1.1.1) with no fallback. Where Cloudflare is blocked, every lookup fails immediately, so the list, per-module detail and GitHub all fail at once and the app is unusable until DoH is turned off by hand. DoH is now best-effort: on failure it falls back to the system resolver, remembers the failure for the session, and uses a short DoH timeout so the first fallback is quick. This is the fix for the reported empty list.

  2. Endpoints. The old mirror chain no longer serves the list: modules.lsposed.org returns 403 for modules.json, modules-blogcdn returns 418, and modules-cloudflare has no DNS record. Only backup.modules.lsposed.org still serves modules.json; per-module detail (module/.json) is served by both backup and modules.lsposed.org. The single mirror list is split accordingly (list -> backup only; detail -> backup then modules.lsposed.org) and the dead mirrors dropped.

Alongside those:

  • Treat non-2xx and empty/blank/invalid responses as load failures rather than silent successes, and restore the loaded state after a failed refresh so the UI never hangs refreshing. Keep cached data when a remote refresh fails.
  • README: the list payload no longer reliably carries README/releases, so detail is fetched per module on demand. When detail lacks a README, or all detail mirrors are down, fall back to the module's GitHub repo (github.com/Xposed-Modules-Repo/) for the rendered README. The README tab shows a loading state while detail downloads instead of the empty placeholder, and keeps the already-loaded richer module rather than flickering back to the leaner list summary on a repo refresh.
  • Rendering: GitHub now emits the heading permalink anchor as a sibling after the heading, so markdown.css's old heading-descendant hide rule missed it and the floated link icon leaked into the left gutter; hide .anchor outright.
  • "Open in browser" stays on modules.lsposed.org, whose per-module web page (unlike the JSON API host) returns HTML and has no .json suffix.
  • Added logging (tag LSPosedManager, captured by the daemon verbose log) across list and detail loading so future empty-list/empty-detail reports are diagnosable.

Endpoint reference for maintainers:
backup.modules.lsposed.org modules.json 200, module/.json 200
modules.lsposed.org modules.json 403, module/.json 200, /module/ HTML 200
modules-blogcdn 418
modules-cloudflare no DNS record
Each module mirrors a GitHub repo at github.com/Xposed-Modules-Repo/
(README + releases), the ultimate source behind the GitHub fallbacks.


Symptoms: the module list came up empty and detail pages showed nothing.
There were two independent causes.
1. DNS. With the "doh" setting on, CloudflareDNS resolved every host only
through cloudflare-dns.com (bootstrapped on 1.1.1.1) with no fallback.
Where Cloudflare is blocked, every lookup fails immediately, so the
list, per-module detail and GitHub all fail at once and the app is
unusable until DoH is turned off by hand. DoH is now best-effort: on
failure it falls back to the system resolver, remembers the failure for
the session, and uses a short DoH timeout so the first fallback is
quick. This is the fix for the reported empty list.
2. Endpoints. The old mirror chain no longer serves the list:
modules.lsposed.org returns 403 for modules.json, modules-blogcdn
returns 418, and modules-cloudflare has no DNS record. Only
backup.modules.lsposed.org still serves modules.json; per-module detail
(module/<pkg>.json) is served by both backup and modules.lsposed.org.
The single mirror list is split accordingly (list -> backup only;
detail -> backup then modules.lsposed.org) and the dead mirrors dropped.
Alongside those:
- Treat non-2xx and empty/blank/invalid responses as load failures rather
than silent successes, and restore the loaded state after a failed
refresh so the UI never hangs refreshing. Keep cached data when a remote
refresh fails.
- README: the list payload no longer reliably carries README/releases, so
detail is fetched per module on demand. When detail lacks a README, or
all detail mirrors are down, fall back to the module's GitHub repo
(github.com/Xposed-Modules-Repo/<pkg>) for the rendered README. The
README tab shows a loading state while detail downloads instead of the
empty placeholder, and keeps the already-loaded richer module rather
than flickering back to the leaner list summary on a repo refresh.
- Rendering: GitHub now emits the heading permalink anchor as a sibling
after the heading, so markdown.css's old heading-descendant hide rule
missed it and the floated link icon leaked into the left gutter; hide
.anchor outright.
- "Open in browser" stays on modules.lsposed.org, whose per-module web
page (unlike the JSON API host) returns HTML and has no .json suffix.
- Added logging (tag LSPosedManager, captured by the daemon verbose log)
across list and detail loading so future empty-list/empty-detail reports
are diagnosable.
Endpoint reference for maintainers:
backup.modules.lsposed.org modules.json 200, module/<pkg>.json 200
modules.lsposed.org modules.json 403, module/<pkg>.json 200, /module/<pkg> HTML 200
modules-blogcdn 418
modules-cloudflare no DNS record
Each module mirrors a GitHub repo at github.com/Xposed-Modules-Repo/<pkg>
(README + releases), the ultimate source behind the GitHub fallbacks.
---------
Co-authored-by: Qing <44231502+byemaxx@users.noreply.github.com>
Co-authored-by: JingMatrix <jingmatrix@gmail.com>
@h3nnes
h3nnes merged commit 511a41a into h3nnes:fix/android17-iserviceconnectionJul 15, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@h3nnes@Shallow-dusty