diff --git a/src/ksimplenm.cpp b/src/ksimplenm.cpp index b7d7c665..c5964c47 100644 --- a/src/ksimplenm.cpp +++ b/src/ksimplenm.cpp @@ -34,6 +34,10 @@ KSimpleNM::KSimpleNM(QObject *parent) : QObject(parent) runProcessWifi = new QProcess(this); connect(runProcessWifi, &QProcess::readyRead, this, &KSimpleNM::readProcessWifi); connect(runProcessWifi, SIGNAL(finished(int)), this, SLOT(finishedProcessWifi(int))); + + runProcessConn = new QProcess(this); + connect(runProcessConn, &QProcess::readyRead, this, &KSimpleNM::readProcessConn); + connect(runProcessConn, SIGNAL(finished(int)), this, SLOT(finishedProcessConn(int))); } KSimpleNM::~KSimpleNM() @@ -83,6 +87,13 @@ void KSimpleNM::execGetWifiList() runProcessWifi->start("nmcli -f signal,security,freq,bssid,ssid device wifi"); } +//获取保存的网络列表数据 +void KSimpleNM::execGetConnList() +{ + shellOutputConn = ""; + runProcessConn->start("nmcli -f name connection show"); +} + //读取获取到的结果 void KSimpleNM::readProcessLan() { @@ -94,6 +105,11 @@ void KSimpleNM::readProcessWifi() QString output = runProcessWifi->readAll(); shellOutputWifi += output; } +void KSimpleNM::readProcessConn() +{ + QString output = runProcessConn->readAll(); + shellOutputConn += output; +} //读取完所有列表数据后发信号,将数据发往mainwindow用于显示网络列表 void KSimpleNM::finishedProcessLan(int msg) @@ -108,3 +124,8 @@ void KSimpleNM::finishedProcessWifi(int msg) emit getWifiListFinished(slist); isExecutingGetWifiList = false; } +void KSimpleNM::finishedProcessConn(int msg) +{ + QStringList slist = shellOutputConn.split("\n"); + emit getConnListFinished(slist); +} diff --git a/src/ksimplenm.h b/src/ksimplenm.h index d8c15a29..2fb0346d 100644 --- a/src/ksimplenm.h +++ b/src/ksimplenm.h @@ -34,8 +34,10 @@ public: QProcess *runProcessLan; QProcess *runProcessWifi; + QProcess *runProcessConn; QString shellOutputLan; QString shellOutputWifi; + QString shellOutputConn; bool isExecutingGetLanList = false; //是否正在执行获取有线网列表 bool isExecutingGetWifiList = false; //是否正在执行获取无线网列表 @@ -44,16 +46,20 @@ public: void execGetLanList(); void execGetWifiList(); + void execGetConnList(); signals: void getLanListFinished(QStringList slist); void getWifiListFinished(QStringList slist); + void getConnListFinished(QStringList slist); public slots: void readProcessLan(); void readProcessWifi(); + void readProcessConn(); void finishedProcessLan(int msg); void finishedProcessWifi(int msg); + void finishedProcessConn(int msg); }; #endif // KSIMPLENM_H diff --git a/src/kylin-dbus-interface.cpp b/src/kylin-dbus-interface.cpp index a6fcfd0c..dacb7a63 100644 --- a/src/kylin-dbus-interface.cpp +++ b/src/kylin-dbus-interface.cpp @@ -105,6 +105,7 @@ KylinDBus::KylinDBus(MainWindow *mainWindow, QObject *parent) :QObject(parent) if (mw) { QObject::connect(this, SIGNAL(updateWiredList(int)), mw, SLOT(onBtnNetListClicked(int))); + QObject::connect(this, SIGNAL(newConnAdded(int)), mw, SLOT(onNewConnAdded(int))); } mUtils = new Utils(); @@ -770,8 +771,15 @@ void KylinDBus::onNewConnection(QDBusObjectPath objPath) for(QString key : map.keys() ) { if (key == "802-3-ethernet") { emit this->updateWiredList(0); //send this signal to update wired network list + emit this->newConnAdded(0); syslog(LOG_DEBUG, "A new wired network was created."); qDebug()<<"A new wired network was created."; + break; + } else if (key == "802-11-wireless") { + syslog(LOG_DEBUG, "A new wireless network(wifi) was created."); + qDebug()<<"A new wireless network was created."; + emit this->newConnAdded(1); + break; } } diff --git a/src/kylin-dbus-interface.h b/src/kylin-dbus-interface.h index f188fff1..a22d0a75 100644 --- a/src/kylin-dbus-interface.h +++ b/src/kylin-dbus-interface.h @@ -130,6 +130,7 @@ private: signals: void updateWiredList(int n); void requestSendDesktopNotify(QString message); + void newConnAdded(int type); }; #endif // KYLINDBUSINTERFACE_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a6b61329..9b34bebc 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -90,6 +90,7 @@ MainWindow::MainWindow(QWidget *parent) : this->ksnm = new KSimpleNM(); connect(ksnm, SIGNAL(getLanListFinished(QStringList)), this, SLOT(getLanListDone(QStringList))); connect(ksnm, SIGNAL(getWifiListFinished(QStringList)), this, SLOT(getWifiListDone(QStringList))); + connect(ksnm, SIGNAL(getConnListFinished(QStringList)), this, SLOT(getConnListDone(QStringList))); loading = new LoadingDiv(this); loading->move(40,0); @@ -436,6 +437,8 @@ void MainWindow::getInitLanSlist() // 初始化网络 void MainWindow::initNetwork() { + ksnm->execGetConnList(); + BackThread *bt = new BackThread(); IFace *iface = bt->execGetIface(); @@ -1330,6 +1333,17 @@ void MainWindow::on_btnWifiList_clicked() bt->deleteLater(); } +/** + * @brief MainWindow::onNewConnAdded 获取新的连接列表 + * @param type 0为有线,1为无线 + */ +void MainWindow::onNewConnAdded(int type) { + if (type == 1) { + isAddedWifi = true; + } + this->ksnm->execGetConnList(); +} + /////////////////////////////////////////////////////////////////////////////// //网络列表加载与更新 @@ -1596,6 +1610,42 @@ void MainWindow::getWifiListDone(QStringList slist) oldWifiSlist = slist; } +// 获取已保存的连接列表回调 +void MainWindow::getConnListDone(QStringList slist) +{ + if (isInitConnList) { +// oldConnSlist = slist; + for (int i = 1; i < slist.length() - 1; i++) { + oldConnSlist << slist.at(i).trimmed(); + } +// qDebug()<is_stop_check_net_state = 1; + BackThread *bt = new BackThread(); + bt->execConnWifi(lastAddedConn); + connect(bt, SIGNAL(connDone(int)), this, SLOT(connWifiDone(int))); + } + oldConnSlist.clear(); + oldConnSlist = newConnSlist; + return; + } +} + // 加载wifi列表 void MainWindow::loadWifiListDone(QStringList slist) { @@ -2852,7 +2902,7 @@ void MainWindow::connWifiDone(int connFlag) QString txt(tr("Conn Wifi Success")); objKyDBus->showDesktopNotify(txt); } else if (connFlag == 1) { - is_stop_check_net_state = 0; +// is_stop_check_net_state = 0; is_connect_net_failed = 1; QString txt(tr("Confirm your Wi-Fi password or usable of wireless card")); @@ -2864,6 +2914,7 @@ void MainWindow::connWifiDone(int connFlag) QString txt(tr("Confirm your Wi-Fi password")); objKyDBus->showDesktopNotify(txt); } + is_stop_check_net_state = 0; } //重新绘制背景色 diff --git a/src/mainwindow.h b/src/mainwindow.h index 997f1bef..6a2453a8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -258,6 +258,10 @@ private: QStringList oldLanSlist; //上一次获取Lan列表 QStringList oldWifiSlist; //上一次获取wifi列表 + QStringList oldConnSlist; //上一次获取的以保存网络列表 + bool isInitConnList = true; + bool isAddedWifi = false; + QString lastAddedConn = ""; QString oldActLanName = ""; //上一次获取的已连接有线网名称 int oldDbusActLanDNS = 0; //上一次获取的已连接有线网的DNS代号 @@ -293,9 +297,11 @@ private slots: void onBtnNetClicked(); // void on_btnWifiList_clicked(); void onBtnNetListClicked(int flag=0); + void onNewConnAdded(int type); void getLanListDone(QStringList slist); void getWifiListDone(QStringList slist); + void getConnListDone(QStringList slist); void loadWifiListDone(QStringList slist); void updateWifiListDone(QStringList slist); QString TranslateLanName(QString lanName);