mirror of
https://github.com/kiwix/libkiwix.git
synced 2026-10-22 17:15:18 -04:00
Move the searcher cache into the Library
This commit is contained in:
1 parent
740581c55c
commit
f5af0633ec
4 files changed
+30
-12
No files matched your search
@@ -182,7 +182,6 @@ InternalServer::InternalServer(Library* library,
|
||||
mp_daemon(nullptr),
|
||||
mp_library(library),
|
||||
mp_nameMapper(nameMapper ? nameMapper : &defaultNameMapper),
|
||||
searcherCache(getEnvVar<int>("SEARCHER_CACHE_SIZE", std::max((unsigned int) (mp_library->getBookCount(true, true)*0.1), 1U))),
|
||||
searchCache(getEnvVar<int>("SEARCH_CACHE_SIZE", DEFAULT_CACHE_SIZE)),
|
||||
suggestionSearcherCache(getEnvVar<int>("SUGGESTION_SEARCHER_CACHE_SIZE", std::max((unsigned int) (mp_library->getBookCount(true, true)*0.1), 1U)))
|
||||
{}
|
||||
@@ -582,11 +581,9 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||
auto searchInfo = SearchInfo(request);
|
||||
|
||||
std::string bookId;
|
||||
std::shared_ptr<zim::Archive> archive;
|
||||
if (!searchInfo.bookName.empty()) {
|
||||
try {
|
||||
bookId = mp_nameMapper->getIdForName(searchInfo.bookName);
|
||||
archive = mp_library->getArchiveById(bookId);
|
||||
} catch (const std::out_of_range&) {
|
||||
throw std::invalid_argument("The requested book doesn't exist.");
|
||||
}
|
||||
@@ -600,8 +597,8 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||
search = searchCache.getOrPut(searchInfo,
|
||||
[=](){
|
||||
std::shared_ptr<zim::Searcher> searcher;
|
||||
if (archive) {
|
||||
searcher = searcherCache.getOrPut(bookId, [=](){ return std::make_shared<zim::Searcher>(*archive);});
|
||||
if(!bookId.empty()) {
|
||||
searcher = mp_library->getSearcherById(bookId);
|
||||
} else {
|
||||
for (auto& bookId: mp_library->filter(kiwix::Filter().local(true).valid(true))) {
|
||||
auto currentArchive = mp_library->getArchiveById(bookId);
|
||||
@@ -622,11 +619,11 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||
// (in case of zim file not containing a index)
|
||||
const auto cssUrl = renderUrl(m_root, RESOURCE::templates::url_of_search_results_css);
|
||||
HTTPErrorHtmlResponse response(*this, request, MHD_HTTP_NOT_FOUND,
|
||||
"fulltext-search-unavailable",
|
||||
"404-page-heading",
|
||||
"fulltext-search-unavailable",
|
||||
"404-page-heading",
|
||||
cssUrl);
|
||||
response += nonParameterizedMessage("no-search-results");
|
||||
response += TaskbarInfo(searchInfo.bookName, archive.get());
|
||||
response += TaskbarInfo(searchInfo.bookName, bookId.empty()?nullptr:mp_library->getArchiveById(bookId).get());
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -656,7 +653,7 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||
renderer.setSearchProtocolPrefix(m_root + "/search");
|
||||
renderer.setPageLength(pageLength);
|
||||
auto response = ContentResponse::build(*this, renderer.getHtml(), "text/html; charset=utf-8");
|
||||
response->set_taskbar(searchInfo.bookName, archive.get());
|
||||
response->set_taskbar(searchInfo.bookName, bookId.empty()?nullptr:mp_library->getArchiveById(bookId).get());
|
||||
return std::move(response);
|
||||
} catch (const std::invalid_argument& e) {
|
||||
return HTTP400HtmlResponse(*this, request)
|
||||
|
||||
Reference in new issue
Block a user