From bcece66960146a1fb477ed318986b7b1ef6704ed Mon Sep 17 00:00:00 2001 From: Maneesh P M Date: Fri, 28 May 2021 12:37:43 +0530 Subject: [PATCH] Add SearchRenderer handles for libzim structures Introduces a new member mp_search that houses the zim::Search object, adds a new constructor for this purpose. This commit also add an overload for getHtml that takes start and end integers as arguments since they are not part of the search object we include. --- include/search_renderer.h | 5 ++++- include/searcher.h | 7 +++++++ src/search_renderer.cpp | 37 +++++++++++++++++++++++-------------- src/searcher.cpp | 5 +++++ 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/include/search_renderer.h b/include/search_renderer.h index 4f491961f..5951ff8a7 100644 --- a/include/search_renderer.h +++ b/include/search_renderer.h @@ -21,6 +21,7 @@ #define KIWIX_SEARCH_RENDERER_H #include +#include namespace kiwix { @@ -40,6 +41,8 @@ class SearchRenderer * Used to generate pagination links. */ SearchRenderer(Searcher* searcher, NameMapper* mapper); + SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, + unsigned int start, unsigned int estimatedResultCount); ~SearchRenderer(); @@ -74,7 +77,7 @@ class SearchRenderer protected: std::string beautifyInteger(const unsigned int number); - Searcher* mp_searcher; + zim::SearchResultSet m_srs; NameMapper* mp_nameMapper; std::string searchContent; std::string searchPattern; diff --git a/include/searcher.h b/include/searcher.h index 8acf929ce..8c72953b4 100644 --- a/include/searcher.h +++ b/include/searcher.h @@ -32,6 +32,8 @@ #include "tools/pathTools.h" #include "tools/stringTools.h" +#include + using namespace std; namespace kiwix @@ -142,6 +144,11 @@ class Searcher */ unsigned int getEstimatedResultCount(); + /** + * Get a SearchResultSet object for current search + */ + zim::SearchResultSet getSearchResultSet(); + unsigned int getResultStart() { return resultStart; } unsigned int getResultEnd() { return resultEnd; } diff --git a/src/search_renderer.cpp b/src/search_renderer.cpp index 0e503e330..66bb3b429 100644 --- a/src/search_renderer.cpp +++ b/src/search_renderer.cpp @@ -37,10 +37,22 @@ namespace kiwix /* Constructor */ SearchRenderer::SearchRenderer(Searcher* searcher, NameMapper* mapper) - : mp_searcher(searcher), + : m_srs(searcher->getSearchResultSet()), mp_nameMapper(mapper), protocolPrefix("zim://"), - searchProtocolPrefix("search://?") + searchProtocolPrefix("search://?"), + estimatedResultCount(searcher->getEstimatedResultCount()), + resultStart(searcher->getResultStart()) +{} + +SearchRenderer::SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, + unsigned int start, unsigned int estimatedResultCount) + : m_srs(srs), + mp_nameMapper(mapper), + protocolPrefix("zim://"), + searchProtocolPrefix("search://?"), + estimatedResultCount(estimatedResultCount), + resultStart(start) {} /* Destructor */ @@ -70,29 +82,26 @@ std::string SearchRenderer::getHtml() { kainjow::mustache::data results{kainjow::mustache::data::type::list}; - mp_searcher->restart_search(); - Result* p_result = NULL; - while ((p_result = mp_searcher->getNextResult())) { + for (auto it = m_srs.begin(); it != m_srs.end(); it++) { kainjow::mustache::data result; - result.set("title", p_result->get_title()); - result.set("url", p_result->get_url()); - result.set("snippet", p_result->get_snippet()); - result.set("resultContentId", mp_nameMapper->getNameForId(p_result->get_zimId())); + result.set("title", it.getTitle()); + result.set("url", it.getPath()); + result.set("snippet", it.getSnippet()); + std::ostringstream s; + s << it.getZimId(); + result.set("resultContentId", mp_nameMapper->getNameForId(s.str())); - if (p_result->get_wordCount() >= 0) { - result.set("wordCount", kiwix::beautifyInteger(p_result->get_wordCount())); + if (it.getWordCount() >= 0) { + result.set("wordCount", kiwix::beautifyInteger(it.getWordCount())); } results.push_back(result); - delete p_result; } // pages kainjow::mustache::data pages{kainjow::mustache::data::type::list}; - auto resultStart = mp_searcher->getResultStart(); auto resultEnd = 0U; - auto estimatedResultCount = mp_searcher->getEstimatedResultCount(); auto currentPage = 0U; auto pageStart = 0U; auto pageEnd = 0U; diff --git a/src/searcher.cpp b/src/searcher.cpp index 6f3b54257..e8b41caa1 100644 --- a/src/searcher.cpp +++ b/src/searcher.cpp @@ -228,6 +228,11 @@ unsigned int Searcher::getEstimatedResultCount() return this->estimatedResultCount; } +zim::SearchResultSet Searcher::getSearchResultSet() +{ + return *(this->internal); +} + _Result::_Result(zim::SearchResultSet::iterator iterator) : iterator(iterator) {