diff --git a/src/server/internalServer.h b/src/server/internalServer.h index 3a7d98c26..7af45769e 100644 --- a/src/server/internalServer.h +++ b/src/server/internalServer.h @@ -82,6 +82,7 @@ class InternalServer { std::unique_ptr handle_catalog_v2_complete_entry(const RequestContext& request, const std::string& entryId); std::unique_ptr handle_catalog_v2_categories(const RequestContext& request); std::unique_ptr handle_catalog_v2_languages(const RequestContext& request); + std::unique_ptr handle_catalog_v2_illustration(const RequestContext& request); std::unique_ptr handle_meta(const RequestContext& request); std::unique_ptr handle_search(const RequestContext& request); std::unique_ptr handle_suggest(const RequestContext& request); diff --git a/src/server/internalServer_catalog_v2.cpp b/src/server/internalServer_catalog_v2.cpp index 475e16cb4..3a578cb02 100644 --- a/src/server/internalServer_catalog_v2.cpp +++ b/src/server/internalServer_catalog_v2.cpp @@ -66,6 +66,8 @@ std::unique_ptr InternalServer::handle_catalog_v2(const RequestContext return handle_catalog_v2_categories(request); } else if (url == "languages") { return handle_catalog_v2_languages(request); + } else if (url == "illustration") { + return handle_catalog_v2_illustration(request); } else { return Response::build_404(*this, request.get_full_url(), "", ""); } @@ -146,4 +148,18 @@ std::unique_ptr InternalServer::handle_catalog_v2_languages(const Requ ); } +std::unique_ptr InternalServer::handle_catalog_v2_illustration(const RequestContext& request) +{ + try { + const auto bookName = request.get_url_part(3); + const auto bookId = mp_nameMapper->getIdForName(bookName); + auto book = mp_library->getBookByIdThreadSafe(bookId); + auto size = request.get_argument("size"); + auto illustration = book.getIllustration(size); + return ContentResponse::build(*this, illustration->getData(), illustration->mimeType); + } catch(...) { + return Response::build_404(*this, request.get_full_url(), "", ""); + } +} + } // namespace kiwix diff --git a/test/server.cpp b/test/server.cpp index 5ae6296c9..08eba5043 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -201,6 +201,7 @@ const ResourceCollection resources200Uncompressible{ { WITH_ETAG, "/ROOT/meta?content=zimfile&name=publisher" }, { WITH_ETAG, "/ROOT/meta?content=zimfile&name=favicon" }, { WITH_ETAG, "/ROOT/meta?content=zimfile&name=Illustration_48x48@1" }, + { NO_ETAG, "/ROOT/catalog/v2/illustration/zimfile?size=48" }, { WITH_ETAG, "/ROOT/zimfile/I/m/Ray_Charles_classic_piano_pose.jpg" }, @@ -276,6 +277,7 @@ const char* urls404[] = { "/ROOT/catalog", "/ROOT/catalog/non-existent-item", "/ROOT/catalogBLABLABLA/root.xml", + "/ROOT/catalog/v2/illustration/zimfile?size=96", "/ROOT/meta", "/ROOT/meta?content=zimfile", "/ROOT/meta?content=zimfile&name=non-existent-item",