more efficient network stack
This commit is contained in:
parent
fe47c2d417
commit
2c95858fa9
@ -8,6 +8,7 @@
|
|||||||
#include "miscellaneous/skinfactory.h"
|
#include "miscellaneous/skinfactory.h"
|
||||||
#include "network-web/adblock/adblockmanager.h"
|
#include "network-web/adblock/adblockmanager.h"
|
||||||
#include "network-web/adblock/adblockrequestinfo.h"
|
#include "network-web/adblock/adblockrequestinfo.h"
|
||||||
|
#include "network-web/downloader.h"
|
||||||
#include "network-web/networkfactory.h"
|
#include "network-web/networkfactory.h"
|
||||||
#include "network-web/webfactory.h"
|
#include "network-web/webfactory.h"
|
||||||
|
|
||||||
@ -16,25 +17,14 @@
|
|||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include <QWheelEvent>
|
#include <QWheelEvent>
|
||||||
|
|
||||||
LiteHtmlViewer::LiteHtmlViewer(QWidget* parent) : QLiteHtmlWidget(parent) {
|
LiteHtmlViewer::LiteHtmlViewer(QWidget* parent) : QLiteHtmlWidget(parent), m_downloader(new Downloader(this)) {
|
||||||
setResourceHandler([this](const QUrl& url) {
|
setResourceHandler([this](const QUrl& url) {
|
||||||
emit loadProgress(-1);
|
emit loadProgress(-1);
|
||||||
return handleResource(url);
|
return handleResource(url);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(this, &LiteHtmlViewer::linkClicked, this, &LiteHtmlViewer::setUrl);
|
connect(this, &LiteHtmlViewer::linkClicked, this, &LiteHtmlViewer::setUrl);
|
||||||
|
connect(this, &LiteHtmlViewer::copyAvailable, this, &LiteHtmlViewer::selectedTextChanged);
|
||||||
connect(this, &LiteHtmlViewer::copyAvailable, this, [this](bool available) {
|
|
||||||
if (!available) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString sel_text = QLiteHtmlWidget::selectedText();
|
|
||||||
|
|
||||||
if (!sel_text.isEmpty()) {
|
|
||||||
QGuiApplication::clipboard()->setText(sel_text, QClipboard::Mode::Selection);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiteHtmlViewer::bindToBrowser(WebBrowser* browser) {
|
void LiteHtmlViewer::bindToBrowser(WebBrowser* browser) {
|
||||||
@ -86,25 +76,29 @@ void LiteHtmlViewer::setUrl(const QUrl& url) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray output;
|
QEventLoop loop;
|
||||||
auto net_res = NetworkFactory::performNetworkOperation(
|
|
||||||
url.toString(),
|
connect(m_downloader.data(), &Downloader::completed, &loop, &QEventLoop::quit);
|
||||||
5000,
|
m_downloader->manipulateData(url.toString(),
|
||||||
{},
|
QNetworkAccessManager::Operation::GetOperation,
|
||||||
output,
|
{},
|
||||||
QNetworkAccessManager::Operation::GetOperation);
|
5000);
|
||||||
|
|
||||||
|
loop.exec();
|
||||||
|
|
||||||
|
auto net_error = m_downloader->lastOutputError();
|
||||||
QString html_str;
|
QString html_str;
|
||||||
|
|
||||||
if (net_res.m_networkError != QNetworkReply::NetworkError::NoError) {
|
if (net_error != QNetworkReply::NetworkError::NoError) {
|
||||||
html_str = "Error!";
|
html_str = "Error!";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
html_str = QString::fromUtf8(output);
|
html_str = QString::fromUtf8(m_downloader->lastOutputData());
|
||||||
}
|
}
|
||||||
|
|
||||||
setHtml(html_str, url);
|
setHtml(html_str, url);
|
||||||
|
|
||||||
emit loadFinished(net_res.m_networkError == QNetworkReply::NetworkError::NoError);
|
emit loadFinished(net_error == QNetworkReply::NetworkError::NoError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiteHtmlViewer::setHtml(const QString& html, const QUrl& base_url) {
|
void LiteHtmlViewer::setHtml(const QString& html, const QUrl& base_url) {
|
||||||
@ -243,6 +237,18 @@ void LiteHtmlViewer::setZoomFactor(qreal zoom_factor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LiteHtmlViewer::selectedTextChanged(bool available) {
|
||||||
|
if (!available) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString sel_text = QLiteHtmlWidget::selectedText();
|
||||||
|
|
||||||
|
if (!sel_text.isEmpty()) {
|
||||||
|
QGuiApplication::clipboard()->setText(sel_text, QClipboard::Mode::Selection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LiteHtmlViewer::wheelEvent(QWheelEvent* event) {
|
void LiteHtmlViewer::wheelEvent(QWheelEvent* event) {
|
||||||
if ((event->modifiers() & Qt::KeyboardModifier::ControlModifier) > 0) {
|
if ((event->modifiers() & Qt::KeyboardModifier::ControlModifier) > 0) {
|
||||||
if (event->angleDelta().y() > 0 && canZoomIn()) {
|
if (event->angleDelta().y() > 0 && canZoomIn()) {
|
||||||
@ -273,16 +279,16 @@ QByteArray LiteHtmlViewer::handleResource(const QUrl& url) {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QByteArray output;
|
QEventLoop loop;
|
||||||
|
|
||||||
NetworkFactory::performNetworkOperation(
|
connect(m_downloader.data(), &Downloader::completed, &loop, &QEventLoop::quit);
|
||||||
url.toString(),
|
m_downloader->manipulateData(url.toString(),
|
||||||
5000,
|
QNetworkAccessManager::Operation::GetOperation,
|
||||||
{},
|
{},
|
||||||
output,
|
5000);
|
||||||
QNetworkAccessManager::Operation::GetOperation);
|
|
||||||
|
|
||||||
return output;
|
loop.exec();
|
||||||
|
return m_downloader->lastOutputData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "3rd-party/qlitehtml/qlitehtmlwidget.h"
|
#include "3rd-party/qlitehtml/qlitehtmlwidget.h"
|
||||||
#include "gui/webviewer.h"
|
#include "gui/webviewer.h"
|
||||||
|
|
||||||
|
class Downloader;
|
||||||
class QWheelEvent;
|
class QWheelEvent;
|
||||||
|
|
||||||
class LiteHtmlViewer : public QLiteHtmlWidget, public WebViewer {
|
class LiteHtmlViewer : public QLiteHtmlWidget, public WebViewer {
|
||||||
@ -33,6 +34,9 @@ class LiteHtmlViewer : public QLiteHtmlWidget, public WebViewer {
|
|||||||
virtual void zoomOut();
|
virtual void zoomOut();
|
||||||
virtual void setZoomFactor(qreal zoom_factor);
|
virtual void setZoomFactor(qreal zoom_factor);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void selectedTextChanged(bool available);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void zoomFactorChanged();
|
void zoomFactorChanged();
|
||||||
void titleChanged(const QString& new_title);
|
void titleChanged(const QString& new_title);
|
||||||
@ -47,6 +51,9 @@ class LiteHtmlViewer : public QLiteHtmlWidget, public WebViewer {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QByteArray handleResource(const QUrl& url);
|
QByteArray handleResource(const QUrl& url);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QScopedPointer<Downloader> m_downloader;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LITEHTMLVIEWER_H
|
#endif // LITEHTMLVIEWER_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user