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