* edit WiFi and ProfileList calls

* optimization of WifiMenu
* small refactoring
This commit is contained in:
arcan1s 2015-03-07 17:12:33 +03:00
parent 9993fee336
commit 2cf876cf32
26 changed files with 207 additions and 153 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 2.8.12)
wcmake_minimum_required (VERSION 2.8.12)
cmake_policy (SET CMP0003 OLD)
cmake_policy (SET CMP0002 OLD)
@ -11,7 +11,7 @@ set (PROJECT_CONTACT "esalexeev@gmail.com")
set (PROJECT_LICENSE "GPLv3")
set (PROJECT_VERSION_MAJOR 1)
set (PROJECT_VERSION_MINOR 4)
set (PROJECT_VERSION_PATCH 0)
set (PROJECT_VERSION_PATCH 1)
set (PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
string (TIMESTAMP CURRENT_DATE "%Y-%m-%d %H:%M" UTC)
string (TIMESTAMP CURRENT_YEAR "%Y")

View File

@ -0,0 +1,3 @@
[Dolphin]
Timestamp=2015,3,7,17,10,22
Version=3

View File

@ -198,7 +198,7 @@ small {
<!-- wpa_supplicant actions -->
<tr>
<td>QStringList WiFi()</td>
<td>returns available WiFi points in format <code>NAME|SECURITY|SIGNAL|ACTIVE|EXISTS</code></td>
<td>returns available WiFi points in format <code>NAME|SECURITY|FREQS|MACS|SIGNAL|ACTIVE|EXISTS</code></td>
<td>yes</td>
</tr>
<!-- /netctl path -->
@ -223,7 +223,7 @@ small {
</tr>
<tr>
<td>QStringList ProfileList()</td>
<td>returns available profiles in format <code>NAME|DESCRIPTION|ACTIVE|ENABLED</code></td>
<td>returns available profiles in format <code>NAME|DESCRIPTION|ESSID|ACTIVE|ENABLED</code></td>
<td>no</td>
</tr>
<tr>
@ -279,6 +279,11 @@ small {
<td>returns value of the key by the given profile or empty line</td>
<td>no</td>
</tr>
<tr>
<td>QStringList ProfileValues(QString profile, QStringList keys)</td>
<td>returns values of the keys by the given profile or empty lines</td>
<td>no</td>
</tr>
<!-- gui service -->
<tr>
<th colspan="3"><a href="#gui" class="anchor" id="gui"></a><code>org.netctlgui.netctlgui</code> service (session bus)</th>

View File

@ -33,12 +33,13 @@ QList<netctlProfileInfo> parseOutputNetctl(const QList<QVariant> raw)
QStringList list = raw[0].toStringList();
for (int i=0; i<list.count(); i++) {
QStringList info = list[i].split(QChar('|'));
if (info.count() != 4) continue;
if (info.count() != 5) continue;
netctlProfileInfo profile;
profile.name = info[0];
profile.description = info[1];
profile.active = info[2].toInt();
profile.enabled = info[3].toInt();
profile.essid = info[2];
profile.active = info[3].toInt();
profile.enabled = info[4].toInt();
profileInfo.append(profile);
}
@ -53,13 +54,15 @@ QList<netctlWifiInfo> parseOutputWifi(const QList<QVariant> raw)
QStringList list = raw[0].toStringList();
for (int i=0; i<list.count(); i++) {
QStringList info = list[i].split(QChar('|'));
if (info.count() != 5) continue;
if (info.count() != 7) continue;
netctlWifiInfo wifi;
wifi.name = info[0];
wifi.security = info[1];
wifi.signal = info[2];
wifi.active = info[3].toInt();
wifi.exists = info[4].toInt();
wifi.frequencies = info[2].split(QChar(','));
wifi.macs = info[3].split(QChar(','));
wifi.signal = info[4].toInt();
wifi.active = info[5].toInt();
wifi.exists = info[6].toInt();
wifiInfo.append(wifi);
}

View File

@ -117,8 +117,7 @@ int EthernetWidget::isOk()
{
// file wpa_supplicant doesn't exists
if (!ui->lineEdit_wpaConfig->text().isEmpty())
if (!QFile(ui->lineEdit_wpaConfig->text()).exists())
return 1;
if (!QFile(ui->lineEdit_wpaConfig->text()).exists()) return 1;
// all fine
return 0;
}

View File

@ -156,11 +156,9 @@ int GeneralWidget::isOk()
(ui->comboBox_connection->currentText() == QString("vlan")) ||
(ui->comboBox_connection->currentText() == QString("macvlan")) ||
(ui->comboBox_connection->currentText() == QString("openvswitch")))
if (ui->listWidget_bindto->count() == 0)
return 1;
if (ui->listWidget_bindto->count() == 0) return 1;
// empty description
if (ui->lineEdit_description->text().isEmpty())
return 2;
if (ui->lineEdit_description->text().isEmpty()) return 2;
// all fine
return 0;
}

View File

@ -375,15 +375,13 @@ int IpWidget::isOk()
if ((ui->checkBox_ip->checkState() == Qt::Checked) &&
(ui->comboBox_ip->currentText() == QString("static")))
if ((ui->listWidget_ipAddress->count() == 0) ||
(ui->lineEdit_gateway->text().isEmpty()))
return 1;
(ui->lineEdit_gateway->text().isEmpty())) return 1;
// ipv6 settings is not set
if ((ui->checkBox_ip6->checkState() == Qt::Checked) &&
((ui->comboBox_ip6->currentText() == QString("static")) ||
(ui->comboBox_ip6->currentText() == QString("stateless"))))
if ((ui->listWidget_ipAddress6->count() == 0) ||
(ui->lineEdit_gateway6->text().isEmpty()))
return 2;
(ui->lineEdit_gateway6->text().isEmpty())) return 2;
// all fine
return 0;
}

