diff options
Diffstat (limited to 'src/atomchannel.cpp')
| -rw-r--r-- | src/atomchannel.cpp | 42 |
1 files changed, 37 insertions, 5 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()); + } } |
