diff --git a/ChangeLog b/ChangeLog index a2e542550..b50297a02 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ kiwix-lib 8.2.3 =============== * [OPDS] Correctly set the id of the OPDS stream. + * [OPDS] Do not try to filter the catalog if no filter field is given in the + request. kiwix-lib 8.2.2 =============== diff --git a/src/server.cpp b/src/server.cpp index 7ff57360a..fe33181b1 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -750,17 +750,16 @@ Response InternalServer::handle_catalog(const RequestContext& request) uuid = zim::Uuid::generate(host); bookIdsToDump = mp_library->filter(kiwix::Filter().valid(true).local(true).remote(true)); } else if (url == "search") { - std::string query; - std::string language; - std::vector tags; - std::vector noTags; + auto filter = kiwix::Filter().valid(true).local(true).remote(true); + string query(""); size_t count(10); size_t startIndex(0); try { query = request.get_argument("q"); + filter.query(query); } catch (const std::out_of_range&) {} try { - language = request.get_argument("lang"); + filter.lang(request.get_argument("lang")); } catch (const std::out_of_range&) {} try { count = extractFromString(request.get_argument("count")); @@ -769,20 +768,14 @@ Response InternalServer::handle_catalog(const RequestContext& request) startIndex = extractFromString(request.get_argument("start")); } catch (...) {} try { - tags = kiwix::split(request.get_argument("notag"), ";"); + filter.acceptTags(kiwix::split(request.get_argument("notag"), ";")); } catch (...) {} try { - noTags = kiwix::split(request.get_argument("notag"), ";"); + filter.rejectTags(kiwix::split(request.get_argument("notag"), ";")); } catch (...) {} opdsDumper.setTitle("Search result for " + query); uuid = zim::Uuid::generate(); - bookIdsToDump = mp_library->filter( - kiwix::Filter().valid(true).local(true).remote(true) - .query(query) - .lang(language) - .acceptTags(tags) - .rejectTags(noTags) - ); + bookIdsToDump = mp_library->filter(filter); auto totalResults = bookIdsToDump.size(); bookIdsToDump.erase(bookIdsToDump.begin(), bookIdsToDump.begin()+startIndex); if (count>0 && bookIdsToDump.size() > count) {