#include "connectionsettingsengine.h" /* * The configuration map: * * autoconnectEnabled: bool * autoconnectPriority: int * allUsersMayConnect: bool * vpnAutoconnectEnabled: bool * autoconnectVpn: QString * meteredConnection: QString */ ConnectionSettingsEngine::ConnectionSettingsEngine() { } QVariantMap ConnectionSettingsEngine::readConnectionSettings(QString connUuidStr) { // Contains adapted code from plasma-nm NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(connUuidStr); NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings(); QVariantMap result; result.insert("autoconnectEnabled", connSettings->autoconnect()); result.insert("autoconnectPriority", connSettings->autoconnectPriority()); result.insert("allUsersMayConnect", connSettings->permissions().isEmpty() ? true : false); QStringList secondaryConns = connSettings->secondaries(); NetworkManager::Connection::List list = NetworkManager::listConnections(); QStringList vpnList; for (const NetworkManager::Connection::Ptr &conn : list) { NetworkManager::ConnectionSettings::Ptr conSet = conn->settings(); if (conSet->connectionType() == NetworkManager::ConnectionSettings::Vpn || conSet->connectionType() == NetworkManager::ConnectionSettings::WireGuard) { vpnList.append(conSet->uuid()); } } if (secondaryConns.isEmpty() || vpnList.isEmpty()) { result.insert("vpnAutoconnectEnabled", false); result.insert("autoconnectVpn", ""); } else { for (const QString &vpnKey : vpnList) { if (secondaryConns.contains(vpnKey)) { result.insert("vpnAutoconnectEnabled", true); result.insert("autoconnectVpn", vpnKey); break; } } } switch (connSettings->metered()) { case NetworkManager::ConnectionSettings::MeteredUnknown: case NetworkManager::ConnectionSettings::MeteredGuessYes: case NetworkManager::ConnectionSettings::MeteredGuessNo: result.insert("meteredConnection", "Automatic"); break; case NetworkManager::ConnectionSettings::MeteredYes: result.insert("meteredConnection", "Yes"); break; case NetworkManager::ConnectionSettings::MeteredNo: result.insert("meteredConnection", "No"); break; } // TODO: pick up here return result; } void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVariantMap settings) { // Contains adapted code from plasma-nm NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(connUuidStr); NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings(); if (settings["autoconnectEnabled"].isValid()) { connSettings->setAutoconnect(settings["autoconnectEnabled"].toBool()); } if (settings["autoconnectPriority"].isValid()) { connSettings->setAutoconnectPriority(settings["autoconnectPriority"].toInt()); } if (settings["allUsersMayConnect"].isValid()) { if (settings["allUsersMayConnect"].toBool()) { connSettings->setPermissions(QHash()); } else { if (connSettings->permissions().isEmpty()) { ; // TODO: Add current user to permissiosn list } // Otherwise we just leave the permissions as-is } } if (settings["vpnAutoconnectEnabled"].isValid()) { if (settings["vpnAutoconnectEnabled"].toBool()) { connSettings->setSecondaries(QStringList() << settings["autoconnectVpn"].toString()); } } if (settings["meteredConnection"].isValid()) { QString meteredConnectionStr = settings["meteredConnection"].toString(); if (meteredConnectionStr == "Yes") { connSettings->setMetered(NetworkManager::ConnectionSettings::MeteredYes); } else if (meteredConnectionStr == "No") { connSettings->setMetered(NetworkManager::ConnectionSettings::MeteredNo); } // if it's "Automatic" we just leave it be } }