diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index 362a89cc5..a7417a358 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -26,7 +26,7 @@
https://github.com/sponsors/martinrotter
-
+
none
diff --git a/src/librssguard/gui/feedmessageviewer.cpp b/src/librssguard/gui/feedmessageviewer.cpp
index f91c43a72..905103197 100644
--- a/src/librssguard/gui/feedmessageviewer.cpp
+++ b/src/librssguard/gui/feedmessageviewer.cpp
@@ -281,7 +281,8 @@ void FeedMessageViewer::initialize() {
m_toolBarMessages->setFloatable(false);
m_toolBarMessages->setMovable(false);
m_toolBarMessages->setAllowedAreas(Qt::ToolBarArea::TopToolBarArea);
- m_messagesBrowser->clear();
+
+ // m_messagesBrowser->clear();
// Now refresh visual setup.
refreshVisualProperties();
diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp
index c1e3d6637..9c56d9be1 100644
--- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp
+++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp
@@ -66,19 +66,21 @@ QVariant TextBrowserViewer::loadOneResource(int type, const QUrl& name) {
return {};
}
- if (!m_resourcesEnabled || !m_loadedResources.contains(name)) {
+ auto resolved_name = m_currentUrl.isValid() ? m_currentUrl.resolved(name) : name;
+
+ if (!m_resourcesEnabled || !m_loadedResources.contains(resolved_name)) {
// Resources are not enabled.
return m_placeholderImage;
}
// Resources are enabled and we already have the resource.
- QByteArray resource_data = m_loadedResources.value(name);
+ QByteArray resource_data = m_loadedResources.value(resolved_name);
if (resource_data.isEmpty()) {
return m_placeholderImageError;
}
else {
- return QImage::fromData(m_loadedResources.value(name));
+ return QImage::fromData(m_loadedResources.value(resolved_name));
}
}
@@ -439,7 +441,7 @@ void TextBrowserViewer::setHtml(const QString& html, const QUrl& base_url) {
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
- auto captured_url = match.captured(1);
+ auto captured_url = base_url.isValid() ? base_url.resolved(QUrl(match.captured(1))) : QUrl(match.captured(1));
if (!found_resources.contains(captured_url)) {
found_resources.append(captured_url);
diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h
index 8422b6563..84a62b7b7 100644
--- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h
+++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h
@@ -90,9 +90,9 @@ class TextBrowserViewer : public QTextBrowser, public WebViewer {
private:
bool m_resourcesEnabled;
- QList m_neededResources;
+ QList m_neededResources; // All URLs here must be resolved.
QScopedPointer m_resourceDownloader;
- QMap m_loadedResources;
+ QMap m_loadedResources; // All URLs here must be resolved.
QPixmap m_placeholderImage;
QPixmap m_placeholderImageError;
diff --git a/src/librssguard/network-web/downloader.cpp b/src/librssguard/network-web/downloader.cpp
index 032294bc5..b64924efd 100644
--- a/src/librssguard/network-web/downloader.cpp
+++ b/src/librssguard/network-web/downloader.cpp
@@ -142,6 +142,12 @@ void Downloader::finished() {
m_timer->stop();
+ QUrl original_url = reply->property("original_url").toUrl();
+
+ if (!original_url.isValid()) {
+ original_url = reply->request().url();
+ }
+
// In this phase, some part of downloading process is completed.
QUrl redirection_url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
@@ -180,6 +186,10 @@ void Downloader::finished() {
else if (reply_operation == QNetworkAccessManager::DeleteOperation) {
runDeleteRequest(request);
}
+
+ if (m_activeReply != nullptr) {
+ m_activeReply->setProperty("original_url", original_url);
+ }
}
else {
// No redirection is indicated. Final file is obtained in our "reply" object.
@@ -204,6 +214,9 @@ void Downloader::finished() {
m_lastContentType = reply->header(QNetworkRequest::ContentTypeHeader);
m_lastOutputError = reply->error();
+
+ // original_url = m_activeReply->property("original_url").toUrl();
+
m_activeReply->deleteLater();
m_activeReply = nullptr;
@@ -211,7 +224,7 @@ void Downloader::finished() {
m_inputMultipartData->deleteLater();
}
- emit completed(reply->request().url(), m_lastOutputError, m_lastOutputData);
+ emit completed(original_url, m_lastOutputError, m_lastOutputData);
}
}