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));
41 g_variant_unref(value);
48 static GVariant *qStringListToGVariant(
const QStringList &stringList)
50 GVariantBuilder builder;
52 g_variant_builder_init(&builder, G_VARIANT_TYPE_STRING_ARRAY);
53 Q_FOREACH (
const QString &
string, stringList) {
54 g_variant_builder_add(&builder,
"s",
string.toUtf8().constData());
56 return g_variant_builder_end(&builder);
59 static QStringList gVariantToQStringList(GVariant *variant)
64 const gchar **strings = g_variant_get_strv(variant, &length);
65 for (gsize i = 0; i < length; i++) {
66 ret.append(UTF8(strings[i]));
73 QVariant gVariantToQVariant(GVariant *value)
75 GVariantClass variantClass = g_variant_classify(value);
81 case G_VARIANT_CLASS_STRING:
82 variant = UTF8(g_variant_get_string(value, NULL));
84 case G_VARIANT_CLASS_INT32:
85 variant = g_variant_get_int32(value);
87 case G_VARIANT_CLASS_UINT32:
88 variant = g_variant_get_uint32(value);
90 case G_VARIANT_CLASS_INT64:
91 variant = qint64(g_variant_get_int64(value));
93 case G_VARIANT_CLASS_UINT64:
94 variant = quint64(g_variant_get_uint64(value));
96 case G_VARIANT_CLASS_BOOLEAN:
97 variant = bool(g_variant_get_boolean(value));
99 case G_VARIANT_CLASS_ARRAY:
100 if (g_variant_is_of_type(value, G_VARIANT_TYPE_VARDICT)) {
101 variant = gVariantToQVariantMap(value);
103 }
else if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY)) {
104 variant = gVariantToQStringList(value);
109 qWarning() <<
"Unsupported type" << UTF8(g_variant_get_type_string(value));
116 GVariant *qVariantToGVariant(
const QVariant &variant)
121 switch (variant.type())
123 case QVariant::String:
124 tmpvalue = variant.toString().toUtf8();
125 ret = g_variant_new_string(tmpvalue.constData());
128 ret = g_variant_new_int32(variant.toInt());
131 ret = g_variant_new_uint32(variant.toUInt());
133 case QVariant::LongLong:
134 ret = g_variant_new_int64(variant.toLongLong());
136 case QVariant::ULongLong:
137 ret = g_variant_new_uint64(variant.toULongLong());
140 ret = g_variant_new_boolean(variant.toBool());
142 case QVariant::StringList:
143 ret = qStringListToGVariant(variant.toStringList());
146 qWarning() <<
"Unsupported datatype" << variant.typeName();