From f560a1f81572987ccc40d939d5d0cdefdbaa2cae Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Thu, 30 Jan 2020 11:14:35 +0100 Subject: [PATCH 1/2] Be able to filter the books by name. --- include/library.h | 2 ++ src/library.cpp | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/include/library.h b/include/library.h index 3c79fed0e..6425ba63d 100644 --- a/include/library.h +++ b/include/library.h @@ -57,6 +57,7 @@ class Filter { std::string _creator; size_t _maxSize; std::string _query; + std::string _name; public: Filter(); @@ -100,6 +101,7 @@ class Filter { Filter& creator(std::string creator); Filter& maxSize(size_t size); Filter& query(std::string query); + Filter& name(std::string name); bool accept(const Book& book) const; }; diff --git a/src/library.cpp b/src/library.cpp index 12ff5a18d..fc027718d 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -378,6 +378,7 @@ enum filterTypes { _CREATOR = FLAG(10), MAXSIZE = FLAG(11), QUERY = FLAG(12), + NAME = FLAG(13), }; Filter& Filter::local(bool accept) @@ -465,6 +466,13 @@ Filter& Filter::query(std::string query) return *this; } +Filter& Filter::name(std::string name) +{ + _name = name; + activeFilters |= NAME; + return *this; +} + #define ACTIVE(X) (activeFilters & (X)) #define FILTER(TAG, TEST) if (ACTIVE(TAG) && !(TEST)) { return false; } bool Filter::accept(const Book& book) const @@ -485,6 +493,7 @@ bool Filter::accept(const Book& book) const FILTER(LANG, book.getLanguage() == _lang) FILTER(_PUBLISHER, book.getPublisher() == _publisher) FILTER(_CREATOR, book.getCreator() == _creator) + FILTER(NAME, book.getName() == _name) if (ACTIVE(ACCEPTTAGS)) { if (!_acceptTags.empty()) { From ce6e95643472f6f1165d4dc260ec19be290f21d3 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Thu, 30 Jan 2020 11:17:49 +0100 Subject: [PATCH 2/2] [OPDS] Add the url argument to filter by size and name. Fix kiwix/kiwix-tools#231 --- src/server.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server.cpp b/src/server.cpp index 8de04ba29..4af15b92b 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -758,6 +758,12 @@ Response InternalServer::handle_catalog(const RequestContext& request) query = request.get_argument("q"); filter.query(query); } catch (const std::out_of_range&) {} + try { + filter.maxSize(extractFromString(request.get_argument("maxsize"))); + } catch (...) {} + try { + filter.name(request.get_argument("name")); + } catch (const std::out_of_range&) {} try { filter.lang(request.get_argument("lang")); } catch (const std::out_of_range&) {}