summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/networksettings/plugin.cpp9
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.cpp60
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.h5
-rw-r--r--src/networksettings/connman/qnetworksettingsservice_p.cpp1
-rw-r--r--src/networksettings/qnetworksettings.h4
-rw-r--r--src/networksettings/qnetworksettingsmanager.cpp6
-rw-r--r--src/networksettings/qnetworksettingsmanager.h13
-rw-r--r--src/networksettings/qnetworksettingsservicemodel.h2
8 files changed, 66 insertions, 34 deletions
diff --git a/src/imports/networksettings/plugin.cpp b/src/imports/networksettings/plugin.cpp
index 245e952..c1dac53 100644
--- a/src/imports/networksettings/plugin.cpp
+++ b/src/imports/networksettings/plugin.cpp
@@ -31,6 +31,8 @@
#include <qnetworksettingsmanager.h>
#include <qnetworksettingsservice.h>
#include <qnetworksettingsuseragent.h>
+#include <qnetworksettingsservicemodel.h>
+#include <qnetworksettingsinterfacemodel.h>
#include <qqml.h>
#include <QQmlEngine>
@@ -44,7 +46,7 @@
\brief Provides singleton QML types for controlling network settings.
Provides singleton QML types for controlling network settings in an
- embedded device.
+ embedded device.QAbstractItemModel
Import the module as follows:
@@ -106,7 +108,7 @@
*/
/*!
- \qmlmethod NetworkService NetworkSettingsManager::getService(string name, int type)
+ \qmlmethod NetworkService NetworkSettingsManager::service(string name, int type)
Returns the service with name \a name and type \a type.
@@ -161,5 +163,8 @@ void NetworksettingspluginPlugin::registerTypes(const char *uri)
qmlRegisterUncreatableType<QNetworkSettingsState>(uri, 1, 0, "NetworkSettingsState", "Cannot be instantiated directly.");
qRegisterMetaType<QNetworkSettingsUserAgent*>("QNetworkSettingsUserAgent*");
+ qRegisterMetaType<QNetworkSettingsServiceFilter*>("QNetworkSettingsServiceFilter*");
+ qRegisterMetaType<QNetworkSettingsInterfaceModel*>("QNetworkSettingsInterfaceModel*");
+
qmlRegisterSingletonType<QNetworkSettingsManager>(uri, 1, 0, "NetworkSettingsManager", &instance<QNetworkSettingsManager>);
}
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
index 6fecd86..22e8005 100644
--- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp
+++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
@@ -98,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();
}
@@ -161,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);
}
}
@@ -171,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 5eb5470..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
{
@@ -53,7 +54,9 @@ public slots:
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/qnetworksettings.h b/src/networksettings/qnetworksettings.h
index da75acd..5323f98 100644
--- a/src/networksettings/qnetworksettings.h
+++ b/src/networksettings/qnetworksettings.h
@@ -166,12 +166,11 @@ class Q_DECL_EXPORT QNetworkSettingsProxy : public QObject
{
Q_OBJECT
Q_ENUMS(MethodType)
-public:
Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
Q_PROPERTY(QAbstractItemModel* servers READ servers NOTIFY serversChanged)
Q_PROPERTY(QAbstractItemModel* excludes READ excludes NOTIFY excludesChanged)
Q_PROPERTY(MethodType method READ method WRITE setMethod NOTIFY methodChanged)
-
+public:
explicit QNetworkSettingsProxy(QObject *parent = Q_NULLPTR);
enum MethodType {Direct, Auto, Manual};
@@ -202,6 +201,7 @@ private:
class Q_DECL_EXPORT QNetworkSettingsWireless : public QObject
{
Q_OBJECT
+ Q_ENUMS(SecurityFlags)
Q_PROPERTY(int signalStrength READ signalStrength WRITE setSignalStrength NOTIFY signalStrengthChanged)
Q_PROPERTY(bool hidden READ hidden NOTIFY hiddenChanged)
Q_PROPERTY(bool isOutOfRange READ outOfRange WRITE setOutOfRange NOTIFY outOfRangeChanged)
diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp
index ceee7ad..caf6057 100644
--- a/src/networksettings/qnetworksettingsmanager.cpp
+++ b/src/networksettings/qnetworksettingsmanager.cpp
@@ -39,19 +39,19 @@ QNetworkSettingsManager::QNetworkSettingsManager(QObject *parent) :
{
}
-QAbstractItemModel* QNetworkSettingsManager::services()
+QNetworkSettingsServiceFilter *QNetworkSettingsManager::services()
{
Q_D(QNetworkSettingsManager);
return d->m_serviceFilter;
}
-QAbstractItemModel* QNetworkSettingsManager::interfaces()
+QNetworkSettingsInterfaceModel *QNetworkSettingsManager::interfaces()
{
Q_D(QNetworkSettingsManager);
return &d->m_interfaceModel;
}
-QNetworkSettingsService* QNetworkSettingsManager::getService(const QString& name, const int type)
+QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, const int type)
{
Q_D(QNetworkSettingsManager);
diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h
index ba34974..86a60c4 100644
--- a/src/networksettings/qnetworksettingsmanager.h
+++ b/src/networksettings/qnetworksettingsmanager.h
@@ -35,24 +35,27 @@
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsManagerPrivate)
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsService)
+QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceModel)
QT_FORWARD_DECLARE_CLASS(QNetworkSettingsUserAgent)
+QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceFilter)
+QT_FORWARD_DECLARE_CLASS(QNetworkSettingsInterfaceModel)
class Q_DECL_EXPORT QNetworkSettingsManager : public QObject
{
Q_OBJECT
Q_ENUMS(StateTypes NetworkTypeTypes)
- Q_PROPERTY(QAbstractItemModel* services READ services NOTIFY servicesChanged)
- Q_PROPERTY(QAbstractItemModel* interfaces READ interfaces NOTIFY interfacesChanged)
+ Q_PROPERTY(QNetworkSettingsServiceFilter* services READ services NOTIFY servicesChanged)
+ Q_PROPERTY(QNetworkSettingsInterfaceModel* interfaces READ interfaces NOTIFY interfacesChanged)
Q_PROPERTY(QNetworkSettingsUserAgent* userAgent READ userAgent CONSTANT)
public:
explicit QNetworkSettingsManager(QObject* parent = Q_NULLPTR);
- QAbstractItemModel* services();
- QAbstractItemModel* interfaces();
+ QNetworkSettingsServiceFilter* services();
+ QNetworkSettingsInterfaceModel* interfaces();
void setUserAgent(QNetworkSettingsUserAgent *agent);
QNetworkSettingsUserAgent* userAgent();
- Q_INVOKABLE QNetworkSettingsService* getService(const QString& name, const int type);
+ Q_INVOKABLE QNetworkSettingsService* service(const QString& name, const int type);
Q_SIGNALS:
void servicesChanged();
diff --git a/src/networksettings/qnetworksettingsservicemodel.h b/src/networksettings/qnetworksettingsservicemodel.h
index ab225bd..c158ec4 100644
--- a/src/networksettings/qnetworksettingsservicemodel.h
+++ b/src/networksettings/qnetworksettingsservicemodel.h
@@ -70,7 +70,7 @@ private:
QHash<int, QByteArray> m_roleNames;
};
-class QNetworkSettingsServiceFilter : public QSortFilterProxyModel
+class Q_DECL_EXPORT QNetworkSettingsServiceFilter : public QSortFilterProxyModel
{
Q_OBJECT
Q_PROPERTY(QNetworkSettingsType::Types type READ type WRITE setType NOTIFY typeChanged)