diff options
author | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2018-08-30 14:55:54 +0300 |
---|---|---|
committer | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2018-10-25 06:21:43 +0000 |
commit | 5d4ba35bc917bc5a48b60da5a4c2cbd03ff4bbf4 (patch) | |
tree | fe4ff27ddb78f7443a03cc4c7a4c087045d4073a /src/networksettings/connman/qnetworksettingsmanager_p.cpp | |
parent | 9ad08f17c3cd96bb6b9d5d501870cb3987ed9097 (diff) |
Add support for dynamically add/remove physical network interfaces
Change-Id: I1690ce5f4b71c1faf14002a9389ca7b5f2b5665d
Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
Diffstat (limited to 'src/networksettings/connman/qnetworksettingsmanager_p.cpp')
-rw-r--r-- | src/networksettings/connman/qnetworksettingsmanager_p.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index bd656c6..2f7965d 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -94,6 +94,8 @@ bool QNetworkSettingsManagerPrivate::initialize() this, &QNetworkSettingsManagerPrivate::getServicesFinished); connect(m_manager, &NetConnmanManagerInterface::ServicesChanged, this, &QNetworkSettingsManagerPrivate::onServicesChanged); + connect(m_manager, &NetConnmanManagerInterface::TechnologyAdded, this, &QNetworkSettingsManagerPrivate::onTechnologyAdded); + connect(m_manager, &NetConnmanManagerInterface::TechnologyRemoved, this, &QNetworkSettingsManagerPrivate::onTechnologyRemoved); m_manager->RegisterAgent(QDBusObjectPath(AgentPath)); m_initialized = true; @@ -154,6 +156,40 @@ void QNetworkSettingsManagerPrivate::onConnmanServiceRegistered(const QString &s } } +void QNetworkSettingsManagerPrivate::onTechnologyAdded(const QDBusObjectPath &technology, const QVariantMap &properties) +{ + Q_Q(QNetworkSettingsManager); + + foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { + ConnmanSettingsInterface* tech = qobject_cast<ConnmanSettingsInterface*>(item); + if (tech->path() != technology.path()) { + ConnmanSettingsInterface *interface = new ConnmanSettingsInterface(technology.path(), properties, this); + interface->scanServices(); + + if (interface->type() == QNetworkSettingsType::Wired) { + m_interfaceModel.insert(0, interface); + } + else if (interface->type() == QNetworkSettingsType::Wifi) { + m_interfaceModel.append(interface); + } + emit q->interfacesChanged(); + } + } +} + +void QNetworkSettingsManagerPrivate::onTechnologyRemoved(const QDBusObjectPath &technology) +{ + Q_Q(QNetworkSettingsManager); + + foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { + ConnmanSettingsInterface* tech = qobject_cast<ConnmanSettingsInterface*>(item); + if (tech->path() == technology.path()) { + m_interfaceModel.removeInterface(technology.path()); + emit q->interfacesChanged(); + } + } +} + void QNetworkSettingsManagerPrivate::getServicesFinished(QDBusPendingCallWatcher *watcher) { Q_Q(QNetworkSettingsManager); |