mirror of https://github.com/kiwix/libkiwix.git
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:
parent
c046f64d83
commit
bcece66960
|
@ -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;
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue