Commit 0dfca3d
committed
✨ feat: authenticated catalog covers via Coil + thumbnail-rel parsing (#2)
* docs: 📝 design for authenticated catalog cover loading
Documents the gap (Coil uses a default ImageLoader without the OPDS
BasicAuthInterceptor, so calibre-web cover requests 401) and the planned
fix: an ImageLoaderFactory on EReaderApp wired to OpdsHttpClient.okHttp,
plus reordering OpdsClient to prefer rel="…/image/thumbnail" over
rel="…/image" for grid use.
* docs: 📝 implementation plan for catalog covers
Plan for wiring Coil to OpdsHttpClient.okHttp via an ImageLoaderFactory
on EReaderApp, and reordering OpdsClient to prefer rel="…/image/thumbnail"
over rel="…/image". Tests, fixtures, and manual verification steps
included. References the design at
docs/superpowers/specs/2026-05-07-catalog-covers-design.md.
* feat: ✨ prefer OPDS thumbnail rel and survive thumbnail-only feeds
Readium's OPDS model populates pub.subcollections["images"] only when an
opds:image rel is present and silently drops opds:image/thumbnail when it
appears alone. Skip the Readium-routed image extraction and parse cover
links directly from each <entry>, mirroring the existing parseSearchLink
workaround for the analogous {searchTerms} quirk. Within an entry, prefer
opds:image/thumbnail (sized for the 2-col grid) over opds:image, and join
back to Readium's parsed publications via the unique epub acquisition href.
Spec at docs/superpowers/specs/2026-05-07-catalog-covers-design.md updated
to record the discovered Readium behavior.
* feat: ✨ route Coil image loads through authenticated OPDS OkHttp client
Coil's default singleton ImageLoader has no awareness of the OPDS
BasicAuthInterceptor, so cover requests against authenticated calibre-web
instances 401 silently and the catalog grid only ever shows the
gradient+initials fallback. Implement coil.ImageLoaderFactory on
EReaderApp with an ImageLoader built against the existing
OpdsHttpClient.okHttp, so Coil inherits Basic auth (and any future
interceptors) automatically. AppContainer's opdsHttp is promoted from
private to public to be reachable from the Application class.1 parent 14ade5c commit 0dfca3d
8 files changed
Lines changed: 593 additions & 10 deletions
File tree
- app/src/main/java/io/theficos/ereader
- di
- data/opds/src
- main/java/io/theficos/ereader/data/opds
- test
- java/io/theficos/ereader/data/opds
- resources/opds
- docs/superpowers
- plans
- specs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
5 | 7 | | |
6 | | - | |
| 8 | + | |
7 | 9 | | |
8 | 10 | | |
9 | 11 | | |
10 | 12 | | |
11 | 13 | | |
12 | 14 | | |
13 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
14 | 21 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
Lines changed: 41 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
29 | 32 | | |
30 | 33 | | |
31 | 34 | | |
| |||
39 | 42 | | |
40 | 43 | | |
41 | 44 | | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
| 45 | + | |
48 | 46 | | |
49 | 47 | | |
50 | 48 | | |
51 | | - | |
52 | | - | |
| 49 | + | |
| 50 | + | |
53 | 51 | | |
54 | 52 | | |
55 | 53 | | |
| |||
64 | 62 | | |
65 | 63 | | |
66 | 64 | | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
67 | 100 | | |
68 | 101 | | |
69 | 102 | | |
| |||
Lines changed: 25 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
45 | 49 | | |
46 | 50 | | |
47 | 51 | | |
| |||
111 | 115 | | |
112 | 116 | | |
113 | 117 | | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
114 | 139 | | |
Lines changed: 17 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
0 commit comments