diff --git a/src/librssguard/services/standard/atomparser.cpp b/src/librssguard/services/standard/atomparser.cpp old mode 100644 new mode 100755 index e3a3b3e36..3d8eaecfe --- a/src/librssguard/services/standard/atomparser.cpp +++ b/src/librssguard/services/standard/atomparser.cpp @@ -47,6 +47,10 @@ Message AtomParser::extractMessage(const QDomElement& msg_element, QDateTime cur if (summary.isEmpty()) { summary = textsFromPath(msg_element, m_atomNamespace, QSL("summary"), true).join(QSL(", ")); + + if (summary.isEmpty()) { + summary = mrssTextFromPath(msg_element, QSL("description")); + } } // Now we obtained maximum of information for title & description. @@ -95,6 +99,9 @@ Message AtomParser::extractMessage(const QDomElement& msg_element, QDateTime cur } } + // Obtain MRSS enclosures. + new_message.m_enclosures.append(mrssGetEnclosures(msg_element)); + if (!last_link_alternate.isEmpty()) { new_message.m_url = last_link_alternate; } diff --git a/src/librssguard/services/standard/atomparser.h b/src/librssguard/services/standard/atomparser.h old mode 100644 new mode 100755 diff --git a/src/librssguard/services/standard/feedparser.cpp b/src/librssguard/services/standard/feedparser.cpp old mode 100644 new mode 100755 index 366932e03..3efdcadb7 --- a/src/librssguard/services/standard/feedparser.cpp +++ b/src/librssguard/services/standard/feedparser.cpp @@ -8,7 +8,7 @@ #include #include -FeedParser::FeedParser(QString data) : m_xmlData(std::move(data)) { +FeedParser::FeedParser(QString data) : m_xmlData(std::move(data)), m_mrssNamespace(QSL("http://search.yahoo.com/mrss/")) { m_xml.setContent(m_xmlData, true); } @@ -45,6 +45,41 @@ QList FeedParser::messages() { return messages; } +QList FeedParser::mrssGetEnclosures(const QDomElement& msg_element) const { + QList enclosures; + + auto content_list = msg_element.elementsByTagNameNS(m_mrssNamespace, "content"); + + for (int i = 0; i < content_list.size(); i++) { + QDomElement elem_content = content_list.at(i).toElement(); + QString url = elem_content.attribute(QSL("url")); + QString type = elem_content.attribute(QSL("type")); + + if (!url.isEmpty() && !type.isEmpty()) { + enclosures.append(Enclosure(url, type)); + } + } + + auto thumbnail_list = msg_element.elementsByTagNameNS(m_mrssNamespace, "thumbnail"); + + for (int i = 0; i < thumbnail_list.size(); i++) { + QDomElement elem_content = thumbnail_list.at(i).toElement(); + QString url = elem_content.attribute(QSL("url")); + + if (!url.isEmpty()) { + enclosures.append(Enclosure(url, QSL("image/png"))); + } + } + + return enclosures; +} + +QString FeedParser::mrssTextFromPath(const QDomElement& msg_element, const QString& xml_path) const { + QString text = msg_element.elementsByTagNameNS(m_mrssNamespace, xml_path).at(0).toElement().text(); + + return text; +} + 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 old mode 100644 new mode 100755 index 8f970cbb2..84423fc35 --- a/src/librssguard/services/standard/feedparser.h +++ b/src/librssguard/services/standard/feedparser.h @@ -10,12 +10,14 @@ class FeedParser { public: - explicit FeedParser(QString data); + explicit FeedParser(QString data); virtual ~FeedParser(); virtual QList messages(); protected: + QList mrssGetEnclosures(const QDomElement& msg_element) const; + QString mrssTextFromPath(const QDomElement& msg_element, const QString& xml_path) 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; @@ -24,6 +26,7 @@ class FeedParser { protected: QString m_xmlData; QDomDocument m_xml; + QString m_mrssNamespace; }; #endif // FEEDPARSER_H