Merge branch 'new-dbus' into 'dbus-interface'

update default device && add getssid method

See merge request kylin-desktop/kylin-nm!194
This commit is contained in:
Zhang Jiaping 2021-08-27 01:02:55 +00:00
commit 9ab5539561
15 changed files with 293 additions and 38 deletions

View File

@ -7,10 +7,20 @@ KyNetworkDeviceResourse::KyNetworkDeviceResourse(QObject *parent) : QObject(pare
// m_activeConnectUuidList.clear();
m_activeConnectUuidMap.clear();
m_deviceMap.clear();
//TODO::get uuid from settings for system reboot;
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceAdd, this, &KyNetworkDeviceResourse::deviceAdd);
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceRemove, this, &KyNetworkDeviceResourse::deviceRemove);
initDeviceMap();
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceAdd, this, [=](QString deviceName, QString uni, NetworkManager::Device::Type deviceType) {
m_deviceMap.insert(uni,deviceName);
emit deviceAdd(deviceName, deviceType);
});
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceRemove, this, [=](QString deviceName, QString uni) {
m_deviceMap.remove(uni);
emit deviceRemove(deviceName);
});
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceUpdate, this, &KyNetworkDeviceResourse::onDeviceUpdate);
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceCarrierChanage, this, &KyNetworkDeviceResourse::carrierChanage);
connect(m_networkResourceInstance, &KyNetworkResourceManager::deviceBitRateChanage, this, &KyNetworkDeviceResourse::deviceBitRateChanage);
@ -23,6 +33,22 @@ KyNetworkDeviceResourse::~KyNetworkDeviceResourse()
m_networkResourceInstance = nullptr;
}
void KyNetworkDeviceResourse::initDeviceMap()
{
NetworkManager::Device::List deviceList
= m_networkResourceInstance->getNetworkDeviceList();
if (deviceList.isEmpty()) {;
return;
}
NetworkManager::Device::Ptr devicePtr = nullptr;
for (int index = 0; index < deviceList.size(); ++index) {
devicePtr = deviceList.at(index);
m_deviceMap.insert(devicePtr->uni(), devicePtr->interfaceName());
}
}
void KyNetworkDeviceResourse::getNetworkDeviceList(
NetworkManager::Device::Type deviceType,
QStringList &networkDeviceList)
@ -213,3 +239,15 @@ void KyNetworkDeviceResourse::setDeviceAutoConnect()
return;
}
void KyNetworkDeviceResourse::onDeviceUpdate(NetworkManager::Device * dev)
{
QString dbusPath = dev->uni();
QString interface = dev->interfaceName();
if (m_deviceMap.contains(dbusPath)) {
if (m_deviceMap[dbusPath] != interface) {
QString oldName = m_deviceMap[dbusPath];
m_deviceMap[dbusPath] = interface;
emit deviceNameUpdate(oldName, interface);
}
}
}

View File

@ -16,6 +16,7 @@ public:
signals:
void deviceAdd(QString deviceName, NetworkManager::Device::Type deviceType);
void deviceUpdate(QString deviceName);
void deviceNameUpdate(QString oldName, QString newName);
void deviceRemove(QString deviceName);
void stateChange(QString deviceName, int state);
@ -23,6 +24,9 @@ signals:
void deviceBitRateChanage(QString deviceName, int bitRate);
void deviceMacAddressChanaged(QString deviceName, const QString &hwAddress);
public slots:
void onDeviceUpdate(NetworkManager::Device * dev);
public:
void getNetworkDeviceList(NetworkManager::Device::Type deviceType, QStringList &networkDeviceList);
void getHardwareInfo(QString ifaceName, QString &hardAddress, int &bandWith);
@ -37,6 +41,9 @@ private:
KyWiredConnectOperation wiredOperation;
KyNetworkResourceManager *m_networkResourceInstance = nullptr;
QStringList m_activeConnectUuidList;
QMap<QString , QString> m_activeConnectUuidMap;
QMap<QString, QString> m_activeConnectUuidMap;
QMap<QString, QString> m_deviceMap;
void initDeviceMap();
};
#endif // KYLINNETORKDEVICERESOURCE_H

View File

