9#include <QtHelp/QHelpEngineCore>
11#include <QtNetwork/QNetworkAccessManager>
12#include <QtNetwork/QNetworkReply>
13#include <QtNetwork/QNetworkRequest>
15#include <QtCore/QTimer>
16#include <QtCore/QCoreApplication>
18#include <QtCore/QDebug>
24static const char g_htmlPage[] =
"<html><head><meta http-equiv=\"content-type\" content=\"text/html; "
25 "charset=UTF-8\"><title>%1</title><style>body{padding: 3em 0em;background: #eeeeee;}"
26 "hr{color: lightgray;width: 100%;}img{float: left;opacity: .8;}#box{background: white;border: 1px solid "
27 "lightgray;width: 600px;padding: 60px;margin: auto;}h1{font-size: 130%;font-weight: bold;border-bottom: "
28 "1px solid lightgray;margin-left: 48px;}h2{font-size: 100%;font-weight: normal;border-bottom: 1px solid "
29 "lightgray;margin-left: 48px;}ul{font-size: 80%;padding-left: 48px;margin: 0;}#reloadButton{padding-left:"
30 "48px;}</style></head><body><div id=\"box\"><h1>%2</h1><h2>%3</h2><h2><b>%4</b></h2></div></body></html>";
34 return QCoreApplication::translate(
"HelpViewer",
"Error 404...");
39 return QCoreApplication::translate(
"HelpViewer",
"The page could not be found");
44 return QCoreApplication::translate(
"HelpViewer",
45 "Please make sure that you have all "
46 "documentation sets installed.");
51 return HelpViewer::tr(
"Error loading: %1").arg(url.toString());
56 return QString::fromLatin1(g_htmlPage)
57 .arg(HelpBrowserSupport::msgError404(), HelpBrowserSupport::msgPageNotFound(),
58 HelpBrowserSupport::msgLoadError(url), HelpBrowserSupport::msgAllDocumentationSets());
69 const QString &mimeType);
74 {
return data.size() + QNetworkReply::bytesAvailable(); }
85 const QByteArray &fileData,
const QString& mimeType)
90 setUrl(request.url());
91 setOpenMode(QIODevice::ReadOnly);
93 setHeader(QNetworkRequest::ContentTypeHeader, mimeType);
94 setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(origLen));
95 QTimer::singleShot(0,
this, &QNetworkReply::metaDataChanged);
96 QTimer::singleShot(0,
this, &QNetworkReply::readyRead);
97 QTimer::singleShot(0,
this, &QNetworkReply::finished);
108 qint64 len = qMin(qint64(data.size()), maxlen);
110 memcpy(buffer, data.constData(), len);
114 QTimer::singleShot(0,
this, &QNetworkReply::finished);
126 setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 301);
127 setAttribute(QNetworkRequest::RedirectionTargetAttribute, newUrl);
129 QTimer::singleShot(0,
this, &QNetworkReply::finished);
146 const QNetworkRequest &request, QIODevice *outgoingData =
nullptr)
override;
160 const QUrl url = request.url();
166 const QString mimeType = HelpViewer::mimeFromUrl(url);
172 return new HelpNetworkReply(request, HelpBrowserSupport::msgHtmlErrorPage(request.url()).toUtf8(),
173 QStringLiteral(
"text/html"));
187 const QUrl targetUrl = engine.findFile(url);
188 if (!targetUrl.isValid())
191 if (targetUrl != url) {
193 *targetUrlP = targetUrl;
198 *dataP = HelpBrowserSupport::fileDataForLocalUrl(targetUrl);
static QNetworkAccessManager * createNetworkAccessManager(QObject *parent=nullptr)
static QByteArray fileDataForLocalUrl(const QUrl &url)
static QString msgAllDocumentationSets()
static QString msgLoadError(const QUrl &url)
static QString msgPageNotFound()
static ResolveUrlResult resolveUrl(const QUrl &url, QUrl *targetUrl, QByteArray *data)
static QString msgHtmlErrorPage(const QUrl &url)
static QString msgError404()
static HelpEngineWrapper & instance()
QNetworkReply * createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData=nullptr) override
Returns a new QNetworkReply object to handle the operation op and request originalReq.
HelpNetworkAccessManager(QObject *parent)
void abort() override
Aborts the operation immediately and close down any network connections still open.
HelpNetworkReply(const QNetworkRequest &request, const QByteArray &fileData, const QString &mimeType)
qint64 bytesAvailable() const override
Returns the number of bytes that are available for reading.
qint64 readData(char *data, qint64 maxlen) override
Reads up to maxSize bytes from the device into data, and returns the number of bytes read or -1 if an...
HelpRedirectNetworkReply(const QNetworkRequest &request, const QUrl &newUrl)
qint64 readData(char *, qint64) override
Reads up to maxSize bytes from the device into data, and returns the number of bytes read or -1 if an...
void abort() override
Aborts the operation immediately and close down any network connections still open.
static QT_BEGIN_NAMESPACE const char g_htmlPage[]
Combined button and popup list for selecting options.