// For license of this file, see /LICENSE.md. #ifndef FEEDPARSER_H #define FEEDPARSER_H #include #include #include #include #include #include "core/message.h" #include "definitions/typedefs.h" #include "services/standard/standardfeed.h" // Base class for all XML-based feed parsers. class FeedParser { public: enum class DataType { Xml, Json, Ical, Other }; explicit FeedParser(QString data, DataType is_xml = DataType::Xml); virtual ~FeedParser(); // Returns list of absolute URLs of discovered feeds from provided base URL. virtual QList discoverFeeds(ServiceRoot* root, const QUrl& url, bool greedy) const; // Guesses feed. virtual QPair> guessFeed(const QByteArray& content, const QString& content_type) const; // Returns list of all messages from the feed. virtual QList messages(); protected: virtual QString feedAuthor() const; // XML. virtual QDomNodeList xmlMessageElements(); virtual QString xmlMessageTitle(const QDomElement& msg_element) const; virtual QString xmlMessageUrl(const QDomElement& msg_element) const; virtual QString xmlMessageDescription(const QDomElement& msg_element) const; virtual QString xmlMessageAuthor(const QDomElement& msg_element) const; virtual QDateTime xmlMessageDateCreated(const QDomElement& msg_element) const; virtual QString xmlMessageId(const QDomElement& msg_element) const; virtual QList xmlMessageEnclosures(const QDomElement& msg_element) const; virtual QList xmlMessageCategories(const QDomElement& msg_element) const; virtual QString xmlMessageRawContents(const QDomElement& msg_element) const; // JSON. virtual QJsonArray jsonMessageElements(); virtual QString jsonMessageTitle(const QJsonObject& msg_element) const; virtual QString jsonMessageUrl(const QJsonObject& msg_element) const; virtual QString jsonMessageDescription(const QJsonObject& msg_element) const; virtual QString jsonMessageAuthor(const QJsonObject& msg_element) const; virtual QDateTime jsonMessageDateCreated(const QJsonObject& msg_element) const; virtual QString jsonMessageId(const QJsonObject& msg_element) const; virtual QList jsonMessageEnclosures(const QJsonObject& msg_element) const; virtual QList jsonMessageCategories(const QJsonObject& msg_element) const; virtual QString jsonMessageRawContents(const QJsonObject& msg_element) const; protected: QList xmlMrssGetEnclosures(const QDomElement& msg_element) const; QString xmlMrssTextFromPath(const QDomElement& msg_element, const QString& xml_path) const; QString xmlRawChild(const QDomElement& container) const; QStringList xmlTextsFromPath(const QDomElement& element, const QString& namespace_uri, const QString& xml_path, bool only_first) const; protected: DataType m_dataType; QString m_data; QDomDocument m_xml; QJsonDocument m_json; QString m_mrssNamespace; }; #endif // FEEDPARSER_H