From 7c21fdd97132e63572a6aca6fa0492d2ce74e777 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 16 Oct 2023 03:47:52 +0800 Subject: feat: start to add plugin system and do some improve on project configuration --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 5e05da2d..3b067c90 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -28,6 +28,7 @@ #include "KeyUploadDialog.h" +#include #include #include "core/function/GlobalSettingStation.h" -- cgit v1.2.3 From 95997d27106daf91336847f50efaaa32279b7fc7 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 16 Oct 2023 17:54:05 +0800 Subject: fix: check and update copyright at files --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 3b067c90..03bf0871 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2021 Saturneric + * Copyright (C) 2021 Saturneric * * This file is part of GpgFrontend. * @@ -20,7 +20,7 @@ * the gpg4usb project, which is under GPL-3.0-or-later. * * All the source code of GpgFrontend was modified and released by - * Saturneric starting on May 12, 2021. + * Saturneric starting on May 12, 2021. * * SPDX-License-Identifier: GPL-3.0-or-later * -- cgit v1.2.3 From 5175b3ae6687839afa2cdfe01f2fd70d714024ed Mon Sep 17 00:00:00 2001 From: saturneric Date: Tue, 17 Oct 2023 04:19:26 +0800 Subject: refactor: use c++17 features and piml tech to rewrite DataObject and Task --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 03bf0871..4e9c78c9 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -60,7 +60,7 @@ KeyUploadDialog::KeyUploadDialog(const KeyIdArgsListPtr& keys_ids, } void KeyUploadDialog::SlotUpload() { - auto out_data = std::make_unique(); + auto out_data = std::make_shared(); GpgKeyImportExporter::GetInstance().ExportKeys(*m_keys_, out_data); slot_upload_key_to_server(*out_data); -- cgit v1.2.3 From 124929609eabff19359caad276a10f1026793c0f Mon Sep 17 00:00:00 2001 From: saturneric Date: Wed, 25 Oct 2023 18:26:26 +0800 Subject: fix: solve some code tidy issues --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 4e9c78c9..8c5552ae 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -79,7 +79,8 @@ void KeyUploadDialog::slot_upload_key_to_server( const auto key_server_list = key_server_json.Check("server_list", nlohmann::json::array()); - int default_key_server_index = key_server_json.Check("default_server", 0); + size_t default_key_server_index = + key_server_json.Check("default_server", 0); if (default_key_server_index >= key_server_list.size()) { throw std::runtime_error("default_server index out of range"); } -- cgit v1.2.3 From 4dcd2ac8c4f673fc21c4cf0072d6cb648ca64e7e Mon Sep 17 00:00:00 2001 From: saturneric Date: Tue, 7 Nov 2023 15:57:28 +0800 Subject: refactor: separate typedef and impl --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 8c5552ae..dbf9dd00 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -31,6 +31,7 @@ #include #include +#include "core/GpgModel.h" #include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyImportExporter.h" -- cgit v1.2.3 From 8f633b806baec5004d99f554c4af95e427b82258 Mon Sep 17 00:00:00 2001 From: saturneric Date: Tue, 7 Nov 2023 17:25:13 +0800 Subject: style: tidy up core/model --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index dbf9dd00..0d9c1311 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -101,10 +101,10 @@ void KeyUploadDialog::slot_upload_key_to_server( } QUrl req_url(QString::fromStdString(target_keyserver + "/pks/add")); - auto qnam = new QNetworkAccessManager(this); + auto* qnam = new QNetworkAccessManager(this); // Building Post Data - QByteArray postData; + QByteArray post_data; auto data = std::string(keys_data); @@ -122,11 +122,11 @@ void KeyUploadDialog::slot_upload_key_to_server( request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - postData.append("keytext").append("=").append( + post_data.append("keytext").append("=").append( QString::fromStdString(data).toUtf8()); // Send Post Data - QNetworkReply* reply = qnam->post(request, postData); + QNetworkReply* reply = qnam->post(request, post_data); connect(reply, &QNetworkReply::finished, this, &KeyUploadDialog::slot_upload_finished); -- cgit v1.2.3 From 883db05d54510e76b6548e107593187e1306117d Mon Sep 17 00:00:00 2001 From: saturneric Date: Sun, 3 Dec 2023 04:28:46 -0800 Subject: feat: general improvements of aync execution and memory security --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 0d9c1311..cc438364 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -61,7 +61,7 @@ KeyUploadDialog::KeyUploadDialog(const KeyIdArgsListPtr& keys_ids, } void KeyUploadDialog::SlotUpload() { - auto out_data = std::make_shared(); + auto out_data = GpgFrontend::SecureCreateSharedObject(); GpgKeyImportExporter::GetInstance().ExportKeys(*m_keys_, out_data); slot_upload_key_to_server(*out_data); -- cgit v1.2.3 From 644aa4397b03dbef73f8bfedc13925b51cad836b Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 5 Jan 2024 20:55:15 +0800 Subject: feat: integrate logging api to core --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index cc438364..f12149d8 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -89,11 +89,11 @@ void KeyUploadDialog::slot_upload_key_to_server( target_keyserver = key_server_list[default_key_server_index].get(); - SPDLOG_DEBUG("set target key server to default key server: {}", - target_keyserver); + GF_UI_LOG_DEBUG("set target key server to default key server: {}", + target_keyserver); } catch (...) { - SPDLOG_ERROR(_("Cannot read default_keyserver From Settings")); + GF_UI_LOG_ERROR(_("Cannot read default_keyserver From Settings")); QMessageBox::critical(nullptr, _("Default Keyserver Not Found"), _("Cannot read default keyserver from your settings, " "please set a default keyserver first")); @@ -140,11 +140,11 @@ void KeyUploadDialog::slot_upload_finished() { auto* reply = qobject_cast(sender()); QByteArray response = reply->readAll(); - SPDLOG_DEBUG("response: {}", response.toStdString()); + GF_UI_LOG_DEBUG("response: {}", response.toStdString()); auto error = reply->error(); if (error != QNetworkReply::NoError) { - SPDLOG_DEBUG("error from reply: {}", reply->errorString().toStdString()); + GF_UI_LOG_DEBUG("error from reply: {}", reply->errorString().toStdString()); QString message; switch (error) { case QNetworkReply::ContentNotFoundError: @@ -164,7 +164,7 @@ void KeyUploadDialog::slot_upload_finished() { } else { QMessageBox::information(this, _("Upload Success"), _("Upload Public Key Successfully")); - SPDLOG_DEBUG("success while contacting keyserver!"); + GF_UI_LOG_DEBUG("success while contacting keyserver!"); } reply->deleteLater(); } -- cgit v1.2.3 From 0266ff1bbce2feccec34ab789f9e378948d1b24d Mon Sep 17 00:00:00 2001 From: saturneric Date: Thu, 11 Jan 2024 11:05:45 +0800 Subject: feat: improve api and ui of keys import and export --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 33 +++++++++++++++++-------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index f12149d8..ed46fe9d 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -32,9 +32,10 @@ #include #include "core/GpgModel.h" -#include "core/function/GlobalSettingStation.h" #include "core/function/gpg/GpgKeyGetter.h" #include "core/function/gpg/GpgKeyImportExporter.h" +#include "core/utils/GpgUtils.h" +#include "ui/UserInterfaceUtils.h" #include "ui/struct/SettingsObject.h" namespace GpgFrontend::UI { @@ -61,17 +62,29 @@ KeyUploadDialog::KeyUploadDialog(const KeyIdArgsListPtr& keys_ids, } void KeyUploadDialog::SlotUpload() { - auto out_data = GpgFrontend::SecureCreateSharedObject(); - GpgKeyImportExporter::GetInstance().ExportKeys(*m_keys_, out_data); - slot_upload_key_to_server(*out_data); - - // Done - this->hide(); - this->close(); + GpgKeyImportExporter::GetInstance().ExportKeys( + *m_keys_, false, true, false, false, + [=](GpgError err, const DataObjectPtr& data_obj) { + if (CheckGpgError(err) != GPG_ERR_NO_ERROR) { + CommonUtils::RaiseMessageBox(this, err); + return; + } + + if (data_obj == nullptr || !data_obj->Check()) { + throw std::runtime_error("data object doesn't pass checking"); + } + + auto gf_buffer = ExtractParams(data_obj, 0); + slot_upload_key_to_server(gf_buffer); + + // Done + this->hide(); + this->close(); + }); } void KeyUploadDialog::slot_upload_key_to_server( - const GpgFrontend::ByteArray& keys_data) { + const GpgFrontend::GFBuffer& keys_data) { std::string target_keyserver; try { @@ -106,7 +119,7 @@ void KeyUploadDialog::slot_upload_key_to_server( // Building Post Data QByteArray post_data; - auto data = std::string(keys_data); + auto data = keys_data.ConvertToStdString(); boost::algorithm::replace_all(data, "\n", "%0A"); boost::algorithm::replace_all(data, "\r", "%0D"); -- cgit v1.2.3 From bf538056b24a68b8fd235b1c50991ee8eb46a776 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 12 Jan 2024 14:02:37 +0800 Subject: refactor: use QString instead of std::string and improve threading system --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 39 ++++++++++++------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index ed46fe9d..4d36654e 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -85,7 +85,7 @@ void KeyUploadDialog::SlotUpload() { void KeyUploadDialog::slot_upload_key_to_server( const GpgFrontend::GFBuffer& keys_data) { - std::string target_keyserver; + QString target_keyserver; try { SettingsObject key_server_json("key_server"); @@ -99,8 +99,8 @@ void KeyUploadDialog::slot_upload_key_to_server( throw std::runtime_error("default_server index out of range"); } - target_keyserver = - key_server_list[default_key_server_index].get(); + target_keyserver = QString::fromStdString( + key_server_list[default_key_server_index].get()); GF_UI_LOG_DEBUG("set target key server to default key server: {}", target_keyserver); @@ -113,30 +113,29 @@ void KeyUploadDialog::slot_upload_key_to_server( return; } - QUrl req_url(QString::fromStdString(target_keyserver + "/pks/add")); + QUrl req_url(target_keyserver + "/pks/add"); auto* qnam = new QNetworkAccessManager(this); // Building Post Data QByteArray post_data; - auto data = keys_data.ConvertToStdString(); + auto data = keys_data.ConvertToQByteArray(); - boost::algorithm::replace_all(data, "\n", "%0A"); - boost::algorithm::replace_all(data, "\r", "%0D"); - boost::algorithm::replace_all(data, "(", "%28"); - boost::algorithm::replace_all(data, ")", "%29"); - boost::algorithm::replace_all(data, "/", "%2F"); - boost::algorithm::replace_all(data, ":", "%3A"); - boost::algorithm::replace_all(data, "+", "%2B"); - boost::algorithm::replace_all(data, "=", "%3D"); - boost::algorithm::replace_all(data, " ", "+"); + data.replace("\n", "%0A"); + data.replace("\r", "%0D"); + data.replace("(", "%28"); + data.replace(")", "%29"); + data.replace("/", "%2F"); + data.replace(":", "%3A"); + data.replace("+", "%2B"); + data.replace("=", "%3D"); + data.replace(" ", "+"); QNetworkRequest request(req_url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - post_data.append("keytext").append("=").append( - QString::fromStdString(data).toUtf8()); + post_data.append("keytext").append("=").append(data); // Send Post Data QNetworkReply* reply = qnam->post(request, post_data); @@ -174,11 +173,11 @@ void KeyUploadDialog::slot_upload_finished() { } QMessageBox::critical(this, "Upload Failed", message); return; - } else { - QMessageBox::information(this, _("Upload Success"), - _("Upload Public Key Successfully")); - GF_UI_LOG_DEBUG("success while contacting keyserver!"); } + QMessageBox::information(this, _("Upload Success"), + _("Upload Public Key Successfully")); + GF_UI_LOG_DEBUG("success while contacting keyserver!"); + reply->deleteLater(); } -- cgit v1.2.3 From 6c632d70b391f8b317c68f7db8cfd217f9370995 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 15 Jan 2024 17:22:32 +0800 Subject: feat: use qt json support components in data object and infos gathering module --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 30 +++---------------------- 1 file changed, 3 insertions(+), 27 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 4d36654e..3fdbc629 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -37,6 +37,7 @@ #include "core/utils/GpgUtils.h" #include "ui/UserInterfaceUtils.h" #include "ui/struct/SettingsObject.h" +#include "ui/struct/settings/KeyServerSO.h" namespace GpgFrontend::UI { @@ -85,33 +86,8 @@ void KeyUploadDialog::SlotUpload() { void KeyUploadDialog::slot_upload_key_to_server( const GpgFrontend::GFBuffer& keys_data) { - QString target_keyserver; - - try { - SettingsObject key_server_json("key_server"); - - const auto key_server_list = - key_server_json.Check("server_list", nlohmann::json::array()); - - size_t default_key_server_index = - key_server_json.Check("default_server", 0); - if (default_key_server_index >= key_server_list.size()) { - throw std::runtime_error("default_server index out of range"); - } - - target_keyserver = QString::fromStdString( - key_server_list[default_key_server_index].get()); - - GF_UI_LOG_DEBUG("set target key server to default key server: {}", - target_keyserver); - - } catch (...) { - GF_UI_LOG_ERROR(_("Cannot read default_keyserver From Settings")); - QMessageBox::critical(nullptr, _("Default Keyserver Not Found"), - _("Cannot read default keyserver from your settings, " - "please set a default keyserver first")); - return; - } + KeyServerSO key_server(SettingsObject("general_settings_state")); + auto target_keyserver = key_server.GetTargetServer(); QUrl req_url(target_keyserver + "/pks/add"); auto* qnam = new QNetworkAccessManager(this); -- cgit v1.2.3 From 620ae9e7c1a8b2db2515c080416cb592066e5fec Mon Sep 17 00:00:00 2001 From: saturneric Date: Tue, 16 Jan 2024 21:35:59 +0800 Subject: refactor: remove libgettext from project --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index 3fdbc629..da0ea9f4 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -57,7 +57,7 @@ KeyUploadDialog::KeyUploadDialog(const KeyIdArgsListPtr& keys_ids, this->setLayout(layout); this->setModal(true); - this->setWindowTitle(_("Uploading Public Key")); + this->setWindowTitle(tr("Uploading Public Key")); this->setFixedSize(240, 42); this->setPosCenterOfScreen(); } @@ -136,22 +136,22 @@ void KeyUploadDialog::slot_upload_finished() { QString message; switch (error) { case QNetworkReply::ContentNotFoundError: - message = _("Key Not Found"); + message = tr("Key Not Found"); break; case QNetworkReply::TimeoutError: - message = _("Timeout"); + message = tr("Timeout"); break; case QNetworkReply::HostNotFoundError: - message = _("Key Server Not Found"); + message = tr("Key Server Not Found"); break; default: - message = _("Connection Error"); + message = tr("Connection Error"); } QMessageBox::critical(this, "Upload Failed", message); return; } - QMessageBox::information(this, _("Upload Success"), - _("Upload Public Key Successfully")); + QMessageBox::information(this, tr("Upload Success"), + tr("Upload Public Key Successfully")); GF_UI_LOG_DEBUG("success while contacting keyserver!"); reply->deleteLater(); -- cgit v1.2.3 From e352e8e6b8d03a24ef5d52eef3e4d370807b5bbd Mon Sep 17 00:00:00 2001 From: saturneric Date: Wed, 17 Jan 2024 19:39:47 +0800 Subject: fix: find and slove some bugs --- src/ui/dialog/import_export/KeyUploadDialog.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/ui/dialog/import_export/KeyUploadDialog.cpp') diff --git a/src/ui/dialog/import_export/KeyUploadDialog.cpp b/src/ui/dialog/import_export/KeyUploadDialog.cpp index da0ea9f4..903b2e14 100644 --- a/src/ui/dialog/import_export/KeyUploadDialog.cpp +++ b/src/ui/dialog/import_export/KeyUploadDialog.cpp @@ -29,7 +29,6 @@ #include "KeyUploadDialog.h" #include -#include #include "core/GpgModel.h" #include "core/function/gpg/GpgKeyGetter.h" @@ -59,7 +58,8 @@ KeyUploadDialog::KeyUploadDialog(const KeyIdArgsListPtr& keys_ids, this->setModal(true); this->setWindowTitle(tr("Uploading Public Key")); this->setFixedSize(240, 42); - this->setPosCenterOfScreen(); + this->movePosition2CenterOfParent(); + this->setAttribute(Qt::WA_DeleteOnClose); } void KeyUploadDialog::SlotUpload() { @@ -71,8 +71,15 @@ void KeyUploadDialog::SlotUpload() { return; } - if (data_obj == nullptr || !data_obj->Check()) { - throw std::runtime_error("data object doesn't pass checking"); + if (CheckGpgError(err) == GPG_ERR_USER_1 || data_obj == nullptr || + !data_obj->Check()) { + GF_CORE_LOG_ERROR("data object checking failed"); + QMessageBox::critical(this, tr("Error"), + tr("Unknown error occurred")); + // Done + this->hide(); + this->close(); + return; } auto gf_buffer = ExtractParams(data_obj, 0); @@ -127,6 +134,7 @@ void KeyUploadDialog::slot_upload_key_to_server( void KeyUploadDialog::slot_upload_finished() { auto* reply = qobject_cast(sender()); + this->close(); QByteArray response = reply->readAll(); GF_UI_LOG_DEBUG("response: {}", response.toStdString()); @@ -147,14 +155,12 @@ void KeyUploadDialog::slot_upload_finished() { default: message = tr("Connection Error"); } - QMessageBox::critical(this, "Upload Failed", message); + QMessageBox::critical(this->parentWidget(), tr("Upload Failed"), message); return; } - QMessageBox::information(this, tr("Upload Success"), - tr("Upload Public Key Successfully")); - GF_UI_LOG_DEBUG("success while contacting keyserver!"); - reply->deleteLater(); + QMessageBox::information(this->parentWidget(), tr("Upload Success"), + tr("Upload Public Key Successfully")); } } // namespace GpgFrontend::UI -- cgit v1.2.3