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