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.
This commit is contained in:
Maneesh P M 2021-05-28 12:37:43 +05:30
parent c046f64d83
commit bcece66960
4 changed files with 39 additions and 15 deletions

View File

@ -21,6 +21,7 @@
#define KIWIX_SEARCH_RENDERER_H #define KIWIX_SEARCH_RENDERER_H
#include <string> #include <string>
#include <zim/search.h>
namespace kiwix namespace kiwix
{ {
@ -40,6 +41,8 @@ class SearchRenderer
* Used to generate pagination links. * Used to generate pagination links.
*/ */
SearchRenderer(Searcher* searcher, NameMapper* mapper); SearchRenderer(Searcher* searcher, NameMapper* mapper);
SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper,
unsigned int start, unsigned int estimatedResultCount);
~SearchRenderer(); ~SearchRenderer();
@ -74,7 +77,7 @@ class SearchRenderer
protected: protected:
std::string beautifyInteger(const unsigned int number); std::string beautifyInteger(const unsigned int number);
Searcher* mp_searcher; zim::SearchResultSet m_srs;
NameMapper* mp_nameMapper; NameMapper* mp_nameMapper;
std::string searchContent; std::string searchContent;
std::string searchPattern; std::string searchPattern;

View File

@ -32,6 +32,8 @@
#include "tools/pathTools.h" #include "tools/pathTools.h"
#include "tools/stringTools.h" #include "tools/stringTools.h"
#include <zim/search.h>
using namespace std; using namespace std;
namespace kiwix namespace kiwix
@ -142,6 +144,11 @@ class Searcher
*/ */
unsigned int getEstimatedResultCount(); unsigned int getEstimatedResultCount();
/**
* Get a SearchResultSet object for current search
*/
zim::SearchResultSet getSearchResultSet();
unsigned int getResultStart() { return resultStart; } unsigned int getResultStart() { return resultStart; }
unsigned int getResultEnd() { return resultEnd; } unsigned int getResultEnd() { return resultEnd; }

View File

@ -37,10 +37,22 @@ namespace kiwix
/* Constructor */ /* Constructor */
SearchRenderer::SearchRenderer(Searcher* searcher, NameMapper* mapper) SearchRenderer::SearchRenderer(Searcher* searcher, NameMapper* mapper)
: mp_searcher(searcher), : m_srs(searcher->getSearchResultSet()),
mp_nameMapper(mapper), mp_nameMapper(mapper),
protocolPrefix("zim://"), 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 */ /* Destructor */
@ -70,29 +82,26 @@ std::string SearchRenderer::getHtml()
{ {
kainjow::mustache::data results{kainjow::mustache::data::type::list}; kainjow::mustache::data results{kainjow::mustache::data::type::list};
mp_searcher->restart_search(); for (auto it = m_srs.begin(); it != m_srs.end(); it++) {
Result* p_result = NULL;
while ((p_result = mp_searcher->getNextResult())) {
kainjow::mustache::data result; kainjow::mustache::data result;
result.set("title", p_result->get_title()); result.set("title", it.getTitle());
result.set("url", p_result->get_url()); result.set("url", it.getPath());
result.set("snippet", p_result->get_snippet()); result.set("snippet", it.getSnippet());
result.set("resultContentId", mp_nameMapper->getNameForId(p_result->get_zimId())); std::ostringstream s;
s << it.getZimId();
result.set("resultContentId", mp_nameMapper->getNameForId(s.str()));
if (p_result->get_wordCount() >= 0) { if (it.getWordCount() >= 0) {
result.set("wordCount", kiwix::beautifyInteger(p_result->get_wordCount())); result.set("wordCount", kiwix::beautifyInteger(it.getWordCount()));
} }
results.push_back(result); results.push_back(result);
delete p_result;
} }
// pages // pages
kainjow::mustache::data pages{kainjow::mustache::data::type::list}; kainjow::mustache::data pages{kainjow::mustache::data::type::list};
auto resultStart = mp_searcher->getResultStart();
auto resultEnd = 0U; auto resultEnd = 0U;
auto estimatedResultCount = mp_searcher->getEstimatedResultCount();
auto currentPage = 0U; auto currentPage = 0U;
auto pageStart = 0U; auto pageStart = 0U;
auto pageEnd = 0U; auto pageEnd = 0U;

View File

@ -228,6 +228,11 @@ unsigned int Searcher::getEstimatedResultCount()
return this->estimatedResultCount; return this->estimatedResultCount;
} }
zim::SearchResultSet Searcher::getSearchResultSet()
{
return *(this->internal);
}
_Result::_Result(zim::SearchResultSet::iterator iterator) _Result::_Result(zim::SearchResultSet::iterator iterator)
: iterator(iterator) : iterator(iterator)
{ {