24#include "accountscommon.h" 
   31static 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);
 
   48static 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);
 
   59static 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]));
 
   74QVariant 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));
 
  117GVariant *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();