From 13bf908ab9179496bef226751c0e230060c51e5c Mon Sep 17 00:00:00 2001 From: talksik Date: Fri, 9 Feb 2024 12:50:06 -0800 Subject: [PATCH] working connecting and entering password --- Main.qml | 14 +++++++++++++- main.cpp | 2 ++ networkmanager.cpp | 22 ++++++++++++++++++++++ networkmanager.h | 3 +++ networksmodel.cpp | 5 +++++ networksmodel.h | 1 + 6 files changed, 46 insertions(+), 1 deletion(-) diff --git a/Main.qml b/Main.qml index 7590ec0..4d17ca8 100644 --- a/Main.qml +++ b/Main.qml @@ -10,6 +10,7 @@ Window { title: "WIFI Picker" signal scanNetworks() + signal connectToNetwork(networkName: string, password: string) ColumnLayout { id: layout @@ -27,9 +28,17 @@ Window { Text { text: "Loading" + width: 100 visible: layout.isLoading } + TextInput { + id: passwordInput + text: "enter password" + selectionColor: "blue" + width: 500 + } + ListView { id: listview visible: !layout.isLoading @@ -75,7 +84,10 @@ Window { Button { visible: !listItem.isConnected && listItem.hovered text: "Connect" - onClicked: console.log("connecting to " + listItem.name) + onClicked: { + console.log("connecting to " + listItem.name) + window.connectToNetwork(listItem.name, passwordInput.text) + } } } } diff --git a/main.cpp b/main.cpp index 41a7084..42bcf9c 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include #include #include +#include int main(int argc, char *argv[]) { @@ -31,6 +32,7 @@ int main(int argc, char *argv[]) } QObject::connect(rootObject, SIGNAL(scanNetworks()), &model, SLOT(scan())); + QObject::connect(rootObject, SIGNAL(connectToNetwork(QString, QString)), &model, SLOT(connectToNetwork(QString, QString))); return app.exec(); } diff --git a/networkmanager.cpp b/networkmanager.cpp index 802583e..cd67742 100644 --- a/networkmanager.cpp +++ b/networkmanager.cpp @@ -48,3 +48,25 @@ QList NetworkManager::scanForNetworks() return networks; } + +bool NetworkManager::isWifiEnabled() +{ + std::string result = exec("nmcli radio wifi"); + if (result.find("enabled") != std::string::npos) + { + return true; + } + + return false; +} + +bool NetworkManager::connect(std::string ssid, std::string password) +{ + try { + std::string command = "nmcli device wifi connect \"" + ssid + "\" password \"" + password + "\""; + std::string result = exec(command.c_str()); + return true; + } catch(...) { + return false; + } +} diff --git a/networkmanager.h b/networkmanager.h index 2ce04e9..5c89c36 100644 --- a/networkmanager.h +++ b/networkmanager.h @@ -4,12 +4,15 @@ #include #include #include +#include class NetworkManager : public QObject { Q_OBJECT public: QList scanForNetworks(); + bool isWifiEnabled(); + bool connect(std::string ssid, std::string password); }; #endif // NETWORKMANAGER_H diff --git a/networksmodel.cpp b/networksmodel.cpp index 7a54133..afa9be1 100644 --- a/networksmodel.cpp +++ b/networksmodel.cpp @@ -48,3 +48,8 @@ QHash NetworksModel::roleNames() const roles[NetworksModel::NetworkRoles::NameRole] = "name"; return roles; } + +void NetworksModel::connectToNetwork(const QString &ssid, const QString &password) +{ + bool success = this->m_networkmanager.connect(ssid.toStdString(), password.toStdString()); +} diff --git a/networksmodel.h b/networksmodel.h index c0e06d5..ca6f251 100644 --- a/networksmodel.h +++ b/networksmodel.h @@ -19,6 +19,7 @@ public: public slots: void scan(); + void connectToNetwork(const QString &ssid, const QString &password); protected: QHash roleNames() const;