aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/thread
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/thread')
-rw-r--r--src/ui/thread/ProxyConnectionTestTask.cpp74
-rw-r--r--src/ui/thread/ProxyConnectionTestTask.h (renamed from src/ui/thread/ProxyConnectionTestThread.h)16
-rw-r--r--src/ui/thread/ProxyConnectionTestThread.cpp58
3 files changed, 83 insertions, 65 deletions
diff --git a/src/ui/thread/ProxyConnectionTestTask.cpp b/src/ui/thread/ProxyConnectionTestTask.cpp
new file mode 100644
index 00000000..c7d623d7
--- /dev/null
+++ b/src/ui/thread/ProxyConnectionTestTask.cpp
@@ -0,0 +1,74 @@
+/**
+ * Copyright (C) 2021 Saturneric
+ *
+ * This file is part of GpgFrontend.
+ *
+ * GpgFrontend is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GpgFrontend is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from
+ * the gpg4usb project, which is under GPL-3.0-or-later.
+ *
+ * The source code version of this software was modified and released
+ * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021.
+ *
+ */
+
+#include "ProxyConnectionTestTask.h"
+
+GpgFrontend::UI::ProxyConnectionTestTask::ProxyConnectionTestTask(QString url,
+ int timeout)
+ : Task("proxy_connection_test_task"),
+ url_(std::move(url)),
+ timeout_(timeout),
+ network_manager_(new QNetworkAccessManager(this)) {}
+
+void GpgFrontend::UI::ProxyConnectionTestTask::run() {
+ SetFinishAfterRun(false);
+
+ auto* network_reply = network_manager_->get(QNetworkRequest{url_});
+ auto* timer = new QTimer(this);
+
+ connect(network_reply, &QNetworkReply::finished, this,
+ [this, network_reply]() {
+ SPDLOG_DEBUG("key server domain reply: {} received",
+ url_.toStdString());
+ this->slot_process_network_reply(network_reply);
+ });
+
+ connect(timer, &QTimer::timeout, this, [this, network_reply]() {
+ SPDLOG_DEBUG("timeout for key server: {}", url_.toStdString());
+ if (network_reply->isRunning()) {
+ network_reply->abort();
+ this->slot_process_network_reply(network_reply);
+ }
+ });
+
+ timer->start(timeout_);
+}
+
+void GpgFrontend::UI::ProxyConnectionTestTask::slot_process_network_reply(
+ QNetworkReply* reply) {
+ auto buffer = reply->readAll();
+ SPDLOG_DEBUG("key server domain reply: {}, buffer size: {}",
+ url_.toStdString(), buffer.size());
+
+ if (reply->error() == QNetworkReply::NoError && !buffer.isEmpty()) {
+ result_ = "Reachable";
+ } else {
+ result_ = "Not Reachable";
+ }
+
+ emit SignalProxyConnectionTestResult(result_);
+ emit SignalTaskRunnableEnd(0);
+}
diff --git a/src/ui/thread/ProxyConnectionTestThread.h b/src/ui/thread/ProxyConnectionTestTask.h
index 70757e03..38e78ae4 100644
--- a/src/ui/thread/ProxyConnectionTestThread.h
+++ b/src/ui/thread/ProxyConnectionTestTask.h
@@ -39,7 +39,7 @@ namespace GpgFrontend::UI {
* @brief
*
*/
-class ProxyConnectionTestThread : public QThread {
+class ProxyConnectionTestTask : public Thread::Task {
Q_OBJECT
public:
/**
@@ -49,9 +49,7 @@ class ProxyConnectionTestThread : public QThread {
* @param timeout
* @param parent
*/
- explicit ProxyConnectionTestThread(QString url, int timeout,
- QWidget* parent = nullptr)
- : QThread(parent), url_(std::move(url)), timeout_(timeout) {}
+ explicit ProxyConnectionTestTask(QString url, int timeout);
signals:
/**
@@ -68,10 +66,14 @@ class ProxyConnectionTestThread : public QThread {
*/
void run() override;
+ private slots:
+ void slot_process_network_reply(QNetworkReply* reply);
+
private:
- QString url_; ///<
- QString result_; ///<
- int timeout_ = 500; ///<
+ QString url_; ///<
+ QString result_; ///<
+ int timeout_ = 500; ///<
+ QNetworkAccessManager* network_manager_; ///<
};
} // namespace GpgFrontend::UI
diff --git a/src/ui/thread/ProxyConnectionTestThread.cpp b/src/ui/thread/ProxyConnectionTestThread.cpp
deleted file mode 100644
index 8b113453..00000000
--- a/src/ui/thread/ProxyConnectionTestThread.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * The source code version of this software was modified and released
- * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021.
- *
- */
-
-#include "ProxyConnectionTestThread.h"
-
-void GpgFrontend::UI::ProxyConnectionTestThread::run() {
- QNetworkProxyQuery npq({QUrl(url_)});
- auto proxies_list = QNetworkProxyFactory::systemProxyForQuery(npq);
-
- if (proxies_list.isEmpty()) {
- SPDLOG_DEBUG("no proxy applied");
- } else {
- SPDLOG_DEBUG("proxies list hostname: {}",
- proxies_list.front().hostName().toStdString());
- }
-
- SPDLOG_DEBUG("proxies list size: {}", proxies_list.size());
-
- auto manager = std::make_unique<QNetworkAccessManager>(nullptr);
- QNetworkRequest url_request;
- url_request.setUrl(QUrl(url_));
- auto _reply = manager->get(url_request);
-
- while (_reply->isRunning()) QApplication::processEvents();
- auto _buffer = _reply->readAll();
- if (_reply->error() == QNetworkReply::NoError && !_buffer.isEmpty()) {
- result_ = "Reachable";
- } else {
- result_ = "Not Reachable";
- }
-
- _reply->deleteLater();
-
- emit SignalProxyConnectionTestResult(result_);
-}