diff options
Diffstat (limited to 'src/playground.cpp')
| -rw-r--r-- | src/playground.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/playground.cpp b/src/playground.cpp index 476d716..117fb31 100644 --- a/src/playground.cpp +++ b/src/playground.cpp @@ -1,6 +1,7 @@ #include "playground.h" #include <QDebug> +#include <QDomDocument> #include <QLocale> #include <QNetworkAccessManager> #include <QNetworkReply> @@ -34,6 +35,77 @@ void Playground::onReplyFinished(QNetworkReply *reply) std::shared_ptr<AtomChannel> Playground::parseFeed(QIODevice *ioDevice) { + if (!ioDevice) { + qCritical() << "ioDevice is nullptr"; + return {}; + } + + QDomDocument doc; + + if (!doc.setContent(ioDevice)) { + qCritical() << "cannot set io device to dom doc"; + + return {}; + } + + const auto rssTag = QStringLiteral("rss"); + const auto channelTag = QStringLiteral("channel"); + const auto titleTag = QStringLiteral("title"); + const auto linkTag = QStringLiteral("link"); + const auto itemTag = QStringLiteral("item"); + + const auto documentElement = doc.documentElement(); + + // const auto channelNode = documentElement.elementsByTagName(rssTag).at(0); + const auto channelNode = documentElement.firstChildElement(); + VERIFY_CRIT_RETURN_VAL(!channelNode.isNull(), {}); + + Channel tmpChannel{channelNode}; + qDebug() << tmpChannel; + + const auto itemNodes = channelNode.elementsByTagName(itemTag); + + for (const auto &itemNode : itemNodes) { + const Item item{itemNode}; + qDebug() << item; + } + + return {}; + + // const auto channelNode = rssNode.toElement().elementsByTagName(channelTag).at(0); + // VERIFY_CRIT_RETURN_VAL(!channelNode.isNull(), {}); + + const auto childNode = [](const QDomNode &parent, const QString &tag) { + return parent.toElement().elementsByTagName(tag).at(0); + }; + + const auto childNodeText = [childNode](const QDomNode &parent, const QString &tag) { + const auto node = childNode(parent, tag); + VERIFY_RETURN_VAL(!node.isNull(), QString{}); + return node.toElement().text(); + }; + + qDebug() << "AZAZA: title:" << childNodeText(channelNode, titleTag); + qDebug() << "AZAZA: link:" << childNodeText(channelNode, linkTag); + + QDomNode node{channelNode.firstChildElement()}; + + while (!node.isNull()) { + const auto element = node.toElement(); + + if (element.isNull()) { + node = node.nextSibling(); + + continue; + } + + // const auto title = childNodeText(element, titleTag); + node = node.nextSibling(); + // qDebug() << "AZAZA: title:" << title; + } + + return {}; + // TODO: check for nullptr // TODO: try `QNetworkReply::readyRead` instead of `QNetworkAccessManager::finished` std::shared_ptr<AtomChannel> channel{}; |
