diff --git a/include/search_renderer.h b/include/search_renderer.h index 5713ca2fe..45fa866ff 100644 --- a/include/search_renderer.h +++ b/include/search_renderer.h @@ -22,6 +22,7 @@ #include #include +#include namespace kiwix { @@ -50,10 +51,12 @@ class SearchRenderer * * @param srs The `SearchResultSet` to render. * @param mapper The `NameMapper` to use to do the rendering. + * @param library The `Library` to use to look up book details for search + * results * @param start The start offset used for the srs. * @param estimatedResultCount The estimatedResultCount of the whole search */ - SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, + SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, Library* library, unsigned int start, unsigned int estimatedResultCount); ~SearchRenderer(); @@ -91,6 +94,7 @@ class SearchRenderer std::string beautifyInteger(const unsigned int number); zim::SearchResultSet m_srs; NameMapper* mp_nameMapper; + Library* mp_library; std::string searchContent; std::string searchPattern; std::string protocolPrefix; diff --git a/src/search_renderer.cpp b/src/search_renderer.cpp index f3b2ac14b..4b6b8e90b 100644 --- a/src/search_renderer.cpp +++ b/src/search_renderer.cpp @@ -26,6 +26,8 @@ #include "library.h" #include "name_mapper.h" +#include "tools/archiveTools.h" + #include #include @@ -45,10 +47,11 @@ SearchRenderer::SearchRenderer(Searcher* searcher, NameMapper* mapper) resultStart(searcher->getResultStart()) {} -SearchRenderer::SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, +SearchRenderer::SearchRenderer(zim::SearchResultSet srs, NameMapper* mapper, Library* library, unsigned int start, unsigned int estimatedResultCount) : m_srs(srs), mp_nameMapper(mapper), + mp_library(library), protocolPrefix("zim://"), searchProtocolPrefix("search://?"), estimatedResultCount(estimatedResultCount), @@ -90,6 +93,10 @@ std::string SearchRenderer::getHtml() std::ostringstream s; s << it.getZimId(); result.set("resultContentId", mp_nameMapper->getNameForId(s.str())); + std::shared_ptr archive; + try { + result.set("bookTitle", mp_library->getBookById(s.str()).getTitle()); + } catch (const std::out_of_range& e) {} if (it.getWordCount() >= 0) { result.set("wordCount", kiwix::beautifyInteger(it.getWordCount())); diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index ff0fea8bb..af26bcc98 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -562,7 +562,7 @@ std::unique_ptr InternalServer::handle_search(const RequestContext& re } zim::Search search = searcher->search(query); - SearchRenderer renderer(search.getResults(start, pageLength), mp_nameMapper, start, + SearchRenderer renderer(search.getResults(start, pageLength), mp_nameMapper, mp_library, start, search.getEstimatedMatches()); renderer.setSearchPattern(patternString); renderer.setSearchContent(bookName); diff --git a/static/templates/search_result.html b/static/templates/search_result.html index 036404ade..132348223 100644 --- a/static/templates/search_result.html +++ b/static/templates/search_result.html @@ -57,6 +57,11 @@ font-size: 100%; } + .book-title { + color: #662200; + font-size: 100%; + } + .footer { padding: 0; margin-top: 1em; @@ -120,6 +125,9 @@ {{#snippet}} {{>snippet}}... {{/snippet}} + {{#bookTitle}} +
from {{bookTitle}}
+ {{/bookTitle}} {{#wordCount}}
{{wordCount}} words
{{/wordCount}}