Reduce complexity of handle_search.

This commit is contained in:
Matthieu Gautier 2019-08-10 17:54:45 +02:00
parent fae0918f49
commit ce09375c6c
3 changed files with 150 additions and 51 deletions

View File

@ -530,18 +530,14 @@ Response InternalServer::handle_search(const RequestContext& request)
printf("** running handle_search\n");
}
std::string content;
std::string mimeType;
std::string httpRedirection;
std::string bookName;
std::string patternString;
std::string bookId;
try {
bookName = request.get_argument("content");
bookId = mp_nameMapper->getIdForName(bookName);
} catch (const std::out_of_range&) {}
std::string patternString;
try {
patternString = request.get_argument("pattern");
} catch (const std::out_of_range&) {}
@ -595,24 +591,27 @@ Response InternalServer::handle_search(const RequestContext& request)
response.set_taskbar(bookName, reader ? reader->getTitle() : "");
response.set_compress(true);
if ( (!reader && !bookName.empty())
|| (patternString.empty() && ! has_geo_query) ) {
auto data = get_default_data();
data.set("pattern", encodeDiples(patternString));
response.set_template(RESOURCE::templates::no_search_result_html, data);
response.set_code(MHD_HTTP_NOT_FOUND);
return response;
}
Searcher searcher;
if (reader) {
searcher.add_reader(reader.get());
} else {
if (bookName.empty()) {
for (auto& bookId: m_library.filter(kiwix::Filter().local(true).valid(true))) {
auto currentReader = m_library.getReaderById(bookId);
if (currentReader) {
searcher.add_reader(currentReader.get());
}
}
} else {
response.set_content("<!DOCTYPE html>\n<html><head><meta content=\"text/html;charset=UTF-8\" http-equiv=\"content-type\" /><title>Fulltext search unavailable</title></head><body><h1>Not Found</h1><p>There is no article with the title <b>\"" + kiwix::encodeDiples(patternString) + "\"</b> and the fulltext search engine is not available for this content.</p></body></html>");
response.set_code(MHD_HTTP_NOT_FOUND);
}
}
if (!patternString.empty() || has_geo_query) {
auto start = 0;
try {
start = request.get_argument<unsigned int>("start");
@ -648,10 +647,6 @@ Response InternalServer::handle_search(const RequestContext& request)
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
} else {
response.set_content("<!DOCTYPE html>\n<html><head><meta content=\"text/html;charset=UTF-8\" http-equiv=\"content-type\" /><title>Fulltext search unavailable</title></head><body><h1>Not Found</h1><p>There is no article with the title <b>\"" + kiwix::encodeDiples(patternString) + "\"</b> and the fulltext search engine is not available for this content.</p></body></html>");
response.set_code(MHD_HTTP_NOT_FOUND);
}
return response;
}

View File

@ -21,6 +21,7 @@ skin/caret.png
skin/taskbar.js
skin/taskbar.css
templates/search_result.html
templates/no_search_result.html
templates/404.html
templates/index.html
templates/suggestion.json

View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<style type="text/css">
body{
color: #00000;
font: small/normal Arial,Helvetica,Sans-Serif;
margin-top: 0.5em;
font-size: 90%;
}
a{
color: #04c;
}
a:visited {
color: #639
}
a:hover {
text-decoration: underline
}
.header {
font-size: 120%;
}
ul {
margin:0;
padding:0
}
.results {
font-size: 110%;
}
.results li {
list-style-type:none;
margin-top: 0.5em;
}
.results a {
font-size: 110%;
text-decoration: underline
}
cite {
font-style:normal;
word-wrap:break-word;
display: block;
font-size: 100%;
}
.informations {
color: #388222;
font-size: 100%;
}
.footer {
padding: 0;
margin-top: 1em;
width: 100%;
float: left
}
.footer a, .footer span {
display: block;
padding: .3em .7em;
margin: 0 .38em 0 0;
text-align:center;
text-decoration: none;
}
.footer a:hover {
background: #ededed;
}
.footer ul, .footer li {
list-style:none;
margin: 0;
padding: 0;
}
.footer li {
float: left;
}
.selected {
background: #ededed;
}
</style>
<title>Fulltext search unavailable</title>
</head>
<body bgcolor="white">
<div class="header">Not found</div>
<p>
There is no article with the title <b> "{{pattern}}"</b>
and the fulltext search engine is not available for this content.
</p>
</body>
</html>