View File

@ -85,7 +85,6 @@ void MainWindow::setMenuActionsShown(const bool state)
void MainWindow::updateMenuMain()
{
if (debug) qDebug() << PDEBUG;
setMenuActionsShown(false);
actionMenu->setDefaultAction(toolBarActions[QString("mainStart")]);
toolBarActions[QString("netctlAuto")]->setVisible(true);
@ -110,7 +109,7 @@ void MainWindow::updateMenuMain()
toolBarActions[QString("mainEnable")]->setIcon(QIcon::fromTheme("edit-remove"));
} else {
toolBarActions[QString("mainEnable")]->setText(QApplication::translate("MainWindow", "Enable"));
toolBarActions[QString("mainEnable")]->setIcon(QIcon::fromTheme("edit-add"));
toolBarActions[QString("mainEnable")]->setIcon(QIcon::fromTheme("list-add"));
}
toolBarActions[QString("mainEnable")]->setVisible(true);
toolBarActions[QString("mainEdit")]->setVisible(true);
@ -121,7 +120,6 @@ void MainWindow::updateMenuMain()
void MainWindow::updateMenuProfile()
{
if (debug) qDebug() << PDEBUG;
setMenuActionsShown(false);
actionMenu->setDefaultAction(toolBarActions[QString("profileSave")]);
toolBarActions[QString("profileClear")]->setVisible(true);
@ -134,7 +132,6 @@ void MainWindow::updateMenuProfile()
void MainWindow::updateMenuWifi()
{
if (debug) qDebug() << PDEBUG;
setMenuActionsShown(false);
actionMenu->setDefaultAction(toolBarActions[QString("wifiStart")]);
toolBarActions[QString("wifiRefresh")]->setVisible(true);
@ -204,9 +201,9 @@ void MainWindow::updateMainTab()
font.setItalic(profiles[i].enabled);
// tooltip
QString toolTip = QString("");
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "Profile")).arg(profiles[i].name);
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "Active")).arg(checkStatus(profiles[i].active));
toolTip += QString("%1: %2").arg(QApplication::translate("MainWindow", "Enabled")).arg(checkStatus(profiles[i].enabled));
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "Enabled")).arg(checkStatus(profiles[i].enabled));
toolTip += QString("%1: %2").arg(QApplication::translate("MainWindow", "Is wireless")).arg(checkStatus(!profiles[i].essid.isEmpty()));
// name
ui->tableWidget_main->setItem(i, 0, new QTableWidgetItem(profiles[i].name));
ui->tableWidget_main->item(i, 0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
@ -294,7 +291,8 @@ void MainWindow::updateWifiTab()
font.setItalic(scanResults[i].exists);
// tooltip
QString toolTip = QString("");
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "ESSID")).arg(scanResults[i].name);
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "MAC")).arg(scanResults[i].macs.join(QString(", ")));
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "Frequency")).arg(scanResults[i].frequencies.join(QString(", ")));
toolTip += QString("%1: %2\n").arg(QApplication::translate("MainWindow", "Active")).arg(checkStatus(scanResults[i].active));
toolTip += QString("%1: %2").arg(QApplication::translate("MainWindow", "Exists")).arg(checkStatus(scanResults[i].exists));
// name
@ -303,7 +301,7 @@ void MainWindow::updateWifiTab()
ui->tableWidget_wifi->item(i, 0)->setToolTip(toolTip);
ui->tableWidget_wifi->item(i, 0)->setFont(font);
// signal
ui->tableWidget_wifi->setItem(i, 1, new QTableWidgetItem(scanResults[i].signal));
ui->tableWidget_wifi->setItem(i, 1, new QTableWidgetItem(QString::number(scanResults[i].signal)));
ui->tableWidget_wifi->item(i, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui->tableWidget_wifi->item(i, 1)->setToolTip(toolTip);
// security
@ -372,7 +370,7 @@ void MainWindow::mainTabContextualMenu(const QPoint &pos)
enableProfile->setIcon(QIcon::fromTheme("edit-remove"));
} else {
enableProfile->setText(QApplication::translate("MainWindow", "Enable profile"));
enableProfile->setIcon(QIcon::fromTheme("edit-add"));
enableProfile->setIcon(QIcon::fromTheme("list-add"));
}
// actions

