From c74b935a9b6772cb98eeee3711dd20e42abbc671 Mon Sep 17 00:00:00 2001 From: manan jethwani Date: Wed, 5 Aug 2020 15:38:28 +0530 Subject: [PATCH] added pageLength for search_pagination --- .gitignore | 2 ++ include/search_renderer.h | 10 ++++++++-- src/search_renderer.cpp | 25 ++++++++++++------------- src/server.cpp | 27 +++++++++++++++------------ static/templates/search_result.html | 6 +++--- 5 files changed, 40 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index 2d491d0fc..1a8f75003 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ *.swp subprojects/googletest-release* *.class +build/ +.vscode/ diff --git a/include/search_renderer.h b/include/search_renderer.h index 375f6beba..4f491961f 100644 --- a/include/search_renderer.h +++ b/include/search_renderer.h @@ -60,6 +60,13 @@ class SearchRenderer */ void setSearchProtocolPrefix(const std::string& prefix); + /** + * set result count per page + */ + void setPageLength(unsigned int pageLength){ + this->pageLength = pageLength; + } + /** * Generate the html page with the resutls of the search. */ @@ -73,10 +80,9 @@ class SearchRenderer std::string searchPattern; std::string protocolPrefix; std::string searchProtocolPrefix; - unsigned int resultCountPerPage; + unsigned int pageLength; unsigned int estimatedResultCount; unsigned int resultStart; - unsigned int resultEnd; }; diff --git a/src/search_renderer.cpp b/src/search_renderer.cpp index cf81572c0..fa1c16dfa 100644 --- a/src/search_renderer.cpp +++ b/src/search_renderer.cpp @@ -93,30 +93,30 @@ std::string SearchRenderer::getHtml() kainjow::mustache::data pages{kainjow::mustache::data::type::list}; auto resultStart = mp_searcher->getResultStart(); - auto resultEnd = mp_searcher->getResultEnd(); - auto resultCountPerPage = resultEnd - resultStart; + auto resultEnd = 0U; auto estimatedResultCount = mp_searcher->getEstimatedResultCount(); auto currentPage = 0U; auto pageStart = 0U; auto pageEnd = 0U; auto lastPageStart = 0U; - if (resultCountPerPage) { - currentPage = resultStart/resultCountPerPage; + if (pageLength) { + currentPage = resultStart/pageLength; pageStart = currentPage > 4 ? currentPage-4 : 0; pageEnd = currentPage + 5; - if (pageEnd > estimatedResultCount / resultCountPerPage) { - pageEnd = estimatedResultCount / resultCountPerPage; + if (pageEnd > estimatedResultCount / pageLength) { + pageEnd = (estimatedResultCount + pageLength - 1) / pageLength; } - if (estimatedResultCount > resultCountPerPage) { - lastPageStart = static_cast(round(estimatedResultCount/resultCountPerPage)) * resultCountPerPage; + if (estimatedResultCount > pageLength) { + lastPageStart = ((estimatedResultCount-1)/pageLength)*pageLength; } } + resultEnd = resultStart+pageLength; //setting result end + for (unsigned int i = pageStart; i < pageEnd; i++) { kainjow::mustache::data page; page.set("label", to_string(i + 1)); - page.set("start", to_string(i * resultCountPerPage)); - page.set("end", to_string((i + 1) * resultCountPerPage)); + page.set("start", to_string(i * pageLength)); if (i == currentPage) { page.set("selected", true); @@ -137,9 +137,8 @@ std::string SearchRenderer::getHtml() allData.set("searchPatternEncoded", urlEncode(this->searchPattern)); allData.set("resultStart", to_string(resultStart + 1)); allData.set("resultEnd", to_string(min(resultEnd, estimatedResultCount))); - allData.set("resultRange", to_string(resultCountPerPage)); + allData.set("pageLength", to_string(pageLength)); allData.set("resultLastPageStart", to_string(lastPageStart)); - allData.set("lastResult", to_string(estimatedResultCount)); allData.set("protocolPrefix", this->protocolPrefix); allData.set("searchProtocolPrefix", this->searchProtocolPrefix); allData.set("contentId", this->searchContent); @@ -149,4 +148,4 @@ std::string SearchRenderer::getHtml() return ss.str(); } -} +} \ No newline at end of file diff --git a/src/server.cpp b/src/server.cpp index 0dd72a67e..5d5b53d89 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -708,33 +708,36 @@ Response InternalServer::handle_search(const RequestContext& request) try { start = request.get_argument("start"); } catch (const std::exception&) {} - auto end = 25; - try { - end = request.get_argument("end"); - } catch (const std::exception&) {} - if (start>end) { - auto tmp = start; - start = end; - end = tmp; + auto pageLength=25; + try{ + pageLength=request.get_argument("pageLength"); + }catch(const std::exception&){} + if (pageLength > MAX_SEARCH_LEN) { + pageLength = MAX_SEARCH_LEN; } - if (end > start + MAX_SEARCH_LEN) { - end = start + MAX_SEARCH_LEN; + + if(pageLength==0) + { + pageLength=25; } + auto end=start+pageLength; + /* Get the results */ try { if (patternString.empty()) { searcher.geo_search(latitude, longitude, distance, - start, end, m_verbose.load()); + start, end , m_verbose.load()); } else { searcher.search(patternString, - start, end, m_verbose.load()); + start, end , m_verbose.load()); } SearchRenderer renderer(&searcher, mp_nameMapper); renderer.setSearchPattern(patternString); renderer.setSearchContent(bookName); renderer.setProtocolPrefix(m_root + "/"); renderer.setSearchProtocolPrefix(m_root + "/search?"); + renderer.setPageLength(pageLength); response.set_content(renderer.getHtml()); } catch (const std::exception& e) { std::cerr << e.what() << std::endl; diff --git a/static/templates/search_result.html b/static/templates/search_result.html index ddab4961e..036404ade 100644 --- a/static/templates/search_result.html +++ b/static/templates/search_result.html @@ -133,7 +133,7 @@