diff options
author | Lorn Potter <lorn.potter@jollamobile.com> | 2012-12-07 07:41:44 +1000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-12-20 01:42:05 +0100 |
commit | 2efccfeeef70ebd8a2db2ebccb3c63722ae76e1f (patch) | |
tree | 369bdd18695e66dda885122479246c9f6b26f104 | |
parent | 12b68e817f58d001e294b388b7f9b8963d41fa0b (diff) |
Update connman bearer plugin for changed connman API.
This should also remain working for previous connman
Change-Id: I5f0a1947f11948b202391ba0c256067faa01ce6d
Reviewed-by: Lorn Potter <lorn.potter@jollamobile.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/plugins/bearer/connman/qconnmanservice_linux.cpp | 48 | ||||
-rw-r--r-- | src/plugins/bearer/connman/qconnmanservice_linux_p.h | 13 |
2 files changed, 56 insertions, 5 deletions
diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 46757ab021..dbfac6b438 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -57,9 +57,24 @@ #ifndef QT_NO_DBUS QT_BEGIN_NAMESPACE -static QDBusConnection dbusConnection = QDBusConnection::systemBus(); +QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &map) +{ + argument.beginStructure(); + argument << map.objectPath << map.propertyMap; + argument.endStructure(); + return argument; +} + +const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &map) +{ + argument.beginStructure(); + argument >> map.objectPath >> map.propertyMap; + argument.endStructure(); + return argument; +} +static QDBusConnection dbusConnection = QDBusConnection::systemBus(); QConnmanManagerInterface::QConnmanManagerInterface( QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), QLatin1String(CONNMAN_MANAGER_PATH), @@ -301,14 +316,37 @@ QStringList QConnmanManagerInterface::getProfiles() QStringList QConnmanManagerInterface::getTechnologies() { - QVariant var = getProperty("Technologies"); - return qdbus_cast<QStringList >(var); + QStringList list; + QDBusReply<ConnmanMapList> replyList = this->call(QLatin1String("GetTechnologies")); + if (replyList.isValid()) { + Q_FOREACH (ConnmanMap map, replyList.value()) { + list << map.objectPath.path(); + } + } else { + // try for older version + QVariant var = getProperty("Technologies"); + if (!var.isNull()) { + list = qdbus_cast<QStringList>(var); + } + } + return list; } QStringList QConnmanManagerInterface::getServices() { - QVariant var = getProperty("Services"); - return qdbus_cast<QStringList >(var); + QStringList list; + QDBusReply<ConnmanMapList> replyList = this->call(QLatin1String("GetServices")); + if (replyList.isValid()) { + Q_FOREACH (ConnmanMap map, replyList.value()) { + list << map.objectPath.path(); + } + } else { + QVariant var = getProperty("Services"); + if (!var.isNull()) { + list = qdbus_cast<QStringList>(var); + } + } + return list; } QString QConnmanManagerInterface::getPathForTechnology(const QString &name) diff --git a/src/plugins/bearer/connman/qconnmanservice_linux_p.h b/src/plugins/bearer/connman/qconnmanservice_linux_p.h index be2063f8e8..3ed66f4769 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux_p.h +++ b/src/plugins/bearer/connman/qconnmanservice_linux_p.h @@ -59,6 +59,7 @@ #include <QtDBus/QDBusInterface> #include <QtDBus/QDBusMessage> #include <QtDBus/QDBusReply> +#include <QtDBus/QDBusArgument> #include <QtDBus/QDBusPendingCallWatcher> #include <QtDBus/QDBusObjectPath> @@ -90,11 +91,23 @@ QT_BEGIN_NAMESPACE +struct ConnmanMap { + QDBusObjectPath objectPath; + QVariantMap propertyMap; +}; + +typedef QList< ConnmanMap > ConnmanMapList; + QT_END_NAMESPACE +Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ConnmanMap)) +Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(ConnmanMapList)) QT_BEGIN_NAMESPACE +QDBusArgument &operator<<(QDBusArgument &argument, const ConnmanMap &obj); +const QDBusArgument &operator>>(const QDBusArgument &argument, ConnmanMap &obj); + class QConnmanManagerInterface : public QDBusAbstractInterface { Q_OBJECT |