View File

@ -301,12 +301,13 @@ bool MainWindow::startHelper()
void MainWindow::setTab(int tab)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Update tab" << tab;
if (debug) qDebug() << PDEBUG << ":" << "Set tab" << tab;
if (tab > 2) tab = 0;
ui->tabWidget->setCurrentIndex(tab);
if (tab == ui->tabWidget->currentIndex())
updateTabs(tab);
else
ui->tabWidget->setCurrentIndex(tab);
}
@ -337,7 +338,7 @@ void MainWindow::updateConfiguration(const QMap<QString, QVariant> args)
QString language = Language::defineLanguage(configPath, args[QString("options")].toString());
qtTranslator->load(QString("qt_%1").arg(language), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
qApp->installTranslator(qtTranslator);
translator->load(QString(":/translations/") + language);
translator->load(QString(":/translations/%1").arg(language));
qApp->installTranslator(translator);
createObjects();
@ -345,11 +346,7 @@ void MainWindow::updateConfiguration(const QMap<QString, QVariant> args)
createToolBars();
// tray
if ((QSystemTrayIcon::isSystemTrayAvailable()) &&
(configuration[QString("SYSTRAY")] == QString("true")))
trayIcon->setVisible(true);
else
trayIcon->setVisible(false);
trayIcon->setVisible(QSystemTrayIcon::isSystemTrayAvailable() && (configuration[QString("SYSTRAY")] == QString("true")));
if (trayIcon->isVisible()) {
if (configuration[QString("STARTTOTRAY")] == QString("true"))
hide();
@ -375,12 +372,18 @@ void MainWindow::updateMenu()
int tab = ui->tabWidget->currentIndex();
setMenuActionsShown(false);
if (tab == 0)
updateMenuMain();
else if (tab == 1)
switch (tab) {
case 1:
updateMenuProfile();
else if (tab == 2)
break;
case 2:
updateMenuWifi();
break;
case 0:
default:
updateMenuMain();
break;
}
}
@ -389,12 +392,18 @@ void MainWindow::updateTabs(const int tab)
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Update tab" << tab;
if (tab == 0)
updateMainTab();
else if (tab == 1)
switch (tab) {
case 1:
updateProfileTab();
else if (tab == 2)
break;
case 2:
updateWifiTab();
break;
case 0:
default:
updateMainTab();
break;
}
updateMenu();
}

