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

View File

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

View File

@ -63,7 +63,7 @@ RSS Guard is distributed in two variants:
<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%">
@ -235,4 +235,4 @@ To redirect debug output of RSS Guard to log file, do this:
4. Now try to simulate your problem.
5. Attach generated `log.txt` file to your bug report.
On Windows, there are some problems if you want to see debug output of a GUI program, because Windows does not support "dual" applications. You can, however, display application's debug console output with PowerShell, specifically for RSS Guard like this: `.\rssguard.exe | Out-Default`. Just run this stuff when you are in RSS Guard's folder and you should see console output directly in your PowerShell window.
On Windows, there are some problems if you want to see debug output of a GUI program, because Windows does not support "dual" applications. You can, however, display application's debug console output with PowerShell, specifically for RSS Guard like this: `.\rssguard.exe | Out-Default`. Just run this stuff when you are in RSS Guard's folder and you should see console output directly in your PowerShell window.

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

View File

@ -49,11 +49,18 @@ QNetworkReply* BaseNetworkAccessManager::createRequest(QNetworkAccessManager::Op
QIODevice* outgoingData) {
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);
#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.
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;
}

View File

@ -104,71 +104,30 @@ void Downloader::manipulateData(const QString& url,
void Downloader::finished() {
auto* reply = qobject_cast<QNetworkReply*>(sender());
QNetworkAccessManager::Operation reply_operation = reply->operation();
m_timer->stop();
// In this phase, some part of downloading process is completed.
const QUrl redirection_url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
if (redirection_url.isValid()) {
// Communication indicates that HTTP redirection is needed.
// Setup redirection URL and download again.
QNetworkRequest request = reply->request();
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);
}
// No redirection is indicated. Final file is obtained in our "reply" object.
// Read the data into output buffer.
if (m_inputMultipartData == nullptr) {
m_lastOutputData = reply->readAll();
}
else {
// No redirection is indicated. Final file is obtained in our "reply" object.
// 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_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);
}
void Downloader::progressInternal(qint64 bytes_received, qint64 bytes_total) {