@ -634,7 +634,7 @@ void KyNetworkResourceManager::onDeviceAdded(QString const & uni)
if (0 > m_devices.indexOf(networkDevice)) {
addDevice(networkDevice);
emit deviceAdd(networkDevice->interfaceName(), networkDevice->type());
emit deviceAdd(networkDevice->interfaceName(), networkDevice->uni(), networkDevice->type());
} else {
qWarning() << networkDevice->interfaceName() <<"the device is exist in network device list.";
}
@ -656,7 +656,7 @@ void KyNetworkResourceManager::onDeviceRemoved(QString const & uni)
if (m_devices.cend() != index) {
const int pos = index - m_devices.cbegin();
removeDevice(pos);
emit deviceRemove(networkDevice->interfaceName());
emit deviceRemove(networkDevice->interfaceName(), networkDevice->uni());
}
return;

View File

@ -105,9 +105,9 @@ signals:
void connectionUpdate(QString uuid);
void connectionRemove(QString path);
void deviceAdd(QString deviceName, NetworkManager::Device::Type deviceType);
void deviceAdd(QString deviceName, QString uni, NetworkManager::Device::Type deviceType);
void deviceUpdate(NetworkManager::Device * dev);
void deviceRemove(QString deviceName);
void deviceRemove(QString deviceName, QString uni);
void deviceCarrierChanage(QString deviceName, bool pluged);
void deviceBitRateChanage(QString deviceName, int bitRate);

View File

@ -156,6 +156,24 @@ QString KyWirelessNetResource::getDeviceIFace(NetworkManager::ActiveConnection::
return sett->interfaceName();
}
void KyWirelessNetResource::getSsidByUuid(const QString uuid, QString &ssid)
{
ssid.clear();
NetworkManager::Connection::Ptr connectPtr = m_networkResourceInstance->getConnect(uuid);
if (connectPtr.isNull()) {
return;
}
NetworkManager::WirelessSetting::Ptr wireless_sett
= connectPtr->settings()->setting(NetworkManager::Setting::Wireless).dynamicCast<NetworkManager::WirelessSetting>();
if (wireless_sett.isNull()) {
qDebug() << "don't have WirelessSetting connection";
return;
}
ssid = wireless_sett->ssid();
return;
}
void KyWirelessNetResource::kyWirelessNetItemListInit()
{
qDebug() << m_networkResourceInstance->m_wifiNets.size();

View File

@ -28,6 +28,8 @@ public:
void getWirelessActiveConnection(NetworkManager::ActiveConnection::State state, QMap<QString, QStringList> &map);
void getSsidByUuid(const QString uuid, QString &ssid);
private:
void kyWirelessNetItemListInit();

View File

@ -72,6 +72,54 @@ bool getDeviceEnableState(QMap<QString, bool> &map)
return true;
}
//设置默认网卡
void setDefaultDevice(KyDeviceType deviceType, QString deviceName)
{
QString key;
switch (deviceType) {
case WIRED:
key = "wired";
break;
case WIRELESS:
key = "wireless";
break;
default:
return;
break;
}
QSettings * m_settings = new QSettings(CONFIG_FILE_PATH, QSettings::IniFormat);
m_settings->beginGroup("DEFAULTCARD");
m_settings->setValue(key, deviceName);
m_settings->endGroup();
m_settings->sync();
delete m_settings;
m_settings = nullptr;
return;
}
bool checkDeviceExist(KyDeviceType deviceType, QString deviceName)
{
NetworkManager::Device::Type type;
switch (deviceType) {
case WIRED:
type = NetworkManager::Device::Type::Ethernet;
break;
case WIRELESS:
type = NetworkManager::Device::Type::Wifi;
break;
default:
return false;
break;
}
KyNetworkDeviceResourse * kdr = new KyNetworkDeviceResourse();
QStringList devList;
devList.clear();
kdr->getNetworkDeviceList(type, devList);
return devList.contains(deviceName);
}
/*
* Implementation of adaptor class DbusAdaptor
*/
@ -141,14 +189,10 @@ void DbusAdaptor::setDeviceEnable(QString devName, bool enable)
//设置默认网卡
void DbusAdaptor::setDefaultWiredDevice(QString deviceName)
{
QSettings * m_settings = new QSettings(CONFIG_FILE_PATH, QSettings::IniFormat);
m_settings->beginGroup("DEFAULTCARD");
QString key("wired");
m_settings->setValue(key, deviceName);
m_settings->endGroup();
m_settings->sync();
delete m_settings;
m_settings = nullptr;
if (!checkDeviceExist(WIRED, deviceName)) {
return;
}
setDefaultDevice(WIRED, deviceName);
parent()->setWiredDefaultDevice(deviceName);
return;
}
@ -167,14 +211,10 @@ QString DbusAdaptor::getDefaultWiredDevice()
void DbusAdaptor::setDefaultWirelessDevice(QString deviceName)
{
QSettings * m_settings = new QSettings(CONFIG_FILE_PATH, QSettings::IniFormat);
m_settings->beginGroup("DEFAULTCARD");
QString key("wireless");
m_settings->setValue(key, deviceName);
m_settings->endGroup();
m_settings->sync();
delete m_settings;
m_settings = nullptr;
if (!checkDeviceExist(WIRED, deviceName)) {
return;
}
setDefaultDevice(WIRELESS, deviceName);
parent()->setWirelessDefaultDevice(deviceName);
return;
}

