diff --git a/src/urlschemehandler.cpp b/src/urlschemehandler.cpp index 409a976..b1e4b3d 100644 --- a/src/urlschemehandler.cpp +++ b/src/urlschemehandler.cpp @@ -52,6 +52,33 @@ UrlSchemeHandler::handleContentRequest(QWebEngineUrlRequestJob *request) request->reply(mimeType, buffer); } +void +UrlSchemeHandler::handleMetaRequest(QWebEngineUrlRequestJob* request) +{ + auto qurl = request->requestUrl(); + auto host = qurl.host(); + auto parts = host.split('.'); + auto zimId = parts[0]; + auto metaName = parts[1]; + + auto library = KiwixApp::instance()->getLibrary(); + auto reader = library->getReader(zimId+".zim"); + if ( reader == nullptr) { + request->fail(QWebEngineUrlRequestJob::UrlNotFound); + return; + } + if (metaName == "favicon") { + std::string mimeType; + std::string content; + QBuffer* buffer = new QBuffer; + reader->getFavicon(content, mimeType); + buffer->setData(content.data(), content.size()); + connect(buffer, &QIODevice::aboutToClose, buffer, &QObject::deleteLater); + request->reply(QByteArray::fromStdString(mimeType), buffer); + } + request->fail(QWebEngineUrlRequestJob::UrlNotFound); +} + void UrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request) { @@ -59,6 +86,8 @@ UrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request) auto host = qurl.host(); if (host.endsWith(".zim")) { handleContentRequest(request); + } else if (host.endsWith(".meta")) { + handleMetaRequest(request); } else { request->fail(QWebEngineUrlRequestJob::UrlNotFound); } diff --git a/src/urlschemehandler.h b/src/urlschemehandler.h index bb61f52..ea8a06c 100644 --- a/src/urlschemehandler.h +++ b/src/urlschemehandler.h @@ -9,6 +9,7 @@ public: UrlSchemeHandler(); void requestStarted(QWebEngineUrlRequestJob *request); private: + void handleMetaRequest(QWebEngineUrlRequestJob *request); void handleContentRequest(QWebEngineUrlRequestJob *request); };