From f126c449160792023e039c19e155242791728389 Mon Sep 17 00:00:00 2001 From: Emanoil Kotsev Date: Mon, 8 Oct 2018 23:31:34 +0200 Subject: [PATCH] add a function to handle maps of objectpaths Signed-off-by: Emanoil Kotsev --- tqdbusmarshall.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/tqdbusmarshall.cpp b/tqdbusmarshall.cpp index 7c21619..7f0781f 100644 --- a/tqdbusmarshall.cpp +++ b/tqdbusmarshall.cpp @@ -400,6 +400,19 @@ void qFetchUInt64KeyMapEntry(TQT_DBusDataMap& map, DBusMessageIter* i map.insert(key, qFetchParameter(&itemIter)); } +void qFetchObjectPathKeyMapEntry(TQT_DBusDataMap& map, DBusMessageIter* it) +{ + DBusMessageIter itemIter; + dbus_message_iter_recurse(it, &itemIter); + Q_ASSERT(dbus_message_iter_has_next(&itemIter)); + + TQT_DBusObjectPath key = qFetchParameter(&itemIter).toObjectPath(); + + dbus_message_iter_next(&itemIter); + + map.insert(key, qFetchParameter(&itemIter)); +} + void qFetchStringKeyMapEntry(TQT_DBusDataMap& map, DBusMessageIter* it) { DBusMessageIter itemIter; @@ -487,8 +500,15 @@ static TQT_DBusData qFetchMap(DBusMessageIter *it, const TQT_DBusData& prototype return TQT_DBusData::fromUInt64KeyMap(map); } + case DBUS_TYPE_OBJECT_PATH: { + TQT_DBusDataMap map = prototype.toObjectPathKeyMap(); + do { + qFetchObjectPathKeyMapEntry(map, it); + } while (dbus_message_iter_next(it)); + + return TQT_DBusData::fromObjectPathKeyMap(map); + } case DBUS_TYPE_STRING: // fall through - case DBUS_TYPE_OBJECT_PATH: // fall through case DBUS_TYPE_SIGNATURE: { TQT_DBusDataMap map = prototype.toStringKeyMap(); do { @@ -545,16 +565,6 @@ static TQT_DBusData qFetchParameter(DBusMessageIter *it) dbus_message_iter_recurse(it, &sub); return qFetchMap(&sub, prototypeList[0]); - -// } else if (arrayType == DBUS_TYPE_BYTE) { -// DBusMessageIter sub; -// dbus_message_iter_recurse(it, &sub); -// int len = dbus_message_iter_get_array_len(&sub); -// char* data; -// dbus_message_iter_get_fixed_array(&sub,&data,&len); -// return TQCString(data,len); -// } else { - } else { TQT_DBusDataList list = prototypeList[0].toList();