View File

@ -84,6 +84,15 @@ class WirelessInfo
};
Q_DECLARE_METATYPE(WirelessInfo)
enum KyDeviceType
{
WIRED,
WIRELESS
};
bool checkDeviceExist(KyDeviceType deviceType, QString deviceName);
void setDefaultDevice(KyDeviceType deviceType, QString deviceName);
class DbusAdaptor: public QDBusAbstractAdaptor
{
Q_OBJECT
@ -127,6 +136,9 @@ Q_SIGNALS: // SIGNALS
void deviceUpdate();
//仅失败若成功直接发listUpdate
void activateFinish(QString devName, QString ssid);
//设备插拔
void deviceStatusChanged();
void deviceNameUpdate(QString oldName, QString newName);
};
#endif

View File

@ -112,6 +112,11 @@ void MainWindow::initUI()
m_wlanWidget = new WlanPage(m_centralWidget);
m_centralWidget->addTab(m_lanWidget, QIcon::fromTheme("network-wired-connected-symbolic", QIcon::fromTheme("network-wired-symbolic", QIcon(":/res/l/network-online.svg"))), tr("LAN"));
m_centralWidget->addTab(m_wlanWidget, QIcon::fromTheme("network-wireless-signal-excellent-symbolic", QIcon(":/res/x/wifi-list-bg.svg")), tr("WLAN"));
connect(m_lanWidget, &LanPage::deviceStatusChanged, this, &MainWindow::deviceStatusChanged);
connect(m_lanWidget, &LanPage::deviceNameChanged, this, &MainWindow::deviceNameChanged);
connect(m_wlanWidget, &WlanPage::deviceStatusChanged, this, &MainWindow::deviceStatusChanged);
connect(m_wlanWidget, &WlanPage::deviceNameChanged, this, &MainWindow::deviceNameChanged);
}
/**

View File

@ -23,6 +23,8 @@ public:
void setWiredDefaultDevice(QString deviceName);
void setWirelessDefaultDevice(QString deviceName);
signals:
void deviceStatusChanged();
void deviceNameChanged(QString oldName, QString newName);
public slots:

View File

@ -1,11 +1,18 @@
#include "lanpage.h"
#include <QSettings>
#include "dbusadaptor.h"
LanPage::LanPage(QWidget *parent) : TabPage(parent)
{
m_device = new KyNetworkDeviceResourse(this);
devList.empty();
initDevice();
initLanUI();
connect(m_device, &KyNetworkDeviceResourse::deviceAdd, this, &LanPage::onDeviceAdd);
connect(m_device, &KyNetworkDeviceResourse::deviceRemove, this, &LanPage::onDeviceRemove);
connect(m_device, &KyNetworkDeviceResourse::deviceNameUpdate, this, &LanPage::onDeviceNameUpdate);
}
@ -34,13 +41,11 @@ void LanPage::initDevice()
m_settings->beginGroup("DEFAULTCARD");
QString key("wired");
QString deviceName = m_settings->value(key, "").toString();
m_device->getNetworkDeviceList(NetworkManager::Device::Type::Ethernet, devList);
if (deviceName.isEmpty()) {
qDebug() << "initDevice but defalut wired card is null";
QStringList list;
list.empty();
m_device->getNetworkDeviceList(NetworkManager::Device::Type::Ethernet, list);
if (!list.isEmpty()) {
deviceName = list.at(0);
if (!devList.isEmpty()) {
deviceName = devList.at(0);
m_settings->setValue(key, deviceName);
}
}
@ -52,4 +57,61 @@ void LanPage::initDevice()
delete m_settings;
m_settings = nullptr;
for (int i = 0; i < devList.size(); ++i)
{
qDebug() << devList.at(i);
}
}
void LanPage::onDeviceAdd(QString deviceName, NetworkManager::Device::Type deviceType)
{
qDebug() << "deviceAdd" << deviceName;
if (deviceType != NetworkManager::Device::Type::Ethernet) {
return;
}
devList << deviceName;
if (getDefaultDevice().isEmpty())
{
updateDefaultDevice(deviceName);
setDefaultDevice(WIRED, deviceName);
}
emit deviceStatusChanged();
}
void LanPage::onDeviceRemove(QString deviceName)
{
qDebug() << "deviceRemove" << deviceName;
if (getDefaultDevice() == deviceName)
{
QStringList list;
QString newDefaultDevice = "";
list.empty();
m_device->getNetworkDeviceList(NetworkManager::Device::Type::Ethernet, list);
if (!list.isEmpty()) {
newDefaultDevice = list.at(0);
}
updateDefaultDevice(newDefaultDevice);
setDefaultDevice(WIRED, newDefaultDevice);
}
if (devList.contains(deviceName)) {
devList.removeOne(deviceName);
emit deviceStatusChanged();
}
}
void LanPage::onDeviceNameUpdate(QString oldName, QString newName)
{
if (getDefaultDevice() == oldName) {
updateDefaultDevice(newName);
setDefaultDevice(WIRED, newName);
}
if (devList.contains(oldName)) {
devList.removeOne(oldName);
devList.append(newName);
qDebug() << "LanPage emit deviceNameUpdate " << oldName << newName;
emit deviceNameChanged(oldName, newName);
}
}

View File

@ -13,9 +13,15 @@ public:
private:
KyNetworkDeviceResourse *m_device = nullptr;
QStringList devList;
void initLanUI();
void initDevice();//初始化默认设备
private slots:
void onDeviceAdd(QString deviceName, NetworkManager::Device::Type deviceType);
void onDeviceRemove(QString deviceName);
void onDeviceNameUpdate(QString oldName, QString newName);
};
#endif // LANPAGE_H

View File

@ -36,6 +36,8 @@ public:
QString getDefaultDevice();
signals:
void deviceStatusChanged();
void deviceNameChanged(QString oldName, QString newName);
protected:
void initUI();

View File

@ -1,6 +1,7 @@
#include "wlanpage.h"
#include "wlanlistitem.h"
#include "kywirelessnetitem.h"
#include "dbusadaptor.h"
#include <QEvent>
#include <QDateTime>
#include <QDebug>
@ -12,11 +13,18 @@ WlanPage::WlanPage(QWidget *parent) : TabPage(parent)
m_connectResource = new KyActiveConnectResourse();
m_networkResourceInstance = KyNetworkResourceManager::getInstance();
m_netDeviceResource=new KyNetworkDeviceResourse(this);
devList.empty();
initDevice();
getWirelessIface();
initWlanUI();
initConnections();
getActiveWlan();
getAllWlan();
connect(m_netDeviceResource, &KyNetworkDeviceResourse::deviceAdd, this, &WlanPage::onDeviceAdd);
connect(m_netDeviceResource, &KyNetworkDeviceResourse::deviceRemove, this, &WlanPage::onDeviceRemove);
connect(m_netDeviceResource, &KyNetworkDeviceResourse::deviceNameUpdate, this, &WlanPage::onDeviceNameUpdate);
}
bool WlanPage::eventFilter(QObject *w, QEvent *e)
@ -106,13 +114,11 @@ void WlanPage::initDevice()
m_settings->beginGroup("DEFAULTCARD");
QString key("wireless");
QString deviceName = m_settings->value(key, "").toString();
m_netDeviceResource->getNetworkDeviceList(NetworkManager::Device::Type::Wifi, devList);
if (deviceName.isEmpty()) {
qDebug() << "initDevice but defalut wireless card is null";
QStringList list;
list.empty();
m_device->getNetworkDeviceList(NetworkManager::Device::Type::Wifi, list);
if (!list.isEmpty()) {
deviceName = list.at(0);
if (!devList.isEmpty()) {
deviceName = devList.at(0);
m_settings->setValue(key, deviceName);
}
}
@ -243,8 +249,61 @@ void WlanPage::onWlanUpdated()
getAllWlan();
}
void WlanPage::onDeviceAdd(QString deviceName, NetworkManager::Device::Type deviceType)
{
qDebug() << "deviceAdd" << deviceName;
if (deviceType != NetworkManager::Device::Type::Wifi) {
return;
}
devList << deviceName;
if (getDefaultDevice().isEmpty())
{
updateDefaultDevice(deviceName);
setDefaultDevice(WIRELESS, deviceName);
}
emit deviceStatusChanged();
}
void WlanPage::onDeviceRemove(QString deviceName)
{
qDebug() << "deviceRemove" << deviceName;
if (getDefaultDevice() == deviceName)
{
QStringList list;
QString newDefaultDevice = "";
list.empty();
m_netDeviceResource->getNetworkDeviceList(NetworkManager::Device::Type::Wifi, list);
if (!list.isEmpty()) {
newDefaultDevice = list.at(0);
}
updateDefaultDevice(newDefaultDevice);
setDefaultDevice(WIRELESS, newDefaultDevice);
}
if (devList.contains(deviceName)) {
devList.removeOne(deviceName);
emit deviceStatusChanged();
}
}
void WlanPage::onDeviceNameUpdate(QString oldName, QString newName)
{
if (getDefaultDevice() == oldName) {
updateDefaultDevice(newName);
setDefaultDevice(WIRELESS, newName);
}
if (devList.contains(oldName)) {
devList.removeOne(oldName);
devList.append(newName);
qDebug() << "WlanPage emit deviceNameUpdate " << oldName << newName;
emit deviceNameChanged(oldName, newName);
}
}
void WlanPage::onActivatedWlanChanged(QString uuid, NetworkManager::ActiveConnection::State state, NetworkManager::ActiveConnection::Reason reason)
{
qDebug()<< "Activated wlan changed, uuid = " << uuid << "; state = " << state << "; reason = " << reason << Q_FUNC_INFO <<__LINE__;
onWlanUpdated();
}

View File

@ -16,16 +16,13 @@ public:
explicit WlanPage(QWidget *parent = nullptr);
~WlanPage() = default;
void setDefaultDevice(QString deviceName) {defaultDevice = deviceName;}
signals:
protected:
bool eventFilter(QObject *watched, QEvent *event);
private:
void initWlanUI();
void initConnections();
void initDevice();//初始化默认设备
QString m_wlanDevice; //临时用来存储网卡名
void getWirelessIface(); //一个临时用于获取网卡的函数
void getActiveWlan();
@ -38,17 +35,22 @@ private:
QLabel * m_hiddenWlanLabel = nullptr;
QString m_activatedWlanSSid;
QString defaultDevice = "";
QStringList devList;
KyWirelessNetResource *m_resource = nullptr;
KyActiveConnectResourse *m_connectResource = nullptr;
KyNetworkResourceManager *m_networkResourceInstance = nullptr;
KyNetworkDeviceResourse *m_netDeviceResource=nullptr;
private slots:
void onWlanAdded(QString interface, KyWirelessNetItem &item);
void onWlanRemoved(QString interface, QString ssid);
void onWlanUpdated();
void onDeviceAdd(QString deviceName, NetworkManager::Device::Type deviceType);
void onDeviceRemove(QString deviceName);
void onDeviceNameUpdate(QString oldName, QString newName);
void onActivatedWlanChanged(QString uuid,
NetworkManager::ActiveConnection::State state,
NetworkManager::ActiveConnection::Reason reason);