diff --git a/.travis.yml b/.travis.yml index 00a9e5d63..855b79df9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ sudo: true cache: ccache before_install: - PATH=$PATH:$HOME/bin +- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew unlink python@2; brew link --overwrite python@3; fi install: travis/install_deps.sh script: travis/compile.sh env: diff --git a/ChangeLog b/ChangeLog index 9172b7357..b50297a02 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +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 180a1c101..fe33181b1 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -742,7 +742,6 @@ Response InternalServer::handle_catalog(const RequestContext& request) kiwix::OPDSDumper opdsDumper; opdsDumper.setRootLocation(m_root); opdsDumper.setSearchDescriptionUrl("catalog/searchdescription.xml"); - opdsDumper.setId(kiwix::to_string(uuid)); opdsDumper.setLibrary(mp_library); response.set_mimeType("application/atom+xml;profile=opds-catalog;kind=acquisition; charset=utf-8"); std::vector bookIdsToDump; @@ -751,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")); @@ -770,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) { @@ -792,6 +784,7 @@ Response InternalServer::handle_catalog(const RequestContext& request) opdsDumper.setOpenSearchInfo(totalResults, startIndex, bookIdsToDump.size()); } + opdsDumper.setId(kiwix::to_string(uuid)); response.set_content(opdsDumper.dumpOPDSFeed(bookIdsToDump)); return response; }