#267 Error 404 on Cool Reader for OPDS (3rd click)

Vadim Lopatin
OPDS (7)
David Hooper

Cool Reader needs a bit more smarts put into determining the "relative path" of the opds xml links

I have setup a calibre opds, (and the HTML version is working fine, as is other ebook readers via opds)
However, on the android tablet (in Cool Reader), it shows the main page calibre OPDS page fine, and then the next click works (e.g. "tags")
but when I then choose the next one ("tags starting with z for example) I get the 404

The xml "chain" it has gone through before it fails looks like this
(choose "TAGS")
\Apache2.2\htdocs\opds\_catalog\ 2de82055/2de82055_tags.xml
(this shows the list of tags"
(I choose "starting with z)

I'm therefore, in this folder
\Apache2.2\htdocs\opds\_catalog\ 2de82055/
and the link says

which is effectively the same folder
This is the part where Cool Reader needs some loving. It needs to determine that it is already in that path, and strip out the redundant ../2de2055/ part because it is already in that folder.

Here are the logs showing the html access (ignoring images)
and then the xml access (cool reader opds)
(html access)
"GET /opds/_catalog/index.html HTTP/1.1" 200 35570
"GET /opds/_catalog/header.html HTTP/1.1" 200 175
"GET /opds/_catalog/2de82055/2de82055_tags.html HTTP/1.1" 200 232151
"GET /opds/_catalog/2de82055/2de82055_tags_5a.html HTTP/1.1" 200 23322

(cool reader opds access)
"GET /opds/_catalog/index.xml HTTP/1.1" 200 34396
"GET /opds/_catalog/index.xml HTTP/1.1" 200 34396
"GET /opds/_catalog//2de82055/2de82055_tags.xml HTTP/1.1" 200 233595
"GET /opds/_catalog//2de82055/2de82055/2de82055_tags_5a.xml HTTP/1.1" 404 251

If I inspect the html vs xml file, the actual link in both cases is
so that implies that the client (web browser) is using some smarts to strip that off its' requests, whereas the android app is not.

I can provide a link to my OPDS server if required for testing, or am happy to test for you

p.s, love this app. keep up the good work


  • David Hooper
    David Hooper

    • assigned_to: nobody --> buggins