diff options
Diffstat (limited to 'src/schemes')
| -rw-r--r-- | src/schemes/NullSchemeHandler.cpp | 46 | ||||
| -rw-r--r-- | src/schemes/NullSchemeHandler.hpp | 30 | ||||
| -rw-r--r-- | src/schemes/schemes.hpp | 13 |
3 files changed, 88 insertions, 1 deletions
diff --git a/src/schemes/NullSchemeHandler.cpp b/src/schemes/NullSchemeHandler.cpp new file mode 100644 index 0000000..203e673 --- /dev/null +++ b/src/schemes/NullSchemeHandler.cpp @@ -0,0 +1,46 @@ +#include "NullSchemeHandler.hpp" +#include <qstringview.h> +#include <qwebengineurlrequestjob.h> + +void NullSchemeHandler::requestStarted(QWebEngineUrlRequestJob *job) { + auto url = job->requestUrl(); + + if (url.host() == "docs") { + QBuffer *buffer = new QBuffer(job); + buffer->setData(read_static_docs_file(url.path())); + buffer->open(QIODevice::ReadOnly); + job->reply(get_content_type(url.path()), buffer); + } else { + job->reply("text/html", new QBuffer(job)); + } +} + +QByteArray NullSchemeHandler::read_static_docs_file(const QString &path) { + QFile file(NULL_DOCS_DIR + path); + if (!file.exists()) + return read_index_html(); + + if (file.open(QIODevice::ReadOnly)) { + auto contents = file.readAll(); + file.close(); + return contents; + } + return QByteArray{}; +} + +QByteArray NullSchemeHandler::read_index_html() { + QFile file(NULL_DOCS_DIR + QString("/index.html")); + qDebug() << ":::" << file.exists(); + if (file.open(QIODevice::ReadOnly)) { + auto contents = file.readAll(); + file.close(); + return contents; + } + return QByteArray{}; +} + +QByteArray NullSchemeHandler::get_content_type(const QString &path) { + if (path.endsWith(".css")) + return "text/css"; + return "text/html"; +} diff --git a/src/schemes/NullSchemeHandler.hpp b/src/schemes/NullSchemeHandler.hpp new file mode 100644 index 0000000..bc05076 --- /dev/null +++ b/src/schemes/NullSchemeHandler.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include <QWebEngineUrlRequestJob> +#include <QWebEngineUrlSchemeHandler> +#include <QtCore> +#include <qcontainerfwd.h> +#include <qdebug.h> +#include <qurlquery.h> + +// TODO: Install doc dir and pass this path during build +#define NULL_DOCS_DIR "./doc" + +class NullSchemeHandler : public QWebEngineUrlSchemeHandler { + Q_OBJECT + +public: + static NullSchemeHandler &instance() { + static NullSchemeHandler handler; + return handler; + } + + void requestStarted(QWebEngineUrlRequestJob *job) override; + +private: + NullSchemeHandler() = default; + + QByteArray read_static_docs_file(const QString &path); + QByteArray read_index_html(); + QByteArray get_content_type(const QString &path); +}; diff --git a/src/schemes/schemes.hpp b/src/schemes/schemes.hpp index f33d74b..439519c 100644 --- a/src/schemes/schemes.hpp +++ b/src/schemes/schemes.hpp @@ -13,4 +13,15 @@ void register_nullrpc_scheme() { QWebEngineUrlScheme::registerScheme(scheme); } -void register_all_schemes() { register_nullrpc_scheme(); } +void register_null_scheme() { + QWebEngineUrlScheme scheme("null"); + scheme.setSyntax(QWebEngineUrlScheme::Syntax::Host); + scheme.setFlags(QWebEngineUrlScheme::SecureScheme | QWebEngineUrlScheme::LocalScheme | + QWebEngineUrlScheme::LocalAccessAllowed); + QWebEngineUrlScheme::registerScheme(scheme); +} + +void register_all_schemes() { + register_nullrpc_scheme(); + register_null_scheme(); +} |