View File

@ -479,7 +479,7 @@ void MainWindow::createToolBars()
toolBarActions[QString("mainRestart")] = menu->addAction(QIcon::fromTheme(QString("view-refresh")),
QApplication::translate("MainWindow", "Restart"),
this, SLOT(mainTabRestartProfile()));
toolBarActions[QString("mainEnable")] = menu->addAction(QIcon::fromTheme(QString("edit-add")),
toolBarActions[QString("mainEnable")] = menu->addAction(QIcon::fromTheme(QString("list-add")),
QApplication::translate("MainWindow", "Enable"),
this, SLOT(mainTabEnableProfile()));
toolBarActions[QString("mainStopAll")] = menu->addAction(QIcon::fromTheme(QString("process-stop")),

View File

@ -118,12 +118,10 @@ QMap<QString, QString> MobileWidget::getSettings()
int MobileWidget::isOk()
{
// APN is not set
if (ui->lineEdit_apn->text().isEmpty())
return 1;
if (ui->lineEdit_apn->text().isEmpty()) return 1;
// config file doesn't exist
if (!ui->lineEdit_options->text().isEmpty())
if (!QFile(ui->lineEdit_options->text()).exists())
return 2;
if (!QFile(ui->lineEdit_options->text()).exists()) return 2;
// all fine
return 0;
}

View File

@ -145,25 +145,19 @@ void NetctlAutoWindow::netctlAutoContextualMenu(const QPoint &pos)
QAction *enableProfile = menu.addAction(QApplication::translate("NetctlAutoWindow", "Enable profile"));
menu.addSeparator();
QAction *enableAllProfiles = menu.addAction(QApplication::translate("NetctlAutoWindow", "Enable all profiles"));
enableAllProfiles->setIcon(QIcon::fromTheme("edit-add"));
enableAllProfiles->setIcon(QIcon::fromTheme("list-add"));
QAction *disableAllProfiles = menu.addAction(QApplication::translate("NetctlAutoWindow", "Disable all profiles"));
disableAllProfiles->setIcon(QIcon::fromTheme("edit-delete"));
// set text
if (!ui->tableWidget->item(ui->tableWidget->currentItem()->row(), 2)->text().isEmpty()) {
enableProfile->setVisible(false);
startProfile->setVisible(false);
} else {
enableProfile->setVisible(true);
startProfile->setVisible(true);
startProfile->setVisible(ui->tableWidget->item(ui->tableWidget->currentItem()->row(), 2)->text().isEmpty());
if (!ui->tableWidget->item(ui->tableWidget->currentItem()->row(), 3)->text().isEmpty()) {
enableProfile->setText(QApplication::translate("NetctlAutoWindow", "Enable"));
enableProfile->setIcon(QIcon::fromTheme("edit-add"));
enableProfile->setIcon(QIcon::fromTheme("list-add"));
} else {
enableProfile->setText(QApplication::translate("NetctlAutoWindow", "Disable"));
enableProfile->setIcon(QIcon::fromTheme("edit-delete"));
}
}
// actions
QAction *action = menu.exec(ui->tableWidget->viewport()->mapToGlobal(pos));
@ -227,7 +221,7 @@ void NetctlAutoWindow::netctlAutoUpdateTable()
ui->actionDisableAll->setVisible(false);
ui->actionEnableAll->setVisible(false);
ui->actionRestartService->setVisible(false);
netctlAutoRefreshButtons(0, 0);
netctlAutoRefreshButtons(nullptr, nullptr);
return;
}
QList<netctlProfileInfo> profiles;
@ -288,10 +282,11 @@ void NetctlAutoWindow::netctlAutoUpdateTable()
ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
#endif
ui->tableWidget->setCurrentCell(-1, -1);
ui->tableWidget->setEnabled(true);
ui->statusBar->showMessage(QApplication::translate("NetctlAutoWindow", "Updated"));
netctlAutoRefreshButtons(0, 0);
netctlAutoRefreshButtons(nullptr, nullptr);
update();
}
@ -325,8 +320,7 @@ void NetctlAutoWindow::netctlAutoEnableProfile()
{
if (debug) qDebug() << PDEBUG;
if (ui->tableWidget->currentItem() == 0)
return;
if (ui->tableWidget->currentItem() == nullptr) return;
ui->tableWidget->setDisabled(true);
QString profile = ui->tableWidget->item(ui->tableWidget->currentItem()->row(), 0)->text();
bool status = false;
@ -380,8 +374,7 @@ void NetctlAutoWindow::netctlAutoStartProfile()
{
if (debug) qDebug() << PDEBUG;
if (ui->tableWidget->currentItem() == nullptr)
return;
if (ui->tableWidget->currentItem() == nullptr) return;
ui->tableWidget->setDisabled(true);
QString profile = ui->tableWidget->item(ui->tableWidget->currentItem()->row(), 0)->text();
bool status = false;
@ -492,27 +485,17 @@ void NetctlAutoWindow::netctlAutoRefreshButtons(QTableWidgetItem *current, QTabl
ui->actionSwitch->setVisible(false);
return;
}
if (!ui->tableWidget->item(current->row(), 2)->text().isEmpty()) {
// buttons
toolBarActions[QString("enable")]->setDisabled(true);
toolBarActions[QString("switch")]->setDisabled(true);
// menu
ui->actionEnable->setVisible(false);
ui->actionSwitch->setVisible(false);
} else {
// buttons
toolBarActions[QString("switch")]->setEnabled(ui->tableWidget->item(current->row(), 2)->text().isEmpty());
ui->actionSwitch->setVisible(ui->tableWidget->item(current->row(), 2)->text().isEmpty());
toolBarActions[QString("enable")]->setEnabled(true);
toolBarActions[QString("switch")]->setEnabled(true);
// menu
ui->actionEnable->setVisible(true);
ui->actionSwitch->setVisible(true);
if (!ui->tableWidget->item(current->row(), 3)->text().isEmpty()) {
// buttons
toolBarActions[QString("enable")]->setText(QApplication::translate("NetctlAutoWindow", "Enable"));
toolBarActions[QString("enable")]->setIcon(QIcon::fromTheme("edit-add"));
toolBarActions[QString("enable")]->setIcon(QIcon::fromTheme("list-add"));
// menu
ui->actionEnable->setText(QApplication::translate("NetctlAutoWindow", "Enable profile"));
ui->actionEnable->setIcon(QIcon::fromTheme("edit-add"));
ui->actionEnable->setIcon(QIcon::fromTheme("list-add"));
} else {
// buttons
toolBarActions[QString("enable")]->setText(QApplication::translate("NetctlAutoWindow", "Disable"));
@ -521,5 +504,4 @@ void NetctlAutoWindow::netctlAutoRefreshButtons(QTableWidgetItem *current, QTabl
ui->actionEnable->setText(QApplication::translate("NetctlAutoWindow", "Disable profile"));
ui->actionEnable->setIcon(QIcon::fromTheme("edit-delete"));
}
}
}

View File

@ -94,7 +94,7 @@
<widget class="QStatusBar" name="statusBar"/>
<action name="actionEnable">
<property name="icon">
<iconset theme="edit-add">
<iconset theme="list-add">
<normaloff/>
</iconset>
</property>
@ -127,7 +127,7 @@
</action>
<action name="actionEnableAll">
<property name="icon">
<iconset theme="edit-add">
<iconset theme="list-add">
<normaloff/>
</iconset>
</property>

View File

@ -157,22 +157,18 @@ int PppoeWidget::isOk()
{
// config file doesn't exist
if (!ui->lineEdit_options->text().isEmpty())
if (!QFile(ui->lineEdit_options->text()).exists())
return 1;
if (!QFile(ui->lineEdit_options->text()).exists()) return 1;
// mac address
if (!ui->lineEdit_mac->text().remove(QChar(':')).isEmpty())
if (ui->lineEdit_mac->text().length() != (6 * 2 + 5))
return 2;
if (ui->lineEdit_mac->text().length() != (6 * 2 + 5)) return 2;
// session id is not set
if (!ui->lineEdit_session->text().remove(QChar(':')).isEmpty())
if (ui->lineEdit_session->text().split(QChar(':'))[0].isEmpty())
return 3;
if (ui->lineEdit_session->text().split(QChar(':'))[0].isEmpty()) return 3;
// session mac address
if (!ui->lineEdit_session->text().remove(QChar(':')).isEmpty()) {
QStringList item = ui->lineEdit_session->text().split(QChar(':'));
item.removeFirst();
if (item.join(QChar(':')).length() != (6 * 2 + 5))
return 4;
if (item.join(QChar(':')).length() != (6 * 2 + 5)) return 4;
}
// all fine
return 0;

View File

@ -70,8 +70,7 @@ QMap<QString, QString> TunnelWidget::getSettings()
int TunnelWidget::isOk()
{
// ip is not correct
if (!IpRegExp::checkString(ui->lineEdit_remote->text(), IpRegExp::ip4Regex()))
return 1;
if (!IpRegExp::checkString(ui->lineEdit_remote->text(), IpRegExp::ip4Regex())) return 1;
// all fine
return 0;
}

View File

@ -59,11 +59,9 @@ QMap<QString, QString> TuntapWidget::getSettings()
int TuntapWidget::isOk()
{
// empty username
if (ui->lineEdit_user->text().isEmpty())
return 1;
if (ui->lineEdit_user->text().isEmpty()) return 1;
// empty group name
if (ui->lineEdit_group->text().isEmpty())
return 2;
if (ui->lineEdit_group->text().isEmpty()) return 2;
// all fine
return 0;
}

View File

@ -232,26 +232,21 @@ int WirelessWidget::isOk()
// empty key
if ((ui->comboBox_security->currentText() == QString("wep")) ||
(ui->comboBox_security->currentText() == QString("wpa")))
if (ui->lineEdit_key->text().isEmpty())
return 1;
if (ui->lineEdit_key->text().isEmpty()) return 1;
// empty settings
if (ui->comboBox_security->currentText() == QString("wpa-configsection"))
if (ui->listWidget_wpaConfigSection->count() == 0)
return 2;
if (ui->listWidget_wpaConfigSection->count() == 0) return 2;
// file is not set
if (ui->comboBox_security->currentText() == QString("wpa-config"))
if (ui->lineEdit_wpaConfig->text().isEmpty())
return 3;
if (ui->lineEdit_wpaConfig->text().isEmpty()) return 3;
// file wpa_supplicant doesn't exists
if (ui->comboBox_security->currentText() == QString("wpa-config"))
if (!QFile(ui->lineEdit_wpaConfig->text()).exists())
return 4;
if (!QFile(ui->lineEdit_wpaConfig->text()).exists()) return 4;
// essid is not set
if ((ui->comboBox_security->currentText() == QString("none")) ||
(ui->comboBox_security->currentText() == QString("wep")) ||
(ui->comboBox_security->currentText() == QString("wpa")))
if (ui->lineEdit_essid->text().isEmpty())
return 5;
if (ui->lineEdit_essid->text().isEmpty()) return 5;
// all fine
return 0;
}

View File

@ -259,7 +259,9 @@ QStringList ControlAdaptor::WiFi()
QStringList point;
point.append(wifiPoints[i].name);
point.append(wifiPoints[i].security);
point.append(wifiPoints[i].signal);
point.append(wifiPoints[i].frequencies.join(QChar(',')));
point.append(wifiPoints[i].macs.join(QChar(',')));
point.append(QString::number(wifiPoints[i].signal));
point.append(QString::number(wifiPoints[i].active));
point.append(QString::number(wifiPoints[i].exists));
info.append(point.join(QChar('|')));

View File

@ -118,6 +118,7 @@ QStringList NetctlAdaptor::ProfileList()
QStringList profileInfo;
profileInfo.append(profilesInfo[i].name);
profileInfo.append(profilesInfo[i].description);
profileInfo.append(profilesInfo[i].essid);
profileInfo.append(QString::number(profilesInfo[i].active));
profileInfo.append(QString::number(profilesInfo[i].enabled));
info.append(profileInfo.join(QChar('|')));
@ -146,6 +147,12 @@ QString NetctlAdaptor::ProfileValue(const QString profile, const QString key)
}
QStringList NetctlAdaptor::ProfileValues(const QString profile, const QStringList keys)
{
return netctlProfile->getValuesFromProfile(profile, keys);
}
// wpaCommand
QString NetctlAdaptor::ProfileByEssid(const QString essid)
{

View File

@ -50,6 +50,7 @@ public slots:
// netctlProfile
QStringList Profile(const QString profile);
QString ProfileValue(const QString profile, const QString key);
QStringList ProfileValues(const QString profile, const QStringList keys);
// wpaCommand
QString ProfileByEssid(const QString essid);
QStringList WirelessInterfaces();

View File

@ -40,6 +40,8 @@ class NetctlProfile;
* profile name
* @var netctlProfileInfo::description
* profile description
* @var netctlProfileInfo::essid
* ESSID if any
* @var netctlProfileInfo::active
* whether profile is active
* @var netctlProfileInfo::enabled
@ -49,6 +51,7 @@ typedef struct
{
QString name;
QString description;
QString essid;
bool active;
bool enabled;
} netctlProfileInfo;

View File

@ -85,6 +85,13 @@ public:
* @return value by key
*/
QString getValueFromProfile(const QString profile, const QString key);
/**
* @brief method which return values from profile by keys
* @param profile profile name
* @param keys required keys
* @return values by keys
*/
QStringList getValuesFromProfile(const QString profile, const QStringList keys);
/**
* @brief method which removes profile
* @param profile profile name

View File

@ -43,6 +43,10 @@ class NetctlProfile;
* may be "WPA2", "WEP", "WEP", "none"
* @var netctlWifiInfo::signal
* Wifi point signal
* @var netctlWifiInfo::macs
* point MAC addresses
* @var netctlWifiInfo::frequencies
* point frequencies
* @var netctlWifiInfo::active
* whether associated profile is active
* @var netctlWifiInfo::exists
@ -50,9 +54,11 @@ class NetctlProfile;
*/
typedef struct
{
QStringList frequencies;
QStringList macs;
QString name;
QString security;
QString signal;
int signal;
bool active;
bool exists;
} netctlWifiInfo;

View File

@ -189,9 +189,16 @@ QList<netctlProfileInfo> Netctl::getProfileList()
for (int i=0; i<output.count(); i++) {
netctlProfileInfo profileInfo;
profileInfo.name = output[i].mid(2, -1);
profileInfo.description = getProfileDescription(profileInfo.name);
profileInfo.active = (output[i][0] == QChar('*'));
profileInfo.enabled = isProfileEnabled(profileInfo.name);
// external
QStringList keys;
keys.append(QString("Description"));
keys.append(QString("ESSID"));
QStringList profileValues = netctlProfile->getValuesFromProfile(profileInfo.name,
keys);
profileInfo.description = profileValues[0];
profileInfo.essid = profileValues[1];
fullProfilesInfo.append(profileInfo);
}
@ -212,9 +219,16 @@ QList<netctlProfileInfo> Netctl::getProfileListFromNetctlAuto()
for (int i=0; i<output.count(); i++) {
netctlProfileInfo profileInfo;
profileInfo.name = output[i].mid(2, -1);
profileInfo.description = getProfileDescription(profileInfo.name);
profileInfo.active = (output[i][0] == QChar('*'));
profileInfo.enabled = (output[i][0] != QChar('!'));
// external
QStringList keys;
keys.append(QString("Description"));
keys.append(QString("ESSID"));
QStringList profileValues = netctlProfile->getValuesFromProfile(profileInfo.name,
keys);
profileInfo.description = profileValues[0];
profileInfo.essid = profileValues[1];
fullProfilesInfo.append(profileInfo);
}

View File

@ -237,7 +237,7 @@ QMap<QString, QString> NetctlProfile::getSettingsFromProfile(const QString profi
/**
* @fn ValueFromProfile
* @fn getValueFromProfile
*/
QString NetctlProfile::getValueFromProfile(const QString profile, const QString key)
{
@ -251,6 +251,24 @@ QString NetctlProfile::getValueFromProfile(const QString profile, const QString
}
/**
* @fn getValuesFromProfile
*/
QStringList NetctlProfile::getValuesFromProfile(const QString profile, const QStringList keys)
{
if (debug) qDebug() << PDEBUG;
if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile;
if (debug) qDebug() << PDEBUG << ":" << "Keys" << keys;
QMap<QString, QString> settings = getSettingsFromProfile(profile);
QStringList values;
for (int i=0; i<keys.count(); i++)
values.append(settings[keys[i]]);
return values;
}
/**
* @fn removeProfile
*/

View File

@ -264,39 +264,51 @@ QList<netctlWifiInfo> WpaSup::scanWifi()
return scanResults;
}
if (!wpaCliCall(QString("scan"))) return scanResults;
waitForProcess(3);
waitForProcess(1);
QStringList rawOutput = getWpaCliOutput(QString("scan_results")).split(QChar('\n'), QString::SkipEmptyParts);
QStringList rawList = getWpaCliOutput(QString("scan_results")).split(QChar('\n'), QString::SkipEmptyParts);
// remove table header
rawOutput.removeFirst();
// remove duplicates
QStringList rawList;
rawList.removeFirst();
QStringList names;
for (int i=0; i<rawOutput.count(); i++) {
if (rawOutput[i].split(QChar('\t'), QString::SkipEmptyParts).count() == 4) {
rawList.append(rawOutput[i]);
QList<netctlProfileInfo> profiles = netctlCommand->getProfileList();
for (int i=0; i<rawList.count(); i++) {
QStringList line = rawList[i].split(QChar('\t'));
if (line.count() != 5) continue;
QString name = line[4];
if (name.isEmpty()) name = QString("<hidden>");
// append mac and frequency if exists
int index = names.indexOf(name);
if ((name != QString("<hidden>")) && (index > -1)) {
scanResults[index].frequencies.append(line[1]);
scanResults[index].macs.append(line[0]);
if (scanResults[index].signal < line[2].toInt())
scanResults[index].signal = line[2].toInt();
continue;
} else if (rawOutput[i].split(QChar('\t'), QString::SkipEmptyParts).count() == 5) {
if (names.contains(rawOutput[i].split(QChar('\t'), QString::SkipEmptyParts)[4])) continue;
names.append(rawOutput[i].split(QChar('\t'), QString::SkipEmptyParts)[4]);
rawList.append(rawOutput[i]);
}
}
for (int i=0; i<rawList.count(); i++) {
netctlWifiInfo wifiPoint;
// point name
if (rawList[i].split(QChar('\t'), QString::SkipEmptyParts).count() == 5)
wifiPoint.name = rawList[i].split(QChar('\t'), QString::SkipEmptyParts)[4];
else
wifiPoint.name = QString("<hidden>");
netctlWifiInfo wifiPoint;
wifiPoint.name = name;
// profile status
wifiPoint.active = isProfileActive(wifiPoint.name);
wifiPoint.exists = isProfileExists(wifiPoint.name);
netctlProfileInfo profile;
profile.name = QString("");
profile.active = false;
for (int j=0; j<profiles.count(); j++) {
if (wifiPoint.name != profiles[j].essid) continue;
profile = profiles[j];
break;
}
wifiPoint.active = profile.active;
wifiPoint.exists = (!profile.name.isEmpty());
// mac
wifiPoint.macs.append(line[0]);
// frequencies
wifiPoint.frequencies.append(line[1]);
// point signal
wifiPoint.signal = rawList[i].split(QChar('\t'), QString::SkipEmptyParts)[2];
wifiPoint.signal = line[2].toInt();
// point security
QString security = rawList[i].split(QChar('\t'), QString::SkipEmptyParts)[3];
QString security = line[3];
if (security.contains(QString("WPA2")))
security = QString("WPA2");
else if (security.contains(QString("WPA")))
@ -306,6 +318,9 @@ QList<netctlWifiInfo> WpaSup::scanWifi()
else
security = QString("none");
wifiPoint.security = security;
// append
names.append(name);
scanResults.append(wifiPoint);
}
stopWpaSupplicant();