diff options
author | Saturn&Eric <[email protected]> | 2022-01-05 20:02:19 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2022-01-05 20:02:19 +0000 |
commit | a3ca1bf1d4404327d68d3d49127085638c272152 (patch) | |
tree | deb10c33977e5002fa6e9b434f2b07d2719a4e31 /src/ui/settings/SettingsKeyServer.cpp | |
parent | Merge pull request #37 from saturneric/document (diff) | |
parent | <doc>(navbar): take repository and GitHub apart. (diff) | |
download | GpgFrontend-a3ca1bf1d4404327d68d3d49127085638c272152.tar.gz GpgFrontend-a3ca1bf1d4404327d68d3d49127085638c272152.zip |
Merge pull request #36 from saturneric/developv2.0.4
v2.0.4
Diffstat (limited to 'src/ui/settings/SettingsKeyServer.cpp')
-rw-r--r-- | src/ui/settings/SettingsKeyServer.cpp | 80 |
1 files changed, 59 insertions, 21 deletions
diff --git a/src/ui/settings/SettingsKeyServer.cpp b/src/ui/settings/SettingsKeyServer.cpp index 1d520e35..0cba7b51 100644 --- a/src/ui/settings/SettingsKeyServer.cpp +++ b/src/ui/settings/SettingsKeyServer.cpp @@ -25,6 +25,7 @@ #include "SettingsKeyServer.h" #include "GlobalSettingStation.h" +#include "ui/function/TestListedKeyServerThread.h" #include "ui_KeyServerSettings.h" namespace GpgFrontend::UI { @@ -95,6 +96,7 @@ KeyserverTab::KeyserverTab(QWidget* parent) const auto item = ui->keyServerListTable->item(i, 1); if (!item->isSelected()) continue; this->keyServerStrList.removeAt(i); + break; } this->refreshTable(); }); @@ -231,35 +233,71 @@ void KeyserverTab::refreshTable() { } void KeyserverTab::slotTestListedKeyServer() { - ui->keyServerListTable->blockSignals(true); auto timeout = QInputDialog::getInt(this, _("Set TCP Timeout"), tr("timeout(ms): "), QLineEdit::Normal, 500, 2000); + QStringList urls; const auto row_size = ui->keyServerListTable->rowCount(); for (int i = 0; i < row_size; i++) { - const auto keyserver = ui->keyServerListTable->item(i, 1)->text(); - const auto status = ui->keyServerListTable->item(i, 3); - if (keyserver == nullptr || status == nullptr) continue; - - auto key_url = QUrl{keyserver}; - - LOG(INFO) << "key domain" << key_url.host().toStdString(); - - QTcpSocket socket(this); - socket.abort(); - socket.connectToHost(key_url.host(), 80); - if (socket.waitForConnected(timeout)) { - status->setText(_("Reachable")); - status->setForeground(QBrush(QColor::fromRgb(0, 255, 0))); - } else { - status->setText(_("Not Reachable")); - status->setForeground(QBrush(QColor::fromRgb(255, 0, 0))); - } - socket.close(); + const auto keyserver_url = ui->keyServerListTable->item(i, 1)->text(); + urls.push_back(keyserver_url); } - ui->keyServerListTable->blockSignals(false); + + auto thread = new TestListedKeyServerThread(urls, timeout, this); + connect(thread, + &GpgFrontend::UI::TestListedKeyServerThread:: + signalKeyServerListTestResult, + this, [=](const QStringList& result) { + const auto row_size = ui->keyServerListTable->rowCount(); + if (result.size() != row_size) return; + ui->keyServerListTable->blockSignals(true); + for (int i = 0; i < row_size; i++) { + const auto status = result[i]; + auto status_iem = ui->keyServerListTable->item(i, 3); + if (status == "Reachable") { + status_iem->setText(_("Reachable")); + status_iem->setForeground(QBrush(QColor::fromRgb(0, 255, 0))); + } else { + status_iem->setText(_("Not Reachable")); + status_iem->setForeground(QBrush(QColor::fromRgb(255, 0, 0))); + } + } + ui->keyServerListTable->blockSignals(false); + }); + connect(thread, &QThread::finished, thread, &QThread::deleteLater); + + // Waiting Dialog + auto* waiting_dialog = new QProgressDialog(this); + waiting_dialog->setMaximum(0); + waiting_dialog->setMinimum(0); + auto waiting_dialog_label = + new QLabel(QString(_("Test Key Server Connection...")) + "<br /><br />" + + _("This test only tests the network connectivity of the key " + "server. Passing the test does not mean that the key server " + "is functionally available.")); + waiting_dialog_label->setWordWrap(true); + waiting_dialog->setLabel(waiting_dialog_label); + waiting_dialog->resize(420, 120); + connect(thread, &QThread::finished, [=]() { + waiting_dialog->finished(0); + waiting_dialog->deleteLater(); + }); + connect(waiting_dialog, &QProgressDialog::canceled, [=]() { + LOG(INFO) << "cancel clicked"; + if (thread->isRunning()) thread->terminate(); + }); + + // Show Waiting Dialog + waiting_dialog->show(); + waiting_dialog->setFocus(); + + thread->start(); + QEventLoop loop; + connect(thread, &QThread::finished, &loop, &QEventLoop::quit); + loop.exec(); } + void KeyserverTab::contextMenuEvent(QContextMenuEvent* event) { QWidget::contextMenuEvent(event); if (ui->keyServerListTable->selectedItems().length() > 0) { |