24 #include "accountscommon.h"
27 #include <QStringList>
31 static QVariantMap gVariantToQVariantMap(GVariant *variant)
38 g_variant_iter_init (&iter, variant);
39 while (g_variant_iter_next (&iter,
"{sv}", &key, &value)) {
40 ret.insert(UTF8(key), gVariantToQVariant(value));
46 static GVariant *qStringListToGVariant(
const QStringList &stringList)
48 GVariantBuilder builder;
50 g_variant_builder_init(&builder, G_VARIANT_TYPE_STRING_ARRAY);
51 Q_FOREACH (
const QString &
string, stringList) {
52 g_variant_builder_add(&builder,
"s",
string.toUtf8().constData());
54 return g_variant_builder_end(&builder);
57 static QStringList gVariantToQStringList(GVariant *variant)
62 const gchar **strings = g_variant_get_strv(variant, &length);
63 for (gsize i = 0; i < length; i++) {
64 ret.append(UTF8(strings[i]));
71 QVariant gVariantToQVariant(GVariant *value)
73 GVariantClass variantClass = g_variant_classify(value);
79 case G_VARIANT_CLASS_STRING:
80 variant = UTF8(g_variant_get_string(value, NULL));
82 case G_VARIANT_CLASS_INT32:
83 variant = g_variant_get_int32(value);
85 case G_VARIANT_CLASS_UINT32:
86 variant = g_variant_get_uint32(value);
88 case G_VARIANT_CLASS_INT64:
89 variant = qint64(g_variant_get_int64(value));
91 case G_VARIANT_CLASS_UINT64:
92 variant = quint64(g_variant_get_uint64(value));
94 case G_VARIANT_CLASS_BOOLEAN:
95 variant = bool(g_variant_get_boolean(value));
97 case G_VARIANT_CLASS_ARRAY:
98 if (g_variant_is_of_type(value, G_VARIANT_TYPE_VARDICT)) {
99 variant = gVariantToQVariantMap(value);
101 }
else if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY)) {
102 variant = gVariantToQStringList(value);
107 qWarning() <<
"Unsupported type" << UTF8(g_variant_get_type_string(value));
114 GVariant *qVariantToGVariant(
const QVariant &variant)
119 switch (variant.type())
121 case QVariant::String:
122 tmpvalue = variant.toString().toUtf8();
123 ret = g_variant_new_string(tmpvalue.constData());
126 ret = g_variant_new_int32(variant.toInt());
129 ret = g_variant_new_uint32(variant.toUInt());
131 case QVariant::LongLong:
132 ret = g_variant_new_int64(variant.toLongLong());
134 case QVariant::ULongLong:
135 ret = g_variant_new_uint64(variant.toULongLong());
138 ret = g_variant_new_boolean(variant.toBool());
140 case QVariant::StringList:
141 ret = qStringListToGVariant(variant.toStringList());
144 qWarning() <<
"Unsupported datatype" << variant.typeName();