From bfcf317f09dc5da1943e7b7bbbd6ec21b29ddd4e Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Fri, 3 Jun 2022 12:00:25 +0200 Subject: [PATCH] Properly set "language" parameter in `opensearch::Query` tag. --- src/search_renderer.cpp | 14 ++++++++++++++ test/server_xml_search.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/search_renderer.cpp b/src/search_renderer.cpp index 8d2fc12b..f80a0f9e 100644 --- a/src/search_renderer.cpp +++ b/src/search_renderer.cpp @@ -87,6 +87,16 @@ void SearchRenderer::setSearchProtocolPrefix(const std::string& prefix) this->searchProtocolPrefix = prefix; } +std::string extractValueFromQuery(const std::string& query, const std::string& key) { + const std::string p = key + "="; + const size_t i = query.find(p); + if (i == std::string::npos) { + return ""; + } + std::string r = query.substr(i + p.size()); + return r.substr(0, r.find("&")); +} + kainjow::mustache::data buildQueryData ( const std::string& searchProtocolPrefix, @@ -99,6 +109,10 @@ kainjow::mustache::data buildQueryData ss << searchProtocolPrefix << "?pattern=" << urlEncode(pattern, true); ss << "&" << bookQuery; query.set("unpaginatedQuery", ss.str()); + auto lang = extractValueFromQuery(bookQuery, "books.filter.lang"); + if(!lang.empty()) { + query.set("lang", lang); + } return query; } diff --git a/test/server_xml_search.cpp b/test/server_xml_search.cpp index 67942157..1f3568fb 100644 --- a/test/server_xml_search.cpp +++ b/test/server_xml_search.cpp @@ -499,14 +499,27 @@ TEST_F(TaskbarlessServerTest, searchResults) return url; } - std::string getPattern() const + std::string extractQueryValue(const std::string& key) const { - const std::string p = "pattern="; + const std::string p = key + "="; const size_t i = query.find(p); + if (i == std::string::npos) { + return ""; + } std::string r = query.substr(i + p.size()); return r.substr(0, r.find("&")); } + std::string getPattern() const + { + return extractQueryValue("pattern"); + } + + std::string getLang() const + { + return extractQueryValue("books.filter.lang"); + } + std::string url() const { return makeUrl(query, start, resultsPerPage); @@ -522,7 +535,7 @@ TEST_F(TaskbarlessServerTest, searchResults) ITEMCOUNT