feat: support two-step OpenSearch Description for OPDS search

Servers like copyparty advertise search via a link to an OpenSearch
Description (OSD) document rather than embedding {searchTerms} directly
in the feed's <link rel="search"> href (the Calibre-Web style).

OpdsParser now stores the OSD URL when rel="search" and
type="application/opensearchdescription+xml" but the href lacks
{searchTerms}. OpdsBookBrowserActivity fetches that OSD document after
each feed load and parses the <Url template="..."> element with a
minimal inline expat parser to extract the actual search template.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Brandon Philips
2026-04-15 17:58:02 +02:00
committed by jpirnay
co-authored by Claude Sonnet 4.6
parent bd43221ad9
commit b47e5b5fff
4 changed files with 46 additions and 0 deletions
@@ -46,6 +46,7 @@ class OpdsBookBrowserActivity final : public Activity {
void navigateToEntry(const OpdsEntry& entry);
void navigateBack();
void downloadBook(const OpdsEntry& book);
void fetchOsdTemplate(const std::string& osdUrl);
void launchSearch();
void performSearch(const std::string& query);
bool preventAutoSleep() override { return true; }