diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index e395e0dc4..78d538f6e 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -253,7 +253,7 @@ std::unique_ptr InternalServer::handle_request(const RequestContext& r { try { if (! request.is_valid_url()) - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); const ETag etag = get_matching_if_none_match_etag(request); if ( etag ) @@ -335,11 +335,11 @@ std::unique_ptr InternalServer::handle_meta(const RequestContext& requ meta_name = request.get_argument("name"); reader = mp_library->getReaderById(bookId); } catch (const std::out_of_range& e) { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } if (reader == nullptr) { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } std::string content; @@ -364,7 +364,7 @@ std::unique_ptr InternalServer::handle_meta(const RequestContext& requ } else if (meta_name == "favicon") { reader->getFavicon(content, mimeType); } else { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } auto response = ContentResponse::build(*this, content, mimeType); @@ -393,7 +393,7 @@ std::unique_ptr InternalServer::handle_suggest(const RequestContext& r term = request.get_argument("term"); reader = mp_library->getReaderById(bookId); } catch (const std::out_of_range&) { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } if (m_verbose.load()) { @@ -457,7 +457,7 @@ std::unique_ptr InternalServer::handle_skin(const RequestContext& requ response->set_cacheable(); return std::move(response); } catch (const ResourceNotFound& e) { - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); } } @@ -577,18 +577,18 @@ std::unique_ptr InternalServer::handle_random(const RequestContext& re bookId = mp_nameMapper->getIdForName(bookName); reader = mp_library->getReaderById(bookId); } catch (const std::out_of_range&) { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } if (reader == nullptr) { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } try { auto entry = reader->getRandomPage(); return build_redirect(bookName, entry.getFinalEntry()); } catch(kiwix::NoEntry& e) { - return Response::build_404(*this, request, bookName); + return Response::build_404(*this, request, bookName, ""); } } @@ -600,7 +600,7 @@ std::unique_ptr InternalServer::handle_captured_external(const Request } catch (const std::out_of_range& e) {} if (source.empty()) - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); auto data = get_default_data(); data.set("source", source); @@ -619,7 +619,7 @@ std::unique_ptr InternalServer::handle_catalog(const RequestContext& r host = request.get_header("Host"); url = request.get_url_part(1); } catch (const std::out_of_range&) { - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); } if (url == "v2") { @@ -627,7 +627,7 @@ std::unique_ptr InternalServer::handle_catalog(const RequestContext& r } if (url != "searchdescription.xml" && url != "root.xml" && url != "search") { - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); } if (url == "searchdescription.xml") { @@ -770,7 +770,7 @@ std::unique_ptr InternalServer::handle_content(const RequestContext& r std::string searchURL = m_root+"/search?pattern="+pattern; // Make a full search on the entire library. const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern)); - return Response::build_404(*this, request, bookName, details); + return Response::build_404(*this, request, bookName, "", details); } auto urlStr = request.get_url().substr(bookName.size()+1); @@ -803,7 +803,7 @@ std::unique_ptr InternalServer::handle_content(const RequestContext& r std::string searchURL = m_root+"/search?content="+bookName+"&pattern="+pattern; // Make a search on this specific book only. const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern)); - return Response::build_404(*this, request, bookName, details); + return Response::build_404(*this, request, bookName, reader->getTitle(), details); } } diff --git a/src/server/internalServer_catalog_v2.cpp b/src/server/internalServer_catalog_v2.cpp index e7c05bac6..d4fc9fbef 100644 --- a/src/server/internalServer_catalog_v2.cpp +++ b/src/server/internalServer_catalog_v2.cpp @@ -43,7 +43,7 @@ std::unique_ptr InternalServer::handle_catalog_v2(const RequestContext try { url = request.get_url_part(2); } catch (const std::out_of_range&) { - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); } if (url == "root.xml") { @@ -60,7 +60,7 @@ std::unique_ptr InternalServer::handle_catalog_v2(const RequestContext } else if (url == "categories") { return handle_catalog_v2_categories(request); } else { - return Response::build_404(*this, request, ""); + return Response::build_404(*this, request, "", ""); } } diff --git a/src/server/response.cpp b/src/server/response.cpp index 1f0a8f401..69408f0de 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -83,7 +83,7 @@ std::unique_ptr Response::build_304(const InternalServer& server, cons return response; } -std::unique_ptr Response::build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& details) +std::unique_ptr Response::build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& bookTitle, const std::string& details) { MustacheData results; results.set("url", request.get_full_url()); @@ -91,7 +91,7 @@ std::unique_ptr Response::build_404(const InternalServer& server, cons auto response = ContentResponse::build(server, RESOURCE::templates::_404_html, results, "text/html"); response->set_code(MHD_HTTP_NOT_FOUND); - response->set_taskbar(bookName, ""); + response->set_taskbar(bookName, bookTitle); return std::move(response); } @@ -190,7 +190,7 @@ void ContentResponse::introduce_taskbar() kainjow::mustache::data data; data.set("root", m_root); data.set("content", m_bookName); - data.set("hascontent", !m_bookName.empty()); + data.set("hascontent", (!m_bookName.empty() && !m_bookTitle.empty())); data.set("title", m_bookTitle); data.set("withlibrarybutton", m_withLibraryButton); auto head_content = render_template(RESOURCE::templates::head_taskbar_html, data); diff --git a/src/server/response.h b/src/server/response.h index 8d113ad7f..49d4d11e6 100644 --- a/src/server/response.h +++ b/src/server/response.h @@ -47,7 +47,7 @@ class Response { static std::unique_ptr build(const InternalServer& server); static std::unique_ptr build_304(const InternalServer& server, const ETag& etag); - static std::unique_ptr build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& details=""); + static std::unique_ptr build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& bookTitle, const std::string& details=""); static std::unique_ptr build_416(const InternalServer& server, size_t resourceLength); static std::unique_ptr build_500(const InternalServer& server, const std::string& msg); static std::unique_ptr build_redirect(const InternalServer& server, const std::string& redirectUrl); diff --git a/static/templates/taskbar_part.html b/static/templates/taskbar_part.html index a1d6daa1f..8ae430f78 100644 --- a/static/templates/taskbar_part.html +++ b/static/templates/taskbar_part.html @@ -8,18 +8,18 @@ - {{#hascontent}}
{{#withlibrarybutton}} {{/withlibrarybutton}} + {{#hascontent}} + {{/hascontent}}
- {{/hascontent}}