diff options
Diffstat (limited to 'src/networksettings/connman')
7 files changed, 61 insertions, 30 deletions
diff --git a/src/networksettings/connman/qnetworksettingsinterface_p.cpp b/src/networksettings/connman/qnetworksettingsinterface_p.cpp index 3525aa7..83ab73a 100644 --- a/src/networksettings/connman/qnetworksettingsinterface_p.cpp +++ b/src/networksettings/connman/qnetworksettingsinterface_p.cpp @@ -33,6 +33,7 @@ QNetworkSettingsInterfacePrivate::QNetworkSettingsInterfacePrivate(QNetworkSettingsInterface* parent) : QObject(parent) + , m_technology(Q_NULLPTR) ,q_ptr(parent) { diff --git a/src/networksettings/connman/qnetworksettingsinterface_p.h b/src/networksettings/connman/qnetworksettingsinterface_p.h index 7f5ee7b..eabe610 100644 --- a/src/networksettings/connman/qnetworksettingsinterface_p.h +++ b/src/networksettings/connman/qnetworksettingsinterface_p.h @@ -66,7 +66,7 @@ class ConnmanSettingsInterface : public QNetworkSettingsInterface { Q_OBJECT public: - ConnmanSettingsInterface(const QString& path, const QVariantMap& properties, QObject *parent = nullptr) + ConnmanSettingsInterface(const QString& path, const QVariantMap& properties, QObject *parent = Q_NULLPTR) :QNetworkSettingsInterface(parent) { if (d_ptr) diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index 875be9b..22e8005 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -37,6 +37,11 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsManager *parent) :QObject(parent) ,q_ptr(parent) + , m_interfaceModel(Q_NULLPTR) + , m_serviceModel(Q_NULLPTR) + , m_serviceFilter(Q_NULLPTR) + , m_manager(Q_NULLPTR) + , m_agent(Q_NULLPTR) { qDBusRegisterMetaType<ConnmanMapStruct>(); qDBusRegisterMetaType<ConnmanMapStructList>(); @@ -54,13 +59,13 @@ QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsM //List technologies QDBusPendingReply<ConnmanMapStructList> reply = m_manager->GetTechnologies(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); - connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(getTechnologiesFinished(QDBusPendingCallWatcher*))); + connect(watcher, &QDBusPendingCallWatcher::finished, + this, &QNetworkSettingsManagerPrivate::getTechnologiesFinished); reply = m_manager->GetServices(); watcher = new QDBusPendingCallWatcher(reply, this); - connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(getServicesFinished(QDBusPendingCallWatcher*))); + connect(watcher, &QDBusPendingCallWatcher::finished, + this, &QNetworkSettingsManagerPrivate::getServicesFinished); connect(m_manager, &NetConnmanManagerInterface::ServicesChanged, this, &QNetworkSettingsManagerPrivate::onServicesChanged); @@ -93,25 +98,7 @@ void QNetworkSettingsManagerPrivate::getServicesFinished(QDBusPendingCallWatcher foreach (const ConnmanMapStruct &object, reply.value()) { const QString servicePath = object.objectPath.path(); - QNetworkSettingsService *service = new QNetworkSettingsService(servicePath, this); - m_serviceModel->append(service); - - //Update status property - QString n = qdbus_cast<QString>(object.propertyMap[PropertyName]); - QString t = qdbus_cast<QString>(object.propertyMap[PropertyType]); - QString s = qdbus_cast<QString>(object.propertyMap[PropertyState]); - - QNetworkSettingsType type; - t >> type; - QNetworkSettingsState state; - s >> state; - - foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { - ConnmanSettingsInterface* technology = qobject_cast<ConnmanSettingsInterface*>(item); - if (technology->name() == n && technology->type() == type.type()) { - technology->setState(state.state()); - } - } + handleNewService(servicePath); } emit q->servicesChanged(); } @@ -156,9 +143,26 @@ void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList chan if (!found) newServices.append(map.objectPath.path()); } + foreach (QString newService, newServices) { - QNetworkSettingsService *service = new QNetworkSettingsService(newService, this); + handleNewService(newService); + } +} + +void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath) +{ + Q_Q(QNetworkSettingsManager); + + QNetworkSettingsService *service = new QNetworkSettingsService(servicePath, this); + + if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { m_serviceModel->append(service); + emit q->servicesChanged(); + } + else { + //Service name or type not set, wait for update + connect(service, &QNetworkSettingsService::nameChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); + connect(service, &QNetworkSettingsService::typeChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); } } @@ -166,3 +170,24 @@ void QNetworkSettingsManagerPrivate::setUserAgent(QNetworkSettingsUserAgent *age { m_agent = agent; } + +void QNetworkSettingsManagerPrivate::serviceReady() +{ + Q_Q(QNetworkSettingsManager); + + QNetworkSettingsService* service = qobject_cast<QNetworkSettingsService*>(sender()); + if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { + service->disconnect(this); + m_serviceModel->append(service); + emit q->servicesChanged(); + + //Update the interface state accordingly + foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { + ConnmanSettingsInterface* technology = qobject_cast<ConnmanSettingsInterface*>(item); + if (technology->name() == service->name() && technology->type() == service->type()) { + technology->setState(technology->state()); + } + } + + } +} diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.h b/src/networksettings/connman/qnetworksettingsmanager_p.h index cb42654..b6e23ab 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.h +++ b/src/networksettings/connman/qnetworksettingsmanager_p.h @@ -38,6 +38,7 @@ class NetConnmanManagerInterface; class QNetworkSettingsServiceModel; class QNetworkSettingsServiceFilter; +class QNetworkSettingsService; class QNetworkSettingsManagerPrivate : public QObject { @@ -47,13 +48,15 @@ public: explicit QNetworkSettingsManagerPrivate(QNetworkSettingsManager *parent); QNetworkSettingsManager *q_ptr; void setUserAgent(QNetworkSettingsUserAgent *agent); - QNetworkSettingsUserAgent *getUserAgent() {return m_agent;} + QNetworkSettingsUserAgent *userAgent() {return m_agent;} public slots: void getServicesFinished(QDBusPendingCallWatcher *watcher); void getTechnologiesFinished(QDBusPendingCallWatcher *watcher); void requestInput(const QString& service, const QString& type); void onServicesChanged(ConnmanMapStructList changed, const QList<QDBusObjectPath> &removed); - + void serviceReady(); +private: + void handleNewService(const QString& servicePath); protected: QNetworkSettingsInterfaceModel m_interfaceModel; QNetworkSettingsServiceModel *m_serviceModel; diff --git a/src/networksettings/connman/qnetworksettingsservice_p.cpp b/src/networksettings/connman/qnetworksettingsservice_p.cpp index 8a7b2cf..e8aabff 100644 --- a/src/networksettings/connman/qnetworksettingsservice_p.cpp +++ b/src/networksettings/connman/qnetworksettingsservice_p.cpp @@ -362,6 +362,7 @@ void QNetworkSettingsServicePrivate::updateProperty(const QString& key, const QV else if (key == PropertyType) { QString value = qdbus_cast<QString>(val); value >> m_type; + emit q->typeChanged(); } else if (key == PropertyStrength) { m_wifiConfig.setSignalStrength(val.toInt()); diff --git a/src/networksettings/connman/qnetworksettingsservice_p.h b/src/networksettings/connman/qnetworksettingsservice_p.h index e9166d7..58adbb9 100644 --- a/src/networksettings/connman/qnetworksettingsservice_p.h +++ b/src/networksettings/connman/qnetworksettingsservice_p.h @@ -29,10 +29,11 @@ #ifndef QNETWORKSETTINGSSERVICEPRIVATE_H #define QNETWORKSETTINGSSERVICEPRIVATE_H -#include <QtDBus> #include "qnetworksettingsservice.h" #include "qnetworksettings.h" +class QDBusPendingCallWatcher; +class QDBusVariant; class NetConnmanServiceInterface; class QNetworkSettingsServicePrivate : public QObject @@ -40,7 +41,7 @@ class QNetworkSettingsServicePrivate : public QObject Q_OBJECT Q_DECLARE_PUBLIC(QNetworkSettingsService) public: - QNetworkSettingsServicePrivate(const QString& aPath, QNetworkSettingsService *parent = nullptr); + QNetworkSettingsServicePrivate(const QString& aPath, QNetworkSettingsService *parent = Q_NULLPTR); QNetworkSettingsService *q_ptr; private slots: diff --git a/src/networksettings/connman/qnetworksettingsuseragent_p.h b/src/networksettings/connman/qnetworksettingsuseragent_p.h index ecce5ae..ff8c1d0 100644 --- a/src/networksettings/connman/qnetworksettingsuseragent_p.h +++ b/src/networksettings/connman/qnetworksettingsuseragent_p.h @@ -50,7 +50,7 @@ class QNetworkSettingsUserAgentPrivate : public QDBusAbstractAdaptor Q_CLASSINFO("D-Bus Interface", "net.connman.Agent") Q_DECLARE_PUBLIC(QNetworkSettingsUserAgent) public: - QNetworkSettingsUserAgentPrivate(QNetworkSettingsUserAgent *parent = nullptr); + QNetworkSettingsUserAgentPrivate(QNetworkSettingsUserAgent *parent = Q_NULLPTR); void setUserCredentials(const QString& aUsername, const QString& aPassword); void cancel(); void release(); |