diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index 874f373e0..783add4a9 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -30,7 +30,7 @@
https://martinrotter.github.io/donate/
-
+
none
diff --git a/src/librssguard/gui/webviewer.cpp b/src/librssguard/gui/webviewer.cpp
index 253a02db1..d7bcd3021 100644
--- a/src/librssguard/gui/webviewer.cpp
+++ b/src/librssguard/gui/webviewer.cpp
@@ -53,7 +53,7 @@ WebPage* WebViewer::page() const {
}
void WebViewer::displayMessage() {
- setHtml(m_messageContents /*, QUrl::fromUserInput(INTERNAL_URL_MESSAGE)*/);
+ setHtml(m_messageContents, m_messageBaseUrl /*, QUrl::fromUserInput(INTERNAL_URL_MESSAGE)*/);
}
bool WebViewer::increaseWebPageZoom() {
@@ -143,6 +143,21 @@ void WebViewer::loadMessages(const QList& messages, RootItem* root) {
}
m_root = root;
+
+ auto* feed = root->getParentServiceRoot()->getItemFromSubTree([messages](const RootItem* it) {
+ return it->kind() == RootItem::Kind::Feed && it->customId() == messages.at(0).m_feedId;
+ })->toFeed();
+
+ m_messageBaseUrl = QString();
+
+ if (feed != nullptr) {
+ QUrl url(feed->source());
+
+ if (url.isValid()) {
+ m_messageBaseUrl = url.scheme() + QSL("://") + url.host();
+ }
+ }
+
m_messageContents = skin.m_layoutMarkupWrapper.arg(messages.size() == 1 ? messages.at(0).m_title : tr("Newspaper view"),
messages_layout);
diff --git a/src/librssguard/gui/webviewer.h b/src/librssguard/gui/webviewer.h
index b0bb8a038..b6c38733d 100644
--- a/src/librssguard/gui/webviewer.h
+++ b/src/librssguard/gui/webviewer.h
@@ -45,6 +45,7 @@ class WebViewer : public QWebEngineView {
private:
RootItem* m_root;
+ QString m_messageBaseUrl;
QString m_messageContents;
};
diff --git a/src/librssguard/services/standard/atomparser.cpp b/src/librssguard/services/standard/atomparser.cpp
index 1191890c2..cbb5f6bfa 100755
--- a/src/librssguard/services/standard/atomparser.cpp
+++ b/src/librssguard/services/standard/atomparser.cpp
@@ -50,13 +50,13 @@ QString AtomParser::feedAuthor() const {
Message AtomParser::extractMessage(const QDomElement& msg_element, QDateTime current_time) const {
Message new_message;
QString title = textsFromPath(msg_element, m_atomNamespace, QSL("title"), true).join(QSL(", "));
- QString summary = textsFromPath(msg_element, m_atomNamespace, QSL("content"), true).join(QSL(", "));
+ QString summary = rawXmlChild(msg_element.elementsByTagNameNS(m_atomNamespace, QSL("content")).at(0).toElement());
if (summary.isEmpty()) {
- summary = textsFromPath(msg_element, m_atomNamespace, QSL("summary"), true).join(QSL(", "));
+ summary = rawXmlChild(msg_element.elementsByTagNameNS(m_atomNamespace, QSL("summary")).at(0).toElement());
if (summary.isEmpty()) {
- summary = mrssTextFromPath(msg_element, QSL("description"));
+ summary = rawXmlChild(msg_element.elementsByTagNameNS(m_mrssNamespace, QSL("description")).at(0).toElement());
}
}
diff --git a/src/librssguard/services/standard/feedparser.cpp b/src/librssguard/services/standard/feedparser.cpp
index 47fc7a7f7..8a2559116 100755
--- a/src/librssguard/services/standard/feedparser.cpp
+++ b/src/librssguard/services/standard/feedparser.cpp
@@ -3,9 +3,12 @@
#include "services/standard/feedparser.h"
#include "exceptions/applicationexception.h"
+#include "miscellaneous/application.h"
+#include "network-web/webfactory.h"
#include
#include
+
#include
FeedParser::FeedParser(QString data) : m_xmlData(std::move(data)), m_mrssNamespace(QSL("http://search.yahoo.com/mrss/")) {
@@ -84,6 +87,28 @@ QString FeedParser::mrssTextFromPath(const QDomElement& msg_element, const QStri
return text;
}
+QString FeedParser::rawXmlChild(const QDomElement& container) const {
+ QString raw;
+ auto children = container.childNodes();
+
+ for (int i = 0; i < children.size(); i++) {
+ QString raw_ch;
+
+ if (children.at(i).isCDATASection()) {
+ raw_ch = children.at(i).toCDATASection().data();
+ }
+ else {
+ QTextStream str(&raw_ch);
+
+ children.at(i).save(str, 0);
+ }
+
+ raw += qApp->web()->unescapeHtml(raw_ch);
+ }
+
+ return raw;
+}
+
QStringList FeedParser::textsFromPath(const QDomElement& element, const QString& namespace_uri,
const QString& xml_path, bool only_first) const {
QStringList paths = xml_path.split('/');
diff --git a/src/librssguard/services/standard/feedparser.h b/src/librssguard/services/standard/feedparser.h
index fc750fad9..a1bc6c236 100755
--- a/src/librssguard/services/standard/feedparser.h
+++ b/src/librssguard/services/standard/feedparser.h
@@ -19,6 +19,7 @@ class FeedParser {
protected:
QList mrssGetEnclosures(const QDomElement& msg_element) const;
QString mrssTextFromPath(const QDomElement& msg_element, const QString& xml_path) const;
+ QString rawXmlChild(const QDomElement& container) const;
QStringList textsFromPath(const QDomElement& element, const QString& namespace_uri, const QString& xml_path, bool only_first) const;
virtual QDomNodeList messageElements() = 0;
virtual QString feedAuthor() const;