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);
66 for (gsize i = 0; i < length; i++) {
67 ret.append(UTF8(strings[i]));
74 QVariant gVariantToQVariant(GVariant *value)
76 GVariantClass variantClass = g_variant_classify(value);
82 case G_VARIANT_CLASS_STRING:
83 variant = UTF8(g_variant_get_string(value, NULL));
85 case G_VARIANT_CLASS_INT32:
86 variant = g_variant_get_int32(value);
88 case G_VARIANT_CLASS_UINT32:
89 variant = g_variant_get_uint32(value);
91 case G_VARIANT_CLASS_INT64:
92 variant = qint64(g_variant_get_int64(value));
94 case G_VARIANT_CLASS_UINT64:
95 variant = quint64(g_variant_get_uint64(value));
97 case G_VARIANT_CLASS_BOOLEAN:
98 variant = bool(g_variant_get_boolean(value));
100 case G_VARIANT_CLASS_ARRAY:
101 if (g_variant_is_of_type(value, G_VARIANT_TYPE_VARDICT)) {
102 variant = gVariantToQVariantMap(value);
104 }
else if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY)) {
105 variant = gVariantToQStringList(value);
110 qWarning() <<
"Unsupported type" << UTF8(g_variant_get_type_string(value));
117 GVariant *qVariantToGVariant(
const QVariant &variant)
119 GVariant *ret =
nullptr;
122 switch (variant.type())
124 case QVariant::String:
125 tmpvalue = variant.toString().toUtf8();
126 ret = g_variant_new_string(tmpvalue.constData());
129 ret = g_variant_new_int32(variant.toInt());
132 ret = g_variant_new_uint32(variant.toUInt());
134 case QVariant::LongLong:
135 ret = g_variant_new_int64(variant.toLongLong());
137 case QVariant::ULongLong:
138 ret = g_variant_new_uint64(variant.toULongLong());
141 ret = g_variant_new_boolean(variant.toBool());
143 case QVariant::StringList:
144 ret = qStringListToGVariant(variant.toStringList());
147 qWarning() <<
"Unsupported datatype" << variant.typeName();