Be able to request some zim's metadata using a custom url.

Only favicon for now.
This commit is contained in:
Matthieu Gautier 2018-11-13 18:13:23 +01:00
parent dd52ac8255
commit a98ea49cac
2 changed files with 30 additions and 0 deletions

View File

@ -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);
}

View File

@ -9,6 +9,7 @@ public:
UrlSchemeHandler();
void requestStarted(QWebEngineUrlRequestJob *request);
private:
void handleMetaRequest(QWebEngineUrlRequestJob *request);
void handleContentRequest(QWebEngineUrlRequestJob *request);
};