Merge branch 'master' of github.com:martinrotter/rssguard

This commit is contained in:
Martin Rotter 2021-01-25 07:14:50 +01:00
commit 7e3bf60d35
5 changed files with 30 additions and 63 deletions

@ -14,3 +14,4 @@ Comment[de]=Qt Feedreader mit großem Funktionsumfang bei geringem Ressourcenbed
Icon=rssguard Icon=rssguard
Terminal=false Terminal=false
Categories=Qt;Network;News; Categories=Qt;Network;News;
StartupWMClass=rssguard

@ -63,7 +63,7 @@ RSS Guard is distributed in two variants:
<img src="images/webengine-view.png" width="80%"> <img src="images/webengine-view.png" width="80%">
* **Lite package with simple text-based message viewer**: This variant displays message in much simpler and more lightweight text-based component. Layout and formatting of displayed message is simplified, no big external web viewers are used, which results in much smaller installation packages, much smaller memory footprint and increased privacy of the user, because many web resources are not downloaded by default like pictures, JavaScript and so on. This variant of RSS Guard is meant for advanced users and offers faster GUI response in some use-cases. * **Lite package with simple text-based message viewer**: This variant displays message in much simpler and more lightweight text-based component. All packages of this variant have `nowebengine` keyword in their names. Layout and formatting of displayed message is simplified, no big external web viewers are used, which results in much smaller installation packages, much smaller memory footprint and increased privacy of the user, because many web resources are not downloaded by default like pictures, JavaScript and so on. This variant of RSS Guard is meant for advanced users and offers faster GUI response in some use-cases.
<img src="images/nonwebengine-view.png" width="80%"> <img src="images/nonwebengine-view.png" width="80%">

@ -1 +1 @@
Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9 Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749

@ -49,11 +49,18 @@ QNetworkReply* BaseNetworkAccessManager::createRequest(QNetworkAccessManager::Op
QIODevice* outgoingData) { QIODevice* outgoingData) {
QNetworkRequest new_request = request; QNetworkRequest new_request = request;
// This rapidly speeds up loading of web sites.
// NOTE: https://en.wikipedia.org/wiki/HTTP_pipelining
new_request.setAttribute(QNetworkRequest::Attribute::HttpPipeliningAllowedAttribute, true); new_request.setAttribute(QNetworkRequest::Attribute::HttpPipeliningAllowedAttribute, true);
#if QT_VERSION >= 0x050900
new_request.setAttribute(QNetworkRequest::Attribute::RedirectPolicyAttribute,
QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy);
#elif QT_VERSION >= 0x050600
new_request.setAttribute(QNetworkRequest::Attribute::FollowRedirectsAttribute, true);
#endif
// Setup custom user-agent. // Setup custom user-agent.
new_request.setRawHeader(HTTP_HEADERS_USER_AGENT, QString(APP_USERAGENT).toLocal8Bit()); new_request.setRawHeader(HTTP_HEADERS_USER_AGENT, QString(APP_USERAGENT).toLocal8Bit());
return QNetworkAccessManager::createRequest(op, new_request, outgoingData);
auto reply = QNetworkAccessManager::createRequest(op, new_request, outgoingData);
return reply;
} }

@ -104,71 +104,30 @@ void Downloader::manipulateData(const QString& url,
void Downloader::finished() { void Downloader::finished() {
auto* reply = qobject_cast<QNetworkReply*>(sender()); auto* reply = qobject_cast<QNetworkReply*>(sender());
QNetworkAccessManager::Operation reply_operation = reply->operation();
m_timer->stop(); m_timer->stop();
// In this phase, some part of downloading process is completed. // In this phase, some part of downloading process is completed.
const QUrl redirection_url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); const QUrl redirection_url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
if (redirection_url.isValid()) { // No redirection is indicated. Final file is obtained in our "reply" object.
// Communication indicates that HTTP redirection is needed. // Read the data into output buffer.
// Setup redirection URL and download again. if (m_inputMultipartData == nullptr) {
QNetworkRequest request = reply->request(); m_lastOutputData = reply->readAll();
if (redirection_url.host().isEmpty()) {
request.setUrl(QUrl(reply->request().url().scheme() + QSL("://") + reply->request().url().host() + redirection_url.toString()));
}
else {
request.setUrl(redirection_url);
}
qWarningNN << LOGSEC_NETWORK
<< "We are redirecting URL request to:"
<< QUOTE_W_SPACE_DOT(request.url());
m_activeReply->deleteLater();
m_activeReply = nullptr;
if (reply_operation == QNetworkAccessManager::GetOperation) {
runGetRequest(request);
}
else if (reply_operation == QNetworkAccessManager::Operation::PostOperation) {
if (m_inputMultipartData == nullptr) {
runPostRequest(request, m_inputData);
}
else {
runPostRequest(request, m_inputMultipartData);
}
}
else if (reply_operation == QNetworkAccessManager::PutOperation) {
runPutRequest(request, m_inputData);
}
else if (reply_operation == QNetworkAccessManager::DeleteOperation) {
runDeleteRequest(request);
}
} }
else { else {
// No redirection is indicated. Final file is obtained in our "reply" object. m_lastOutputMultipartData = decodeMultipartAnswer(reply);
// Read the data into output buffer.
if (m_inputMultipartData == nullptr) {
m_lastOutputData = reply->readAll();
}
else {
m_lastOutputMultipartData = decodeMultipartAnswer(reply);
}
m_lastContentType = reply->header(QNetworkRequest::ContentTypeHeader);
m_lastOutputError = reply->error();
m_activeReply->deleteLater();
m_activeReply = nullptr;
if (m_inputMultipartData != nullptr) {
m_inputMultipartData->deleteLater();
}
emit completed(m_lastOutputError, m_lastOutputData);
} }
m_lastContentType = reply->header(QNetworkRequest::ContentTypeHeader);
m_lastOutputError = reply->error();
m_activeReply->deleteLater();
m_activeReply = nullptr;
if (m_inputMultipartData != nullptr) {
m_inputMultipartData->deleteLater();
}
emit completed(m_lastOutputError, m_lastOutputData);
} }
void Downloader::progressInternal(qint64 bytes_received, qint64 bytes_total) { void Downloader::progressInternal(qint64 bytes_received, qint64 bytes_total) {