summaryrefslogtreecommitdiff
path: root/src/playground.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/playground.cpp')
-rw-r--r--src/playground.cpp72
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{};