diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2025-08-10 10:53:47 +0200 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2025-08-10 10:53:47 +0200 |
| commit | b91bddfbc588dedffda4b129c5e2c2fd9afe7bfd (patch) | |
| tree | 001fc6c3507375902f3c8200d4885abe28c98897 | |
| parent | 99c0f738e1d67aa16875110bfb5621bd7ea04e41 (diff) | |
made new parsers for channel and item
| -rw-r--r-- | src/atomchannel.cpp | 42 | ||||
| -rw-r--r-- | src/atomchannel.h | 2 | ||||
| -rw-r--r-- | src/playground.cpp | 1 |
3 files changed, 39 insertions, 6 deletions
diff --git a/src/atomchannel.cpp b/src/atomchannel.cpp index d89d4ef..d3f3c3f 100644 --- a/src/atomchannel.cpp +++ b/src/atomchannel.cpp @@ -271,11 +271,38 @@ DbItem::DbItem(const QDomNode &node) void DbItem::init(const QMetaObject &mo, const QDomNode &node) { - for (int i = mo.propertyOffset(); i < mo.propertyCount(); ++i) { - auto prop = mo.property(i); - QVariant variant{node.toElement().elementsByTagName(prop.name()).at(0).toElement().text()}; - const bool converted = variant.convert(QMetaType{prop.typeId()}); - prop.writeOnGadget(this, converted ? std::move(variant) : QVariant{}); + // for (int i = mo.propertyOffset(); i < mo.propertyCount(); ++i) { + for (int i = staticMetaObject.propertyOffset(); i < staticMetaObject.propertyCount(); ++i) { + const auto prop = staticMetaObject.property(i); + const auto propName = prop.name(); + const auto propElement = node.toElement().elementsByTagName(propName).at(0); + const auto propText = propElement.toElement().text(); + const auto propType = QMetaType{prop.typeId()}; + + switch (propType.id()) { + case QMetaType::Type::QDateTime: { + prop.writeOnGadget(this, QDateTime::fromString(propText, dateFormat)); + break; + } + case QMetaType::Type::QStringList: { + const auto elements = node.toElement().elementsByTagName(propName); + QStringList values; + values.reserve(elements.size()); + + for (const auto &element : elements) { + values << element.toElement().text(); + } + + prop.writeOnGadget(this, std::move(values)); + + break; + } + default: { + QVariant variant{propText}; + variant.convert(propType); + prop.writeOnGadget(this, std::move(variant)); + } + } } } @@ -283,4 +310,9 @@ Item::Item(const QDomNode &node) : DbItem{node} { init(staticMetaObject, node); + + if (m_content.isEmpty()) { + const QString contentEncodedTag = QStringLiteral("content:encoded"); + set_content(node.toElement().elementsByTagName(contentEncodedTag).at(0).toElement().text()); + } } diff --git a/src/atomchannel.h b/src/atomchannel.h index 87727d2..e52048a 100644 --- a/src/atomchannel.h +++ b/src/atomchannel.h @@ -69,7 +69,7 @@ class Item : public DbItem GADGET_PROPERTY(QString, title); GADGET_PROPERTY(QUrl, link); - GADGET_PROPERTY(QStringList, categories); + GADGET_PROPERTY(QStringList, category); GADGET_PROPERTY(QString, guid); GADGET_PROPERTY(QDateTime, pubDate); GADGET_PROPERTY(QString, description); diff --git a/src/playground.cpp b/src/playground.cpp index 117fb31..73eb84a 100644 --- a/src/playground.cpp +++ b/src/playground.cpp @@ -68,6 +68,7 @@ std::shared_ptr<AtomChannel> Playground::parseFeed(QIODevice *ioDevice) for (const auto &itemNode : itemNodes) { const Item item{itemNode}; qDebug() << item; + break; } return {}; |
