From 4499bdf932900af4c893e19deada68a1773220c3 Mon Sep 17 00:00:00 2001 From: chenlelin Date: Wed, 15 Apr 2020 22:54:24 +0800 Subject: [PATCH] Fix bug UI can not refresh after connect or disconnect network in multiple users system --- src/backthread.cpp | 37 ++++++++++++++++++------- src/kylin-network-interface.c | 10 +++++-- src/kylin-network-interface.h | 3 +- src/mainwindow.cpp | 15 ++++++++-- wireless-security/dlgconnhidwifi.cpp | 22 +++++++++++---- wireless-security/dlgconnhidwifiwpa.cpp | 22 +++++++++++---- 6 files changed, 80 insertions(+), 29 deletions(-) diff --git a/src/backthread.cpp b/src/backthread.cpp index 707991be..b5bdb0fb 100644 --- a/src/backthread.cpp +++ b/src/backthread.cpp @@ -27,6 +27,7 @@ #include #include +#include BackThread::BackThread(QObject *parent) : QObject(parent){ cmdConnWifi = new QProcess(this); @@ -43,13 +44,17 @@ BackThread::~BackThread() IFace* BackThread::execGetIface(){ IFace *iface = new IFace(); - QString cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli -f TYPE,DEVICE,STATE device > /tmp/kylin-nm-iface"; + + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-iface"; + + QString cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli -f TYPE,DEVICE,STATE device > " + localPath; Utils::m_system(cmd.toUtf8().data()); // int status = system(cmd.toUtf8().data()); // if (status != 0){ syslog(LOG_ERR, "execute 'nmcli device' in function 'execGetIface' failed");} - QFile file("/tmp/kylin-nm-iface"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { syslog(LOG_ERR, "Can't open the file /tmp/kylin-nm-iface!"); @@ -225,12 +230,15 @@ void BackThread::execConnLan(QString connName){ void BackThread::execConnWifiPWD(QString connName, QString password){ disConnLanOrWifi("wifi"); - QString cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli device wifi connect '" + connName + "' password '" + password + "' > /tmp/kylin-nm-btoutput"; + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-btoutput"; + + QString cmdStr = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli device wifi connect '" + connName + "' password '" + password + "' > " + localPath; Utils::m_system(cmdStr.toUtf8().data()); // int status = system(cmdStr.toUtf8().data()); // if (status != 0){ syslog(LOG_ERR, "execute 'nmcli device wifi connect' in function 'execConnWifiPWD' failed");} - QFile file("/tmp/kylin-nm-btoutput"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ syslog(LOG_DEBUG, "Can't open the file /tmp/kylin-nm-btoutput !"); qDebug()<<"Can't open the file /tmp/kylin-nm-btoutput !"< /tmp/kylin-nm-connprop"; + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-connprop"; + + QString cmd = "nmcli connection show '" + connName + "' > " + localPath; Utils::m_system(cmd.toUtf8().data()); // int status = system(cmd.toUtf8().data()); // if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show' in function 'getConnProp' failed");} - QFile file("/tmp/kylin-nm-connprop"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ syslog(LOG_ERR, "Can't open the file /tmp/kylin-nm-connprop!"); qDebug()<<"Can't open the file /tmp/kylin-nm-connprop!"< /tmp/kylin-nm-chkwifiexist"; + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-chkwifiexist"; + + QString cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';nmcli connection show '" + connName + "' > " + localPath; Utils::m_system(cmd.toUtf8().data()); // int status = system(cmd.toUtf8().data()); // if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show' in function 'execChkWifiExist' failed");} - QFile file("/tmp/kylin-nm-chkwifiexist"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { syslog(LOG_ERR, "Can't open the file /tmp/kylin-nm-chkwifiexist!"); @@ -366,12 +380,15 @@ bool BackThread::execChkWifiExist(QString connName){ } QString BackThread::execChkLanWidth(QString ethName){ - QString cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';ethtool '" + ethName + "' | grep Speed > /tmp/kylin-nm-bandwidth"; + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-bandwidth"; + + QString cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';ethtool '" + ethName + "' | grep Speed > " + localPath; Utils::m_system(cmd.toUtf8().data()); // int status = system(cmd.toUtf8().data()); // if (status != 0){ syslog(LOG_ERR, "execute 'ethtool' in function 'execChkLanWidth' failed");} - QFile file("/tmp/kylin-nm-bandwidth"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { syslog(LOG_ERR, "Can't open the file /tmp/kylin-nm-bandwidth!"); diff --git a/src/kylin-network-interface.c b/src/kylin-network-interface.c index c5715de4..ce4ae5e3 100644 --- a/src/kylin-network-interface.c +++ b/src/kylin-network-interface.c @@ -186,11 +186,15 @@ conlist *kylin_network_get_conlist_info() } //获取当前活动网络连接 -activecon *kylin_network_get_activecon_info() +activecon *kylin_network_get_activecon_info(char *path) { - int status = system("nmcli connection show -active > /tmp/activecon.txt"); + char *chr = "nmcli connection show -active > "; + char *cmd = (char *) malloc(strlen(chr) + strlen(path)); + strcpy(cmd, chr); + strcat(cmd, path); + int status = system(cmd); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show -active' in function 'kylin_network_get_activecon_info' failed");} - char *filename="/tmp/activecon.txt"; + char *filename = path; FILE *activefp; int activenum=0; diff --git a/src/kylin-network-interface.h b/src/kylin-network-interface.h index 2a7b9a26..c705298d 100644 --- a/src/kylin-network-interface.h +++ b/src/kylin-network-interface.h @@ -25,6 +25,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C"{ @@ -72,7 +73,7 @@ conlist *kylin_network_get_conlist_info(); * Get the active network connection. * return the struct pointer. */ -activecon *kylin_network_get_activecon_info(); +activecon *kylin_network_get_activecon_info(char *path); /* * Create a new Ethernet connection. diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e640ed73..ce225f02 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -892,7 +892,10 @@ void MainWindow::getActiveInfo() QString actLanName = "--"; QString actWifiName = "--"; - activecon *act = kylin_network_get_activecon_info(); + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString lockPath = homePath.at(0) + "/.config/kylin-nm-activecon"; + + activecon *act = kylin_network_get_activecon_info(lockPath.toUtf8().data()); int index = 0; while(act[index].con_name != NULL){ if(QString(act[index].type) == "ethernet"){ @@ -1391,7 +1394,10 @@ void MainWindow::getLanListDone(QStringList slist) // 获取当前连接的lan name QString actLanName = "--"; - activecon *act = kylin_network_get_activecon_info(); + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString lockPath = homePath.at(0) + "/.config/kylin-nm-activecon"; + + activecon *act = kylin_network_get_activecon_info(lockPath.toUtf8().data()); int index = 0; while(act[index].con_name != NULL){ if(QString(act[index].type) == "ethernet"){ @@ -1523,7 +1529,10 @@ void MainWindow::loadWifiListDone(QStringList slist) // 获取当前连接的wifi name QString actWifiName = "--"; - activecon *act = kylin_network_get_activecon_info(); + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString lockPath = homePath.at(0) + "/.config/kylin-nm-activecon"; + + activecon *act = kylin_network_get_activecon_info(lockPath.toUtf8().data()); int index = 0; while(act[index].con_name != NULL){ if(QString(act[index].type) == "wifi"){ diff --git a/wireless-security/dlgconnhidwifi.cpp b/wireless-security/dlgconnhidwifi.cpp index c5960b0f..299db505 100644 --- a/wireless-security/dlgconnhidwifi.cpp +++ b/wireless-security/dlgconnhidwifi.cpp @@ -74,9 +74,12 @@ DlgConnHidWifi::DlgConnHidWifi(int type, MainWindow *mainWindow, QWidget *parent ui->btnConnect->setText(tr("Connect")); //连接 ui->cbxConn->addItem(tr("C_reate…")); //新建... - int status = system("nmcli connection show>/tmp/kylin-nm-connshow"); + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-connshow"; + QString cmd = "nmcli connection show>" + localPath; + int status = system(cmd.toUtf8().data()); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show' in function 'DlgConnHidWifi' failed");} - QFile file("/tmp/kylin-nm-connshow"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug()<<"Can't open the file!"; } @@ -195,10 +198,13 @@ void DlgConnHidWifi::changeWindow(){ ui->cbxSecurity->setEnabled(true); ui->btnConnect->setEnabled(false); }else if (ui->cbxConn->currentIndex() >= 1){ - QString currStr = "nmcli connection show " + ui->cbxConn->currentText() + " >/tmp/kylin-nm-connshow"; + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-connshow"; + + QString currStr = "nmcli connection show " + ui->cbxConn->currentText() + " >" + localPath; int status = system(currStr.toUtf8().data()); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show' in function 'changeWindow' failed");} - QFile file("/tmp/kylin-nm-connshow"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug()<<"Can't open the file!"; } @@ -243,11 +249,15 @@ void DlgConnHidWifi::on_btnConnect_clicked() int x = 0; do{ sleep(1); - QString cmd = "nmcli device wifi connect " + wifiName + " password '' hidden yes >/tmp/kylin-nm-btoutput"; + + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-btoutput"; + + QString cmd = "nmcli device wifi connect " + wifiName + " password '' hidden yes > " + localPath; int status = system(cmd.toUtf8().data()); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli device wifi connect' in function 'on_btnConnect_clicked' failed");} - QFile file("/tmp/kylin-nm-btoutput"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"Can't open the file!"<btnConnect->setText(tr("Connect")); //连接 ui->cbxConn->addItem(tr("C_reate…")); //新建... - int status = system("nmcli connection show>/tmp/kylin-nm-connshow"); + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-connshow"; + QString cmd = "nmcli connection show> " + localPath; + int status = system(cmd.toUtf8().data()); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show' in function 'DlgConnHidWifiWpa' failed");} - QFile file("/tmp/kylin-nm-connshow"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug()<<"Can't open the file!"; } @@ -202,10 +205,13 @@ void DlgConnHidWifiWpa::changeWindow(){ connHidWifi->show(); connect(connHidWifi, SIGNAL(reSetWifiList() ), mw, SLOT(on_btnWifiList_clicked()) ); }else if (ui->cbxConn->currentIndex() >= 1){ - QString currStr = "nmcli connection show " + ui->cbxConn->currentText() + " >/tmp/kylin-nm-connshow"; + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-connshow"; + + QString currStr = "nmcli connection show " + ui->cbxConn->currentText() + " > " + localPath; int status = system(currStr.toUtf8().data()); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli connection show' in function 'changeWindow' failed");} - QFile file("/tmp/kylin-nm-connshow"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug()<<"Can't open the file!"; } @@ -254,11 +260,15 @@ void DlgConnHidWifiWpa::on_btnConnect_clicked() int x = 0; do{ sleep(1); - QString cmd = "nmcli device wifi connect " + wifiName + " password " + wifiPassword + " hidden yes >/tmp/kylin-nm-btoutput"; + + QStringList homePath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + QString localPath = homePath.at(0) + "/.config/kylin-nm-btoutput"; + + QString cmd = "nmcli device wifi connect " + wifiName + " password " + wifiPassword + " hidden yes > " + localPath; int status = system(cmd.toUtf8().data()); if (status != 0){ syslog(LOG_ERR, "execute 'nmcli device wifi connect' in function 'on_btnConnect_clicked' failed");} - QFile file("/tmp/kylin-nm-btoutput"); + QFile file(localPath); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"Can't open the file!"<