diff --git a/connectionsettingsengine.cpp b/connectionsettingsengine.cpp index 89eb68b..932f780 100644 --- a/connectionsettingsengine.cpp +++ b/connectionsettingsengine.cpp @@ -1,7 +1,6 @@ #include "connectionsettingsengine.h" #include -bool ConnectionSettingsEngine::wipeClonedMacAddress = false; QString ConnectionSettingsEngine::targetConnUuidStr = QString(); /* @@ -369,7 +368,8 @@ QVariantMap ConnectionSettingsEngine::readConnectionSettings(QString connUuidStr void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVariantMap settings) { // Contains adapted code from plasma-nm - wipeClonedMacAddress = false; + bool wipeClonedMacAddress = false; + bool wipeManualIpv4Addresses = false; bool ensure802_1xSettings = false; NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(connUuidStr); NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings(); @@ -466,7 +466,12 @@ void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVa } if (settings["ipv4AddressList"].isValid()) { - connIpv4Setting->setAddresses(settings["ipv4AddressList"].value>()); + QList ipv4AddrList = settings["ipv4AddressList"].value>(); + if (!ipv4AddrList.isEmpty()) { + connIpv4Setting->setAddresses(ipv4AddrList); + } else { + wipeManualIpv4Addresses = true; + } } if (settings["ipv4Required"].isValid()) { @@ -683,6 +688,29 @@ void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVa if (ensure802_1xSettings) { connSettingsMap.insert("802-1x", secSetting.toMap()); } + if (wipeClonedMacAddress) { + QVariantMap ethSettingsMap = connSettingsMap.value("802-3-ethernet"); + if (!ethSettingsMap.isEmpty()) { + ethSettingsMap.remove("cloned-mac-address"); + ethSettingsMap.remove("assigned-mac-address"); + connSettingsMap.remove("802-3-ethernet"); + connSettingsMap.insert("802-3-ethernet", ethSettingsMap); + } + // TODO: Handle WiFi here + } + if (wipeManualIpv4Addresses) { + QVariantMap ipv4SettingsMap = connSettingsMap.value("ipv4"); + if (!ipv4SettingsMap.isEmpty()) { + qWarning() << "made it"; + ipv4SettingsMap.remove("addresses"); + ipv4SettingsMap.remove("address-data"); + ipv4SettingsMap.remove("gateway"); + connSettingsMap.remove("ipv4"); + connSettingsMap.insert("ipv4", ipv4SettingsMap); + } + } + qWarning() << connSettingsMap; + // TODO: Do something to surpress app exit here QDBusPendingReply<> reply = conn->update(connSettingsMap); auto watcher = new QDBusPendingCallWatcher(reply); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, saveReplyFinished); @@ -690,24 +718,7 @@ void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVa void ConnectionSettingsEngine::saveReplyFinished() { - NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(targetConnUuidStr); - NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings(); - NetworkManager::WiredSetting::Ptr connWiredSetting = connSettings->setting(NetworkManager::Setting::Wired).dynamicCast(); - NetworkManager::WirelessSetting::Ptr connWirelessSetting = connSettings->setting(NetworkManager::Setting::Wireless).dynamicCast(); - if (wipeClonedMacAddress) { - // Wiping a MAC address with NetworkManagerQt is surprisingly difficult, so we do it with nmcli instead. - QProcess clonedMacWiper; - clonedMacWiper.setProgram("bash"); - if (!connWiredSetting.isNull()) { - clonedMacWiper.setArguments(QStringList() << QString("-c") << QString("nmcli connection modify %1 ethernet.cloned-mac-address \"\"").arg(conn->uuid())); - clonedMacWiper.start(); - clonedMacWiper.waitForFinished(); - } else if (!connWirelessSetting.isNull()) { - clonedMacWiper.setArguments(QStringList() << QString("-c") << QString("nmcli connection modify %1 wifi.cloned-mac-address \"\"").arg(conn->uuid())); - clonedMacWiper.start(); - clonedMacWiper.waitForFinished(); - } - } + // TODO: Do something to unsupress app exit here } QString ConnectionSettingsEngine::userName() diff --git a/connectionsettingsengine.h b/connectionsettingsengine.h index 6a17bff..9ccee71 100644 --- a/connectionsettingsengine.h +++ b/connectionsettingsengine.h @@ -112,7 +112,6 @@ private slots: private: static QString userName(); static QString targetConnUuidStr; - static bool wipeClonedMacAddress; }; #endif // CONNECTIONSETTINGSENGINE_H diff --git a/ipv4settingstab.cpp b/ipv4settingstab.cpp index ea91f44..aa9fd10 100644 --- a/ipv4settingstab.cpp +++ b/ipv4settingstab.cpp @@ -9,6 +9,8 @@ Ipv4SettingsTab::Ipv4SettingsTab(QWidget *parent) : ui->methodComboBox->addItems(QStringList() << tr("Automatic") << tr("Automatic (address-only)") << tr("Link-Local") << tr("Manual") << tr("Shared to other computers") << tr("Disabled")); connect(ui->editDnsServersButton, &QPushButton::clicked, this, &Ipv4SettingsTab::onEditDnsServersButtonClicked); connect(ui->editSearchDomainsButton, &QPushButton::clicked, this, &Ipv4SettingsTab::onEditSearchDomainsButtonClicked); + connect(ui->manualIpv4ConfigurationAddButton, &QPushButton::clicked, this, &Ipv4SettingsTab::onManualIpv4ConfigurationAddButtonClicked); + connect(ui->manualIpv4ConfigurationRemoveButton, &QPushButton::clicked, this, &Ipv4SettingsTab::onManualIpv4ConfigurationRemoveButtonClicked); } Ipv4SettingsTab::~Ipv4SettingsTab() @@ -123,3 +125,14 @@ void Ipv4SettingsTab::onEditSearchDomainsButtonClicked() led.exec(); ui->searchDomainsLineEdit->setText(led.list()); } + +void Ipv4SettingsTab::onManualIpv4ConfigurationAddButtonClicked() +{ + int newRow = ui->manualIpv4ConfigurationTable->rowCount(); + ui->manualIpv4ConfigurationTable->insertRow(newRow); +} + +void Ipv4SettingsTab::onManualIpv4ConfigurationRemoveButtonClicked() +{ + ui->manualIpv4ConfigurationTable->removeRow(ui->manualIpv4ConfigurationTable->currentRow()); +} diff --git a/ipv4settingstab.h b/ipv4settingstab.h index e85d3e6..1371f4d 100644 --- a/ipv4settingstab.h +++ b/ipv4settingstab.h @@ -24,6 +24,8 @@ public: private slots: void onEditDnsServersButtonClicked(); void onEditSearchDomainsButtonClicked(); + void onManualIpv4ConfigurationAddButtonClicked(); + void onManualIpv4ConfigurationRemoveButtonClicked(); private: Ui::Ipv4SettingsTab *ui; diff --git a/listeditordialog.cpp b/listeditordialog.cpp index 50b748d..62a85e4 100644 --- a/listeditordialog.cpp +++ b/listeditordialog.cpp @@ -8,7 +8,10 @@ ListEditorDialog::ListEditorDialog(QWidget *parent, QString listStr, QChar separ ui->setupUi(this); QStringList itemList = listStr.split(separator); for (int i = 0;i < itemList.count();i++) { - ui->itemListWidget->addItem(itemList[i]); + QString currentStr = itemList[i].trimmed(); + if (currentStr.length() != 0) { + ui->itemListWidget->addItem(currentStr); + } } origListStr = listStr; listModified = false;