aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/CMakeLists.txt25
-rw-r--r--src/ui/GpgFrontendUI.h6
-rw-r--r--src/ui/GpgFrontendUIInit.cpp (renamed from src/ui/mail/ReceiveMailDialog.h)66
-rw-r--r--src/ui/GpgFrontendUIInit.h (renamed from src/ui/mail/ReceiveMailDialog.cpp)21
-rwxr-xr-xsrc/ui/KeyMgmt.cpp1
-rw-r--r--src/ui/UserInterfaceUtils.cpp39
-rw-r--r--src/ui/UserInterfaceUtils.h14
-rw-r--r--src/ui/mail/EmailListEditor.cpp106
-rw-r--r--src/ui/mail/EmailListEditor.h85
-rw-r--r--src/ui/mail/IMAPFolder.cpp95
-rw-r--r--src/ui/mail/IMAPFolder.h91
-rw-r--r--src/ui/mail/RecipientsPicker.cpp80
-rw-r--r--src/ui/mail/RecipientsPicker.h68
-rw-r--r--src/ui/mail/SendMailDialog.cpp439
-rw-r--r--src/ui/mail/SendMailDialog.h132
-rw-r--r--src/ui/mail/SenderPicker.cpp81
-rw-r--r--src/ui/mail/SenderPicker.h66
-rw-r--r--src/ui/main_window/MainWindow.h7
-rw-r--r--src/ui/main_window/MainWindowSlotFunction.cpp33
-rw-r--r--src/ui/main_window/MainWindowUI.cpp32
-rw-r--r--src/ui/settings/SettingsDialog.cpp23
-rwxr-xr-xsrc/ui/settings/SettingsDialog.h15
-rw-r--r--src/ui/settings/SettingsSendMail.cpp313
-rw-r--r--src/ui/settings/SettingsSendMail.h119
-rw-r--r--src/ui/thread/CtxCheckThread.cpp50
-rw-r--r--src/ui/thread/CtxCheckThread.h60
-rw-r--r--src/ui/thread/SMTPConnectionTestThread.cpp48
-rw-r--r--src/ui/thread/SMTPConnectionTestThread.h93
-rw-r--r--src/ui/thread/SMTPSendMailThread.cpp263
-rw-r--r--src/ui/thread/SMTPSendMailThread.h179
-rw-r--r--src/ui/widgets/KeyList.cpp38
-rw-r--r--src/ui/widgets/KeyList.h2
32 files changed, 57 insertions, 2633 deletions
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index 001a776d..6016e45a 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -38,36 +38,13 @@ aux_source_directory(struct UI_SOURCE)
aux_source_directory(import_export UI_SOURCE)
aux_source_directory(dialog UI_SOURCE)
-if (SMTP_SUPPORT)
- aux_source_directory(mail UI_SOURCE)
-endif ()
-
# define libgpgfrontend_ui
-add_library(gpgfrontend_ui STATIC ${UI_SOURCE})
-
-# link smtp-mime
-if (SMTP_SUPPORT)
- target_link_libraries(gpgfrontend_ui
- smtp-mime)
-endif ()
+add_library(gpgfrontend_ui SHARED ${UI_SOURCE})
# link Qt
target_link_libraries(gpgfrontend_ui
Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core)
-# link vmime
-if (NOT LINUX)
- # macOS
- target_link_libraries(gpgfrontend_ui
- gpgfrontend_vmime intl iconv)
- if (MINGW)
- target_link_libraries(gpgfrontend_ui ws2_32)
- endif ()
-else ()
- target_link_libraries(gpgfrontend_ui
- gpgfrontend_vmime anl ssl crypto)
-endif ()
-
# link gpgfrontend_core
target_link_libraries(gpgfrontend_ui
gpgfrontend_core)
diff --git a/src/ui/GpgFrontendUI.h b/src/ui/GpgFrontendUI.h
index ab6e9366..df6d891f 100644
--- a/src/ui/GpgFrontendUI.h
+++ b/src/ui/GpgFrontendUI.h
@@ -42,7 +42,7 @@
* Project internal dependencies
*/
#include "GpgFrontend.h"
-#include "core/GpgConstants.h"
+#include "core/GpgFrontendCore.h"
#include "core/GpgModel.h"
/**
@@ -51,8 +51,4 @@
#include <qt-aes/qaesencryption.h>
-#ifdef SMTP_SUPPORT
-#include <SmtpMime>
-#endif
-
#endif // GPGFRONTEND_GPGFRONTENDUI_H
diff --git a/src/ui/mail/ReceiveMailDialog.h b/src/ui/GpgFrontendUIInit.cpp
index 2ccb2664..82746551 100644
--- a/src/ui/mail/ReceiveMailDialog.h
+++ b/src/ui/GpgFrontendUIInit.cpp
@@ -26,55 +26,39 @@
*
*/
-#ifndef GPGFRONTEND_RECEIVEMAILDIALOG_H
-#define GPGFRONTEND_RECEIVEMAILDIALOG_H
+#include "GpgFrontendUIInit.h"
-#include "ui/GpgFrontendUI.h"
+#include "core/function/GlobalSettingStation.h"
-class Ui_ReceiveMailDialog;
-
-namespace vmime::net {
-class folder;
-};
+// init easyloggingpp library
+INITIALIZE_EASYLOGGINGPP
namespace GpgFrontend::UI {
-class IMAPFolder;
+void init_logging() {
+ using namespace boost::posix_time;
+ using namespace boost::gregorian;
-/**
- * @brief
- *
- */
-class ReceiveMailDialog : public QDialog {
- Q_OBJECT
- public:
- /**
- * @brief Construct a new Receive Mail Dialog object
- *
- * @param parent
- */
- explicit ReceiveMailDialog(QWidget* parent);
+ ptime now = second_clock::local_time();
- private slots:
- /**
- * @brief
- *
- */
- void slot_refresh_data();
+ el::Loggers::addFlag(el::LoggingFlag::AutoSpacing);
+ el::Configurations defaultConf;
+ defaultConf.setToDefault();
+ el::Loggers::reconfigureLogger("default", defaultConf);
- private:
- std::shared_ptr<Ui_ReceiveMailDialog> ui_; ///<
- std::vector<std::shared_ptr<IMAPFolder>> folders_; ///<
+ // apply settings
+ defaultConf.setGlobally(el::ConfigurationType::Format,
+ "%datetime %level %func %msg");
- /**
- * @brief
- *
- * @param parent_folder
- */
- void list_sub_folders(IMAPFolder* parent_folder,
- const std::shared_ptr<vmime::net::folder>&);
-};
+ // get the log directory
+ auto logfile_path =
+ (GlobalSettingStation::GetInstance().GetLogDir() / to_iso_string(now));
+ logfile_path.replace_extension(".log");
+ defaultConf.setGlobally(el::ConfigurationType::Filename,
+ logfile_path.u8string());
-} // namespace GpgFrontend::UI
+ el::Loggers::reconfigureLogger("default", defaultConf);
-#endif // GPGFRONTEND_RECEIVEMAILDIALOG_H
+ LOG(INFO) << _("log file path") << logfile_path;
+}
+} // namespace GpgFrontend::UI \ No newline at end of file
diff --git a/src/ui/mail/ReceiveMailDialog.cpp b/src/ui/GpgFrontendUIInit.h
index 765e8baa..ddb791c3 100644
--- a/src/ui/mail/ReceiveMailDialog.cpp
+++ b/src/ui/GpgFrontendUIInit.h
@@ -26,17 +26,18 @@
*
*/
-#include "ReceiveMailDialog.h"
+#ifndef GPGFRONTEND_GPGFRONTENDUIINIT_H
+#define GPGFRONTEND_GPGFRONTENDUIINIT_H
-#include "ui_ReceiveMailDialog.h"
+#include "GpgFrontendUI.h"
-GpgFrontend::UI::ReceiveMailDialog::ReceiveMailDialog(QWidget *parent)
- : QDialog(parent), ui_(std::make_shared<Ui_ReceiveMailDialog>()) {
- ui_->setupUi(this);
-}
+namespace GpgFrontend::UI {
-void GpgFrontend::UI::ReceiveMailDialog::slot_refresh_data() {}
+/**
+ * @brief
+ */
+void init_logging();
+
+}; // namespace GpgFrontend::UI
-void GpgFrontend::UI::ReceiveMailDialog::list_sub_folders(
- GpgFrontend::UI::IMAPFolder *parent_folder,
- const std::shared_ptr<vmime::net::folder> &) {}
+#endif // GPGFRONTEND_GPGFRONTENDUIINIT_H
diff --git a/src/ui/KeyMgmt.cpp b/src/ui/KeyMgmt.cpp
index 57d8ba1f..30bc8a1b 100755
--- a/src/ui/KeyMgmt.cpp
+++ b/src/ui/KeyMgmt.cpp
@@ -42,6 +42,7 @@
#include "core/function/GlobalSettingStation.h"
namespace GpgFrontend::UI {
+
KeyMgmt::KeyMgmt(QWidget* parent) : QMainWindow(parent) {
/* the list of Keys available*/
key_list_ = new KeyList(KeyMenuAbility::ALL, this);
diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp
index 8353d28b..52b7eb28 100644
--- a/src/ui/UserInterfaceUtils.cpp
+++ b/src/ui/UserInterfaceUtils.cpp
@@ -30,13 +30,11 @@
#include <utility>
+#include "core/common/CoreCommonUtil.h"
#include "core/function/FileOperator.h"
-#include "core/function/result_analyse/GpgResultAnalyse.h"
+#include "core/function/GlobalSettingStation.h"
#include "ui/SignalStation.h"
#include "ui/dialog/WaitingDialog.h"
-#include "ui/mail/SendMailDialog.h"
-#include "core/function/GlobalSettingStation.h"
-#include "ui/widgets/InfoBoardWidget.h"
#include "ui/widgets/TextEdit.h"
namespace GpgFrontend::UI {
@@ -44,31 +42,6 @@ namespace GpgFrontend::UI {
std::unique_ptr<GpgFrontend::UI::CommonUtils>
GpgFrontend::UI::CommonUtils::instance_ = nullptr;
-#ifdef SMTP_SUPPORT
-void send_an_email(QWidget *parent, InfoBoardWidget *info_board,
- const QString &text, bool attach_signature) {
- info_board->AddOptionalAction(_("Send Encrypted Mail"), [=]() {
- bool smtp_enabled = false;
- try {
- smtp_enabled = GlobalSettingStation::GetInstance().GetUISettings().lookup(
- "smtp.enable");
- } catch (...) {
- LOG(INFO) << "Reading smtp settings error";
- }
- if (smtp_enabled) {
- auto dialog = new SendMailDialog(text, parent);
- dialog->SetContentEncryption(false);
- dialog->SetAttachSignature(attach_signature);
- dialog->show();
- } else {
- QMessageBox::warning(nullptr, _("Function Disabled"),
- _("Please go to the settings interface to "
- "enable and configure this function."));
- }
- });
-}
-#endif
-
void show_verify_details(QWidget *parent, InfoBoardWidget *info_board,
GpgError error, const GpgVerifyResult &verify_result) {
// take out result
@@ -156,6 +129,8 @@ CommonUtils *CommonUtils::GetInstance() {
}
CommonUtils::CommonUtils() : QWidget(nullptr) {
+ connect(CoreCommonUtil::GetInstance(), &CoreCommonUtil::SignalGnupgNotInstall,
+ this, &CommonUtils::SignalGnupgNotInstall);
connect(this, &CommonUtils::SignalKeyStatusUpdated,
SignalStation::GetInstance(),
&SignalStation::SignalKeyDatabaseRefresh);
@@ -252,7 +227,7 @@ void CommonUtils::SlotExecuteGpgCommand(
}
void CommonUtils::SlotImportKeyFromKeyServer(
- int ctx_channel, const KeyIdArgsList &key_ids,
+ const KeyIdArgsList &key_ids,
const ImportCallbackFunctiopn &callback) {
std::string target_keyserver;
if (target_keyserver.empty()) {
@@ -274,7 +249,7 @@ void CommonUtils::SlotImportKeyFromKeyServer(
}
auto thread =
- QThread::create([target_keyserver, key_ids, callback, ctx_channel]() {
+ QThread::create([target_keyserver, key_ids, callback]() {
QUrl target_keyserver_url(target_keyserver.c_str());
auto network_manager = std::make_unique<QNetworkAccessManager>();
@@ -323,7 +298,7 @@ void CommonUtils::SlotImportKeyFromKeyServer(
// Try importing
GpgImportInformation result =
- GpgKeyImportExporter::GetInstance(ctx_channel)
+ GpgKeyImportExporter::GetInstance()
.ImportKey(std::move(key_data_ptr));
if (result.imported == 1) {
diff --git a/src/ui/UserInterfaceUtils.h b/src/ui/UserInterfaceUtils.h
index 9d73e9b5..a7f20f10 100644
--- a/src/ui/UserInterfaceUtils.h
+++ b/src/ui/UserInterfaceUtils.h
@@ -42,18 +42,6 @@ namespace GpgFrontend::UI {
class InfoBoardWidget;
class TextEdit;
-#ifdef SMTP_SUPPORT
-/**
- * @brief
- *
- * @param parent
- * @param info_board
- * @param text
- * @param attach_signature
- */
-void send_an_email(QWidget* parent, InfoBoardWidget* info_board,
- const QString& text, bool attach_signature = true);
-#endif
/**
* @brief
*
@@ -194,7 +182,7 @@ class CommonUtils : public QWidget {
* @param callback
*/
static void SlotImportKeyFromKeyServer(
- int ctx_channel, const GpgFrontend::KeyIdArgsList& key_ids,
+ const GpgFrontend::KeyIdArgsList& key_ids,
const GpgFrontend::UI::CommonUtils::ImportCallbackFunctiopn& callback);
/**
diff --git a/src/ui/mail/EmailListEditor.cpp b/src/ui/mail/EmailListEditor.cpp
deleted file mode 100644
index b5147115..00000000
--- a/src/ui/mail/EmailListEditor.cpp
+++ /dev/null
@@ -1,106 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "EmailListEditor.h"
-
-#include "ui_EmailListEditor.h"
-
-GpgFrontend::UI::EmailListEditor::EmailListEditor(const QString& email_list,
- QWidget* parent)
- : QDialog(parent), ui_(std::make_shared<Ui_EmailListEditorDialog>()) {
- ui_->setupUi(this);
-
- QStringList email_string_list = email_list.split(';');
-
- if (!email_string_list.isEmpty()) {
- for (const auto& recipient : email_string_list) {
- auto _recipient = recipient.trimmed();
- if (check_email_address(_recipient)) {
- auto item = new QListWidgetItem(_recipient);
- ui_->emaillistWidget->addItem(item);
- item->setFlags(item->flags() | Qt::ItemIsEditable);
- }
- }
- }
-
- connect(ui_->addEmailAddressButton, &QPushButton::clicked, this, [=]() {
- auto item = new QListWidgetItem("new email address");
- ui_->emaillistWidget->addItem(item);
- item->setFlags(item->flags() | Qt::ItemIsEditable);
- });
-
- connect(ui_->actionDelete_Selected_Email_Address, &QAction::triggered, this,
- [=]() {
- const auto row_size = ui_->emaillistWidget->count();
- for (int i = 0; i < row_size; i++) {
- auto item = ui_->emaillistWidget->item(i);
- if (!item->isSelected()) continue;
- delete ui_->emaillistWidget->takeItem(
- ui_->emaillistWidget->row(item));
- break;
- }
- });
-
- ui_->titleLabel->setText(_("Email List:"));
- ui_->tipsLabel->setText(
- _("Tips: You can double-click the email address in the edit list, or "
- "click the email to pop up the option menu."));
- ui_->addEmailAddressButton->setText(_("Add An Email Address"));
- this->setWindowTitle(_("Email List Editor"));
- ui_->actionDelete_Selected_Email_Address->setText(_("Delete"));
-
- popup_menu_ = new QMenu(this);
- popup_menu_->addAction(ui_->actionDelete_Selected_Email_Address);
-
- this->exec();
-}
-
-bool GpgFrontend::UI::EmailListEditor::check_email_address(
- const QString& email_address) {
- return re_email_.match(email_address).hasMatch();
-}
-
-QString GpgFrontend::UI::EmailListEditor::GetEmailList() {
- QString email_list;
- for (int i = 0; i < ui_->emaillistWidget->count(); ++i) {
- QListWidgetItem* item = ui_->emaillistWidget->item(i);
- if (check_email_address(item->text())) {
- email_list.append(item->text());
- email_list.append("; ");
- }
- }
- return email_list;
-}
-
-void GpgFrontend::UI::EmailListEditor::contextMenuEvent(
- QContextMenuEvent* event) {
- QWidget::contextMenuEvent(event);
- if (ui_->emaillistWidget->selectedItems().length() > 0) {
- popup_menu_->exec(event->globalPos());
- }
-}
diff --git a/src/ui/mail/EmailListEditor.h b/src/ui/mail/EmailListEditor.h
deleted file mode 100644
index b716ff66..00000000
--- a/src/ui/mail/EmailListEditor.h
+++ /dev/null
@@ -1,85 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#ifndef GPGFRONTEND_EMAILLISTEDITOR_H
-#define GPGFRONTEND_EMAILLISTEDITOR_H
-
-#include "GpgFrontendUI.h"
-
-class Ui_EmailListEditorDialog;
-
-namespace GpgFrontend::UI {
-/**
- * @brief
- *
- */
-class EmailListEditor : public QDialog {
- Q_OBJECT
-
- public:
- /**
- * @brief Construct a new Email List Editor object
- *
- * @param email_list
- * @param parent
- */
- explicit EmailListEditor(const QString& email_list, QWidget* parent);
-
- /**
- * @brief Get the Email List object
- *
- * @return QString
- */
- QString GetEmailList();
-
- private:
- std::shared_ptr<Ui_EmailListEditorDialog> ui_; ///<
- QMenu* popup_menu_{}; ///<
- QRegularExpression re_email_{
- R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"};
-
- /**
- * @brief
- *
- * @param email_address
- * @return true
- * @return false
- */
- bool check_email_address(const QString& email_address);
-
- protected:
- /**
- * @brief
- *
- * @param event
- */
- void contextMenuEvent(QContextMenuEvent* event) override;
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_EMAILLISTEDITOR_H
diff --git a/src/ui/mail/IMAPFolder.cpp b/src/ui/mail/IMAPFolder.cpp
deleted file mode 100644
index 68a894f7..00000000
--- a/src/ui/mail/IMAPFolder.cpp
+++ /dev/null
@@ -1,95 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "IMAPFolder.h"
-
-#include <utility>
-#include <vmime/vmime.hpp>
-
-GpgFrontend::UI::IMAPFolder::IMAPFolder(
- std::shared_ptr<vmime::net::folder> folder)
- : folder_(std::move(folder)),
- tree_node_(new QTreeWidgetItem(static_cast<QTreeWidget *>(nullptr),
- {"server"})) {
- const std::string folder_name = folder_->getName().getBuffer();
- LOG(INFO) << "folder" << folder_name;
-
- const vmime::net::folderAttributes attr = folder_->getAttributes();
- std::ostringstream attrStr;
-
- tree_node_->setIcon(0, QIcon(":folder.png"));
- if (attr.getSpecialUse() == vmime::net::folderAttributes::SPECIALUSE_ALL) {
- LOG(INFO) << "use:All";
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_ARCHIVE) {
- tree_node_->setIcon(0, QIcon(":archive.png"));
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_DRAFTS) {
- tree_node_->setIcon(0, QIcon(":drafts.png"));
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_FLAGGED) {
- tree_node_->setIcon(0, QIcon(":flag.png"));
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_JUNK) {
- tree_node_->setIcon(0, QIcon(":junk.png"));
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_SENT) {
- tree_node_->setIcon(0, QIcon(":sent.png"));
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_TRASH) {
- tree_node_->setIcon(0, QIcon(":trash.png"));
- } else if (attr.getSpecialUse() ==
- vmime::net::folderAttributes::SPECIALUSE_IMPORTANT) {
- tree_node_->setIcon(0, QIcon(":importance.png"));
- }
-
- if (attr.getFlags() & vmime::net::folderAttributes::FLAG_HAS_CHILDREN) {
- LOG(INFO) << " flag:HasChildren";
- }
- if (attr.getFlags() & vmime::net::folderAttributes::FLAG_NO_OPEN) {
- LOG(INFO) << " flag:NoOpen";
- // tree_node_->setDisabled(true);
- }
-
- if (!folder_name.empty())
- tree_node_->setText(0, folder_name.c_str());
- else
- tree_node_->setIcon(0, QIcon(":server.png"));
-}
-
-void GpgFrontend::UI::IMAPFolder::SetParentFolder(IMAPFolder *parent_folder) {
- parent_folder->GetTreeWidgetItem()->addChild(tree_node_);
-}
-
-QTreeWidgetItem *GpgFrontend::UI::IMAPFolder::GetTreeWidgetItem() {
- return tree_node_;
-}
-
-vmime::net::folder *GpgFrontend::UI::IMAPFolder::GetVmimeFolder() {
- return folder_.get();
-}
diff --git a/src/ui/mail/IMAPFolder.h b/src/ui/mail/IMAPFolder.h
deleted file mode 100644
index 7dc52438..00000000
--- a/src/ui/mail/IMAPFolder.h
+++ /dev/null
@@ -1,91 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-#ifndef GPGFRONTEND_IMAPFOLDER_H
-#define GPGFRONTEND_IMAPFOLDER_H
-
-#include "GpgFrontendUI.h"
-
-namespace vmime::net {
-class folder;
-};
-
-namespace GpgFrontend::UI {
-/**
- * @brief
- *
- */
-class IMAPFolder {
- public:
- /**
- * @brief Construct a new IMAPFolder object
- *
- * @param folder
- */
- explicit IMAPFolder(std::shared_ptr<vmime::net::folder> folder);
-
- /**
- * @brief Copy and construct the IMAPFolder object
- */
- IMAPFolder(const IMAPFolder &) = default;
-
- /**
- * @brief Copy the IMAPFolder object
- *
- * @return
- */
- IMAPFolder &operator=(const IMAPFolder &) = default;
-
-
- /**
- * @brief Set the Parent Folder object
- *
- * @param parent_node
- */
- void SetParentFolder(IMAPFolder* parent_node);
-
- /**
- * @brief Get the Tree Widget Item object
- *
- * @return QTreeWidgetItem*
- */
- QTreeWidgetItem* GetTreeWidgetItem();
-
- /**
- * @brief Get the Vmime Folder object
- *
- * @return vmime::net::folder*
- */
- vmime::net::folder* GetVmimeFolder();
-
- private:
- std::shared_ptr<vmime::net::folder> folder_; ///<
- QTreeWidgetItem* tree_node_; ///<
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_IMAPFOLDER_H
diff --git a/src/ui/mail/RecipientsPicker.cpp b/src/ui/mail/RecipientsPicker.cpp
deleted file mode 100644
index d6b8bcc5..00000000
--- a/src/ui/mail/RecipientsPicker.cpp
+++ /dev/null
@@ -1,80 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "RecipientsPicker.h"
-
-#include "ui/widgets/KeyList.h"
-
-GpgFrontend::UI::RecipientsPicker::RecipientsPicker(
- const GpgFrontend::KeyIdArgsListPtr& current_key_ids, QWidget* parent)
- : QDialog(parent) {
- auto confirm_button = new QPushButton(_("Confirm"));
- connect(confirm_button,&QPushButton::clicked, this, &RecipientsPicker::accept);
-
- // Setup KeyList
- key_list_ = new KeyList(KeyMenuAbility::NONE, this);
- key_list_->AddListGroupTab(
- _("Recipient(s)"), KeyListRow::SECRET_OR_PUBLIC_KEY,
- KeyListColumn::NAME | KeyListColumn::EmailAddress,
- [](const GpgKey& key) -> bool {
- return !key.IsPrivateKey() && key.IsHasActualEncryptionCapability();
- });
- key_list_->SlotRefresh();
-
- auto key_ids = std::make_unique<GpgFrontend::KeyIdArgsList>();
- for (const auto& key_id : *current_key_ids) {
- key_ids->push_back(key_id);
- }
- key_list_->SetChecked(std::move(key_ids));
-
- auto* vbox2 = new QVBoxLayout();
- vbox2->addWidget(new QLabel(QString(_("Select Recipient(s)")) + ": "));
- vbox2->addWidget(key_list_);
- vbox2->addWidget(new QLabel(
- QString(_("We use the public key provided by the recipient to encrypt "
- "the text.")) +
- "\n" +
- _("If you want to send to multiple recipients at the same time, you can "
- "select multiple keys.")));
- vbox2->addWidget(confirm_button);
- vbox2->addStretch(0);
- setLayout(vbox2);
-
- this->setWindowFlags(Qt::Window | Qt::WindowTitleHint |
- Qt::CustomizeWindowHint);
-
- this->setModal(true);
- this->setWindowTitle("Recipient(s) Picker");
- this->setMinimumWidth(480);
- this->exec();
-}
-
-GpgFrontend::KeyIdArgsListPtr
-GpgFrontend::UI::RecipientsPicker::GetCheckedRecipients() {
- return key_list_->GetChecked();
-}
diff --git a/src/ui/mail/RecipientsPicker.h b/src/ui/mail/RecipientsPicker.h
deleted file mode 100644
index 252bbd58..00000000
--- a/src/ui/mail/RecipientsPicker.h
+++ /dev/null
@@ -1,68 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#ifndef GPGFRONTEND_RECIPENTSPICKER_H
-#define GPGFRONTEND_RECIPENTSPICKER_H
-
-#include "GpgFrontendUI.h"
-
-namespace GpgFrontend::UI {
-
-class KeyList;
-
-/**
- * @brief
- *
- */
-class RecipientsPicker : public QDialog {
- Q_OBJECT
-
- public:
- /**
- * @brief Construct a new Recipients Picker object
- *
- * @param current_key_ids
- * @param parent
- */
- explicit RecipientsPicker(
- const GpgFrontend::KeyIdArgsListPtr& current_key_ids,
- QWidget* parent = nullptr);
-
- /**
- * @brief Get the Checked Recipients object
- *
- * @return GpgFrontend::KeyIdArgsListPtr
- */
- GpgFrontend::KeyIdArgsListPtr GetCheckedRecipients();
-
- private:
- KeyList* key_list_; ///<
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_RECIPENTSPICKER_H
diff --git a/src/ui/mail/SendMailDialog.cpp b/src/ui/mail/SendMailDialog.cpp
deleted file mode 100644
index 137c941f..00000000
--- a/src/ui/mail/SendMailDialog.cpp
+++ /dev/null
@@ -1,439 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "SendMailDialog.h"
-
-#include "core/function/gpg/GpgKeyGetter.h"
-#include "ui/mail/EmailListEditor.h"
-#include "ui/mail/RecipientsPicker.h"
-#include "ui/mail/SenderPicker.h"
-#include "ui_SendMailDialog.h"
-
-#ifdef SMTP_SUPPORT
-#include "core/function/GlobalSettingStation.h"
-#include "ui/thread/SMTPSendMailThread.h"
-#endif
-
-namespace GpgFrontend::UI {
-
-SendMailDialog::SendMailDialog(const QString& text, QWidget* parent)
- : QDialog(parent), ui_(std::make_shared<Ui_SendMailDialog>()) {
- // read from settings
- init_settings();
-
- if (smtp_address_.isEmpty()) {
- QMessageBox::critical(
- this->parentWidget(), _("Incomplete configuration"),
- _("The SMTP address is empty, please go to the setting interface to "
- "complete the configuration."));
-
- deleteLater();
- return;
- }
-
- ui_->setupUi(this);
-
- ui_->ccInputWidget->setHidden(true);
- ui_->bccInputWidget->setHidden(true);
- ui_->textEdit->setText(text);
- ui_->errorLabel->setHidden(true);
-
- ui_->senderEdit->setText(default_sender_);
-
- if (!default_sender_gpg_key_id_.isEmpty()) {
- auto key = GpgKeyGetter::GetInstance().GetKey(
- default_sender_gpg_key_id_.toStdString());
- if (key.IsGood() && key.IsPrivateKey() &&
- key.IsHasActualSigningCapability()) {
- sender_key_id_ = key.GetId();
- set_sender_value_label();
- }
- }
-
- connect(ui_->ccButton, &QPushButton::clicked, [=]() {
- ui_->ccInputWidget->setHidden(!ui_->ccInputWidget->isHidden());
- ui_->ccEdit->clear();
- });
- connect(ui_->bccButton, &QPushButton::clicked, [=]() {
- ui_->bccInputWidget->setHidden(!ui_->bccInputWidget->isHidden());
- ui_->bccEdit->clear();
- });
-
-#ifdef SMTP_SUPPORT
- connect(ui_->sendMailButton, &QPushButton::clicked, this,
- &SendMailDialog::slot_confirm);
-#endif
-
- connect(ui_->senderKeySelectButton, &QPushButton::clicked, this, [=]() {
- auto picker = new SenderPicker(sender_key_id_, this);
- sender_key_id_ = picker->GetCheckedSender();
- set_sender_value_label();
- });
-
- connect(ui_->recipientKeySelectButton, &QPushButton::clicked, this, [=]() {
- auto picker = new RecipientsPicker(recipients_key_ids_, this);
- recipients_key_ids_ = picker->GetCheckedRecipients();
- set_recipients_value_label();
- });
-
- connect(ui_->recipientsEditButton, &QPushButton::clicked, this, [=]() {
- auto editor = new EmailListEditor(ui_->recipientEdit->text(), this);
- ui_->recipientEdit->setText(editor->GetEmailList());
- });
-
- connect(ui_->ccEditButton, &QPushButton::clicked, this, [=]() {
- auto editor = new EmailListEditor(ui_->ccEdit->text(), this);
- ui_->ccEdit->setText(editor->GetEmailList());
- });
-
- connect(ui_->bccEditButton, &QPushButton::clicked, this, [=]() {
- auto editor = new EmailListEditor(ui_->bccEdit->text(), this);
- ui_->bccEdit->setText(editor->GetEmailList());
- });
-
- ui_->ccButton->setText(_("CC"));
- ui_->bccButton->setText(_("BCC"));
- ui_->senderLabel->setText(_("Sender"));
- ui_->recipientLabel->setText(_("Recipient"));
- ui_->subjectLabel->setText(_("Mail Subject"));
- ui_->bccLabel->setText(_("BCC"));
- ui_->ccLabel->setText(_("CC"));
- ui_->tipsLabel->setText(
- _("Tips: You can fill in multiple email addresses, please separate them "
- "with \";\"."));
- ui_->sendMailButton->setText(_("Send Message"));
- ui_->senderKeySelectButton->setText(_("Select Sender GPG Key"));
- ui_->recipientKeySelectButton->setText(_("Select Recipient(s) GPG Key"));
- ui_->gpgOperaLabel->setText(_("GPG Operations"));
- ui_->attacSignatureCheckBox->setText(_("Attach signature"));
- ui_->attachSenderPublickeyCheckBox->setText(_("Attach sender's public key"));
- ui_->contentEncryptCheckBox->setText(_("Encrypt content"));
- ui_->recipientsEditButton->setText(_("Edit Recipients(s)"));
- ui_->ccEditButton->setText(_("Edit CC(s)"));
- ui_->bccEditButton->setText(_("Edit BCC(s)"));
- ui_->senderKeyLabel->setText(_("Sender GPG Key: "));
- ui_->recipientKeysLabel->setText(_("Recipient(s) GPG Key: "));
-
- auto pos = QPoint(100, 100);
- LOG(INFO) << "parent" << parent;
- if (parent) pos += parent->pos();
- LOG(INFO) << "pos default" << pos.x() << pos.y();
-
- move(pos);
-
- this->setWindowTitle(_("New Message"));
- this->setAttribute(Qt::WA_DeleteOnClose);
-}
-
-bool SendMailDialog::check_email_address(const QString& str) {
- return re_email_.match(str).hasMatch();
-}
-
-#ifdef SMTP_SUPPORT
-
-void SendMailDialog::slot_confirm() {
- QString errString;
- ui_->errorLabel->clear();
- ui_->errorLabel->setHidden(true);
- QStringList rcpt_string_list = ui_->recipientEdit->text().split(';');
- QStringList cc_string_list = ui_->ccEdit->text().split(';');
- QStringList bcc_string_list = ui_->bccEdit->text().split(';');
-
- if (rcpt_string_list.isEmpty()) {
- errString.append(QString(" ") + _("Recipient cannot be empty") + " \n");
- } else {
- for (const auto& reci : rcpt_string_list) {
- LOG(INFO) << "Receiver" << reci.trimmed().toStdString();
- if (!check_email_address(reci.trimmed())) {
- errString.append(QString(" ") +
- _("One or more recipient's email is invalid") +
- " \n");
- break;
- }
- }
- }
- if (ui_->senderEdit->text().isEmpty()) {
- errString.append(QString(" ") + _("Sender cannot be empty") + " \n");
- } else if (!check_email_address(ui_->senderEdit->text())) {
- errString.append(QString(" ") + _("Sender's email is invalid") + " \n");
- }
-
- if (ui_->subjectEdit->text().isEmpty()) {
- errString.append(QString(" ") + _("Subject cannot be empty") + " \n");
- }
-
- if (!ui_->ccEdit->text().isEmpty())
- for (const auto& cc : cc_string_list) {
- LOG(INFO) << "cc" << cc.trimmed().toStdString();
- if (!check_email_address(cc.trimmed())) {
- errString.append(QString(" ") + _("One or more cc email is invalid") +
- " \n");
- break;
- }
- }
-
- if (!ui_->bccEdit->text().isEmpty())
- for (const auto& bcc : bcc_string_list) {
- LOG(INFO) << "bcc" << bcc.trimmed().toStdString();
- if (!check_email_address(bcc.trimmed())) {
- errString.append(QString(" ") + _("One or more bcc email is invalid") +
- " \n");
- break;
- }
- }
-
- if (!errString.isEmpty()) {
- ui_->errorLabel->setAutoFillBackground(true);
- QPalette error = ui_->errorLabel->palette();
- error.setColor(QPalette::Window, "#ff8080");
- ui_->errorLabel->setPalette(error);
- ui_->errorLabel->setText(errString);
- ui_->errorLabel->setHidden(false);
- return;
- }
-
- SmtpClient::ConnectionType connection_type_ =
- SmtpClient::ConnectionType::TcpConnection;
-
- if (connection_type_settings_ == "SSL") {
- connection_type_ = SmtpClient::ConnectionType::SslConnection;
- } else if (connection_type_settings_ == "TLS") {
- connection_type_ = SmtpClient::ConnectionType::TlsConnection;
- } else if (connection_type_settings_ == "STARTTLS") {
- connection_type_ = SmtpClient::ConnectionType::TlsConnection;
- } else {
- connection_type_ = SmtpClient::ConnectionType::TcpConnection;
- }
-
- auto host = smtp_address_.toStdString();
- auto port = port_;
- auto connection_type = connection_type_;
- bool identity_needed = identity_enable_;
- auto username = username_.toStdString();
- auto password = password_.toStdString();
- auto sender_address = ui_->senderEdit->text().toStdString();
-
- auto thread = new SMTPSendMailThread(
- host, port, connection_type, identity_needed, username, password, this);
-
- thread->SetSender(ui_->senderEdit->text());
- thread->SetRecipient(ui_->recipientEdit->text());
- thread->SetCC(ui_->ccEdit->text());
- thread->SetBCC(ui_->bccEdit->text());
- thread->SetSubject(ui_->subjectEdit->text());
- thread->AddTextContent(ui_->textEdit->toPlainText());
-
- if (ui_->contentEncryptCheckBox->checkState() == Qt::Checked) {
- if (recipients_key_ids_ == nullptr || recipients_key_ids_->empty()) {
- QMessageBox::critical(
- this, _("Forbidden"),
- _("You have checked the encrypted email content, but you have not "
- "selected the recipient's GPG key. This is dangerous and the mail "
- "will not be encrypted. So the send operation is forbidden"));
- return;
- } else {
- auto key_ids = std::make_unique<KeyIdArgsList>();
- for (const auto& key_id : *recipients_key_ids_)
- key_ids->push_back(key_id);
- thread->SetEncryptContent(true, std::move(key_ids));
- }
- }
-
- if (ui_->attacSignatureCheckBox->checkState() == Qt::Checked) {
- if (sender_key_id_.empty()) {
- QMessageBox::critical(
- this, _("Forbidden"),
- _("You checked the option to attach signature to the email, but did "
- "not specify the sender's GPG Key. This will cause the content of "
- "the email to be inconsistent with your expectations, so the "
- "operation is prohibited."));
- return;
- } else {
- thread->SetAttachSignatureFile(true, sender_key_id_);
- }
- }
-
- if (ui_->attachSenderPublickeyCheckBox->checkState() == Qt::Checked) {
- if (sender_key_id_.empty()) {
- QMessageBox::critical(
- this, _("Forbidden"),
- _("You checked the option to attach your public key to the email, "
- "but did not specify the sender's GPG Key. This will cause the "
- "content of "
- "the email to be inconsistent "
- "with your expectations, so the operation is prohibited."));
- return;
- } else {
- thread->SetAttachPublicKey(true, sender_key_id_);
- }
- }
-
- // Waiting Dialog
- auto* waiting_dialog = new QProgressDialog(this);
- waiting_dialog->setMaximum(0);
- waiting_dialog->setMinimum(0);
- auto waiting_dialog_label =
- new QLabel(QString(_("Sending Email...")) + "<br /><br />" +
- _("If the process does not end for a long time, please check "
- "again whether your SMTP server configuration is correct."));
- waiting_dialog_label->setWordWrap(true);
- waiting_dialog->setLabel(waiting_dialog_label);
- waiting_dialog->resize(420, 120);
- connect(thread, &SMTPSendMailThread::SignalSMTPResult, this,
- &SendMailDialog::slot_test_smtp_connection_result);
- 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 SendMailDialog::init_settings() {
- auto& settings = GlobalSettingStation::GetInstance().GetUISettings();
-
- try {
- ability_enable_ = settings.lookup("smtp.enable");
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("save_key_checked");
- }
-
- try {
- identity_enable_ = settings.lookup("smtp.identity_enable");
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("identity_enable");
- }
-
- try {
- smtp_address_ = settings.lookup("smtp.mail_address").c_str();
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("mail_address");
- }
-
- try {
- username_ = settings.lookup("smtp.username").c_str();
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("username");
- }
-
- try {
- password_ = settings.lookup("smtp.password").c_str();
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("password");
- }
-
- try {
- port_ = settings.lookup("smtp.port");
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("port");
- }
-
- try {
- connection_type_settings_ = settings.lookup("smtp.connection_type").c_str();
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("connection_type");
- }
-
- try {
- default_sender_ = settings.lookup("smtp.default_sender").c_str();
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error") << _("default_sender");
- }
-
- try {
- default_sender_gpg_key_id_ =
- settings.lookup("smtp.default_sender_gpg_key_id").c_str();
- } catch (...) {
- LOG(ERROR) << _("Setting Operation Error")
- << _("default_sender_gpg_key_id");
- }
-}
-#endif
-
-void SendMailDialog::set_sender_value_label() {
- auto key = GpgKeyGetter::GetInstance().GetKey(sender_key_id_);
- if (key.IsGood()) {
- ui_->senderKeyValueLabel->setText(key.GetUIDs()->front().GetUID().c_str());
- }
-}
-
-void SendMailDialog::set_recipients_value_label() {
- auto keys = GpgKeyGetter::GetInstance().GetKeys(recipients_key_ids_);
- std::stringstream ss;
- for (const auto& key : *keys) {
- if (key.IsGood()) {
- ss << key.GetUIDs()->front().GetUID().c_str() << ";";
- }
- }
- ui_->recipientsKeyValueLabel->setText(ss.str().c_str());
-}
-
-void SendMailDialog::slot_test_smtp_connection_result(const QString& result) {
- if (result == "Fail to connect SMTP server") {
- QMessageBox::critical(this, _("Fail"), _("Fail to Connect SMTP Server."));
- } else if (result == "Fail to login") {
- QMessageBox::critical(this, _("Fail"), _("Fail to Login."));
- } else if (result == "Fail to send mail") {
- QMessageBox::critical(this, _("Fail"), _("Fail to Login."));
- } else if (result == "Succeed in testing connection") {
- QMessageBox::information(this, _("Success"),
- _("Succeed in connecting and login"));
- } else if (result == "Succeed in sending a test email") {
- QMessageBox::information(
- this, _("Success"),
- _("Succeed in sending the message to the SMTP Server"));
- } else if (result == "Fail to encrypt with gpg keys") {
- QMessageBox::critical(
- this, _("Encryption Error"),
- _("An error occurred while encrypting the content of the email. This "
- "may be because you did not complete some operations during Gnupg "
- "encryption."));
- } else {
- QMessageBox::critical(this, _("Fail"), _("Unknown error."));
- }
-}
-void SendMailDialog::SetContentEncryption(bool on) {
- ui_->contentEncryptCheckBox->setCheckState(on ? Qt::Checked : Qt::Unchecked);
-}
-
-void SendMailDialog::SetAttachSignature(bool on) {
- ui_->attacSignatureCheckBox->setCheckState(on ? Qt::Checked : Qt::Unchecked);
-}
-
-} // namespace GpgFrontend::UI
diff --git a/src/ui/mail/SendMailDialog.h b/src/ui/mail/SendMailDialog.h
deleted file mode 100644
index 3d745e11..00000000
--- a/src/ui/mail/SendMailDialog.h
+++ /dev/null
@@ -1,132 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#ifndef GPGFRONTEND_SENDMAILDIALOG_H
-#define GPGFRONTEND_SENDMAILDIALOG_H
-
-#include "ui/GpgFrontendUI.h"
-
-class Ui_SendMailDialog;
-
-namespace GpgFrontend::UI {
-
-/**
- * @brief
- *
- */
-class SendMailDialog : public QDialog {
- Q_OBJECT
- public:
- /**
- * @brief Construct a new Send Mail Dialog object
- *
- * @param text
- * @param parent
- */
- explicit SendMailDialog(const QString& text, QWidget* parent = nullptr);
-
- /**
- * @brief Set the Content Encryption object
- *
- * @param on
- */
- void SetContentEncryption(bool on);
-
- /**
- * @brief Set the Attach Signature object
- *
- * @param on
- */
- void SetAttachSignature(bool on);
-
- private slots:
-
- /**
- * @brief
- *
- */
- void slot_confirm();
-
- /**
- * @brief
- *
- * @param result
- */
- void slot_test_smtp_connection_result(const QString& result);
-
- private:
- /**
- * @brief
- *
- */
- void init_settings();
-
- std::shared_ptr<Ui_SendMailDialog> ui_; ///<
-
- bool ability_enable_ = false; ///<
- bool identity_enable_ = false; ///<
- QString smtp_address_; ///<
- QString username_; ///<
- QString password_; ///<
- QString default_sender_; ///<
- QString connection_type_settings_ = "None"; ///<
- QString default_sender_gpg_key_id_ = {}; ///<
- int port_ = 25; ///<
-
- GpgFrontend::KeyId sender_key_id_; ///<
- GpgFrontend::KeyIdArgsListPtr recipients_key_ids_ =
- std::make_unique<GpgFrontend::KeyIdArgsList>(); ///<
-
- QRegularExpression re_email_{
- R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"};
-
- /**
- * @brief
- *
- * @param str
- * @return true
- * @return false
- */
- bool check_email_address(const QString& str);
-
- /**
- * @brief Set the sender value label object
- *
- */
- void set_sender_value_label();
-
- /**
- * @brief Set the recipients value label object
- *
- */
- void set_recipients_value_label();
-};
-
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_SENDMAILDIALOG_H
diff --git a/src/ui/mail/SenderPicker.cpp b/src/ui/mail/SenderPicker.cpp
deleted file mode 100644
index e3563480..00000000
--- a/src/ui/mail/SenderPicker.cpp
+++ /dev/null
@@ -1,81 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "SenderPicker.h"
-
-#include "ui/widgets/KeyList.h"
-
-GpgFrontend::UI::SenderPicker::SenderPicker(const KeyId& current_key_id,
- QWidget* parent)
- : QDialog(parent) {
- auto confirm_button = new QPushButton(_("Confirm"));
- connect(confirm_button, &QPushButton::clicked, this, &SenderPicker::accept);
-
- // Setup KeyList
- key_list_ = new KeyList(KeyMenuAbility::NONE, this);
- key_list_->AddListGroupTab(_("Sender"), KeyListRow::ONLY_SECRET_KEY,
- KeyListColumn::NAME | KeyListColumn::EmailAddress,
- [](const GpgKey& key) -> bool {
- return key.IsHasActualSigningCapability();
- });
- key_list_->SlotRefresh();
-
- auto key_ids = std::make_unique<GpgFrontend::KeyIdArgsList>();
- key_ids->push_back(current_key_id);
- key_list_->SetChecked(std::move(key_ids));
-
- auto* vbox2 = new QVBoxLayout();
- vbox2->addWidget(new QLabel(QString(_("Select Sender")) + ": "));
- vbox2->addWidget(key_list_);
- vbox2->addWidget(new QLabel(
- QString(
- _("As the sender of the mail, the private key is generally used.")) +
- "\n" +
- _(" The private key is generally used as a signature for the content of "
- "the mail.")));
- vbox2->addWidget(confirm_button);
- vbox2->addStretch(0);
- setLayout(vbox2);
-
- this->setWindowFlags(Qt::Window | Qt::WindowTitleHint |
- Qt::CustomizeWindowHint);
-
- this->setModal(true);
- this->setWindowTitle("Sender Picker");
- this->setMinimumWidth(480);
- this->exec();
-}
-
-GpgFrontend::KeyId GpgFrontend::UI::SenderPicker::GetCheckedSender() {
- auto checked_keys = key_list_->GetChecked();
- if (!checked_keys->empty()) {
- return key_list_->GetChecked()->front();
- } else {
- return {};
- }
-}
diff --git a/src/ui/mail/SenderPicker.h b/src/ui/mail/SenderPicker.h
deleted file mode 100644
index ce8cd8e6..00000000
--- a/src/ui/mail/SenderPicker.h
+++ /dev/null
@@ -1,66 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#ifndef GPGFRONTEND_SENDERPICKER_H
-#define GPGFRONTEND_SENDERPICKER_H
-
-#include "GpgFrontendUI.h"
-
-namespace GpgFrontend::UI {
-
-class KeyList;
-
-/**
- * @brief
- *
- */
-class SenderPicker : public QDialog {
- Q_OBJECT
-
- public:
- /**
- * @brief Construct a new Sender Picker object
- *
- * @param current_key_id
- * @param parent
- */
- explicit SenderPicker(const KeyId& current_key_id, QWidget* parent = nullptr);
-
- /**
- * @brief Get the Checked Sender object
- *
- * @return GpgFrontend::KeyId
- */
- GpgFrontend::KeyId GetCheckedSender();
-
- private:
- KeyList* key_list_; ///<
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_SENDERPICKER_H
diff --git a/src/ui/main_window/MainWindow.h b/src/ui/main_window/MainWindow.h
index 5cc9a15a..c5ba02a2 100644
--- a/src/ui/main_window/MainWindow.h
+++ b/src/ui/main_window/MainWindow.h
@@ -341,7 +341,6 @@ class MainWindow : public QMainWindow {
QToolBar*
special_edit_tool_bar_{}; ///< Toolbar holding special edit actions
QToolBar* key_tool_bar_{}; ///< Toolbar holding key operations
- QToolBar* email_tool_bar_{}; ///< Toolbar holding key operations
QToolButton*
import_button_{}; ///< Tool button for import dropdown menu in toolbar
QDockWidget* key_list_dock_{}; ///< Encrypt Dock
@@ -391,12 +390,6 @@ class MainWindow : public QMainWindow {
QAction* start_wizard_act_{}; ///< Action to open the wizard
QAction* cut_pgp_header_act_{}; ///< Action for cutting the PGP header
QAction* add_pgp_header_act_{}; ///< Action for adding the PGP header
-
-#ifdef SMTP_SUPPORT
- QAction* send_mail_act_{}; ///< Action for sending a email
- QAction* receive_mail_act_{}; ///< Action for receive emails
-#endif
-
QAction* import_key_from_file_act_{}; ///<
QAction* import_key_from_clipboard_act_{}; ///<
QAction* import_key_from_key_server_act_{}; ///<
diff --git a/src/ui/main_window/MainWindowSlotFunction.cpp b/src/ui/main_window/MainWindowSlotFunction.cpp
index f25d696a..0a322f6a 100644
--- a/src/ui/main_window/MainWindowSlotFunction.cpp
+++ b/src/ui/main_window/MainWindowSlotFunction.cpp
@@ -28,17 +28,6 @@
#include "MainWindow.h"
-#ifdef ADVANCE_SUPPORT
-#include "advance/UnknownSignersChecker.h"
-#endif
-#ifdef SERVER_SUPPORT
-#include "server/api/PubkeyUploader.h"
-#endif
-
-#ifdef SMTP_SUPPORT
-#include "ui/mail/SendMailDialog.h"
-#endif
-
#include "core/function/GlobalSettingStation.h"
#include "core/function/gpg/GpgBasicOperator.h"
#include "core/function/gpg/GpgKeyGetter.h"
@@ -121,11 +110,6 @@ void MainWindow::slot_encrypt() {
if (check_gpg_error_2_err_code(error) == GPG_ERR_NO_ERROR)
edit_->SlotFillTextEditWithText(QString::fromStdString(*tmp));
info_board_->ResetOptionActionsMenu();
-#ifdef SMTP_SUPPORT
- if (check_gpg_error_2_err_code(error) == GPG_ERR_NO_ERROR)
- send_an_email(this, info_board_,
- edit_->CurTextPage()->GetTextPage()->toPlainText());
-#endif
} else {
QMessageBox::critical(this, _("Error"),
_("An error occurred during operation."));
@@ -381,23 +365,6 @@ void MainWindow::slot_encrypt_sign() {
edit_->SlotFillTextEditWithText(QString::fromStdString(*tmp));
info_board_->ResetOptionActionsMenu();
-#ifdef SMTP_SUPPORT
- if (check_gpg_error_2_err_code(error) == GPG_ERR_NO_ERROR)
- send_an_email(this, info_board_,
- edit_->CurTextPage()->GetTextPage()->toPlainText(), false);
-#endif
-
-#ifdef ADVANCE_SUPPORT
- infoBoard->addOptionalAction("Shorten Ciphertext", [this]() {
- if (settings.value("general/serviceToken").toString().isEmpty())
- QMessageBox::warning(nullptr, _("Service Token Empty"),
- _("Please go to the settings interface to set "
- "Own Key and get Service Token."));
- else {
- shortenCryptText();
- }
- });
-#endif
} else {
QMessageBox::critical(this, _("Error"),
_("An error occurred during operation."));
diff --git a/src/ui/main_window/MainWindowUI.cpp b/src/ui/main_window/MainWindowUI.cpp
index 01c4bbc9..fa5e6de3 100644
--- a/src/ui/main_window/MainWindowUI.cpp
+++ b/src/ui/main_window/MainWindowUI.cpp
@@ -28,10 +28,6 @@
#include "MainWindow.h"
#include "ui/UserInterfaceUtils.h"
-#ifdef SMTP_SUPPORT
-#include "ui/mail/ReceiveMailDialog.h"
-#include "ui/mail/SendMailDialog.h"
-#endif
namespace GpgFrontend::UI {
@@ -314,23 +310,6 @@ void MainWindow::create_actions() {
add_pgp_header_act_ = new QAction(_("Add PGP Header"), this);
connect(add_pgp_header_act_, &QAction::triggered, this,
&MainWindow::slot_add_pgp_header);
-
-#ifdef SMTP_SUPPORT
- send_mail_act_ = new QAction(_("New Message"), this);
- send_mail_act_->setIcon(QIcon(":email.png"));
- connect(send_mail_act_, &QAction::triggered, this, [=]() {
- auto* dialog = new SendMailDialog({}, this);
- dialog->show();
- });
-
- receive_mail_act_ = new QAction(_("Message Inbox"), this);
- receive_mail_act_->setVisible(false);
- receive_mail_act_->setIcon(QIcon(":receive_email.png"));
- connect(receive_mail_act_, &QAction::triggered, this, [=]() {
- auto* dialog = new ReceiveMailDialog(this);
- dialog->show();
- });
-#endif
}
void MainWindow::create_menus() {
@@ -387,11 +366,6 @@ void MainWindow::create_menus() {
steganography_menu_ = menuBar()->addMenu(_("Steganography"));
steganography_menu_->addAction(cut_pgp_header_act_);
steganography_menu_->addAction(add_pgp_header_act_);
-#ifdef SMTP_SUPPORT
- email_menu_ = menuBar()->addMenu(_("Email"));
- email_menu_->addAction(send_mail_act_);
- email_menu_->addAction(receive_mail_act_);
-#endif
view_menu_ = menuBar()->addMenu(_("View"));
@@ -442,12 +416,6 @@ void MainWindow::create_tool_bars() {
special_edit_tool_bar_->hide();
view_menu_->addAction(special_edit_tool_bar_->toggleViewAction());
- email_tool_bar_ = addToolBar(_("Email"));
- email_tool_bar_->setObjectName("emailToolBar");
- email_tool_bar_->addAction(send_mail_act_);
- email_tool_bar_->addAction(receive_mail_act_);
- view_menu_->addAction(email_tool_bar_->toggleViewAction());
-
// Add dropdown menu for key import to keytoolbar
import_button_ = new QToolButton();
import_button_->setMenu(import_key_menu_);
diff --git a/src/ui/settings/SettingsDialog.cpp b/src/ui/settings/SettingsDialog.cpp
index 2c23858f..bf3ce6a8 100644
--- a/src/ui/settings/SettingsDialog.cpp
+++ b/src/ui/settings/SettingsDialog.cpp
@@ -36,36 +36,19 @@
#include "ui/settings/SettingsNetwork.h"
#include "ui/main_window/MainWindow.h"
-#ifdef SMTP_SUPPORT
-#include "ui/settings/SettingsSendMail.h"
-#endif
-
namespace GpgFrontend::UI {
SettingsDialog::SettingsDialog(QWidget* parent) : QDialog(parent) {
tab_widget_ = new QTabWidget();
general_tab_ = new GeneralTab();
appearance_tab_ = new AppearanceTab();
-#ifdef SMTP_SUPPORT
- send_mail_tab_ = new SendMailTab();
-#endif
key_server_tab_ = new KeyserverTab();
network_tab_ = new NetworkTab();
-#ifdef ADVANCED_SUPPORT
- advancedTab = new AdvancedTab;
-#endif
tab_widget_->addTab(general_tab_, _("General"));
tab_widget_->addTab(appearance_tab_, _("Appearance"));
-#ifdef SMTP_SUPPORT
- tab_widget_->addTab(send_mail_tab_, _("Send Mail"));
-#endif
tab_widget_->addTab(key_server_tab_, _("Key Server"));
- // tabWidget->addTab(gpgPathsTab, _("Gpg paths"));
tab_widget_->addTab(network_tab_, _("Network"));
-#ifdef ADVANCED_SUPPORT
- tabWidget->addTab(advancedTab, _("Advanced"));
-#endif
button_box_ =
new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
@@ -105,15 +88,9 @@ void SettingsDialog::SlotAccept() {
LOG(INFO) << "Called";
general_tab_->ApplySettings();
-#ifdef SMTP_SUPPORT
- send_mail_tab_->ApplySettings();
-#endif
appearance_tab_->ApplySettings();
key_server_tab_->ApplySettings();
network_tab_->ApplySettings();
-#ifdef ADVANCED_SUPPORT
- advancedTab->applySettings();
-#endif
LOG(INFO) << "apply done";
diff --git a/src/ui/settings/SettingsDialog.h b/src/ui/settings/SettingsDialog.h
index 000e6599..e123cc6c 100755
--- a/src/ui/settings/SettingsDialog.h
+++ b/src/ui/settings/SettingsDialog.h
@@ -35,19 +35,10 @@
namespace GpgFrontend::UI {
class GeneralTab;
-
-#ifdef SMTP_SUPPORT
-class SendMailTab;
-#endif
-
class AppearanceTab;
class KeyserverTab;
class NetworkTab;
-#ifdef ADVANCED_SUPPORT
-class AdvancedTab;
-#endif
-
/**
* @brief
*
@@ -64,15 +55,9 @@ class SettingsDialog : public QDialog {
explicit SettingsDialog(QWidget* parent = nullptr);
GeneralTab* general_tab_; ///<
-#ifdef SMTP_SUPPORT
- SendMailTab* send_mail_tab_; ///<
-#endif
AppearanceTab* appearance_tab_; ///<
KeyserverTab* key_server_tab_; ///<
NetworkTab* network_tab_; ///<
-#ifdef ADVANCED_SUPPORT
- AdvancedTab* advanced_tab_; ///<
-#endif
/**
* @brief
diff --git a/src/ui/settings/SettingsSendMail.cpp b/src/ui/settings/SettingsSendMail.cpp
deleted file mode 100644
index bb948d9a..00000000
--- a/src/ui/settings/SettingsSendMail.cpp
+++ /dev/null
@@ -1,313 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "SettingsSendMail.h"
-
-#include "ui/struct/SettingsObject.h"
-#include "ui/thread/SMTPConnectionTestThread.h"
-#include "ui/thread/SMTPSendMailThread.h"
-#include "ui_SendMailSettings.h"
-
-namespace GpgFrontend::UI {
-
-SendMailTab::SendMailTab(QWidget* parent)
- : QWidget(parent), ui_(std::make_shared<Ui_SendMailSettings>()) {
- ui_->setupUi(this);
-
- connect(ui_->enableCheckBox, &QCheckBox::stateChanged, this,
- [=](int state) { switch_ui_enabled(state == Qt::Checked); });
-
-#ifdef SMTP_SUPPORT
- connect(ui_->checkConnectionButton, &QPushButton::clicked, this,
- &SendMailTab::slot_check_connection);
- connect(ui_->senTestMailButton, &QPushButton::clicked, this,
- &SendMailTab::slot_send_test_mail);
-#endif
-
- connect(ui_->identityCheckBox, &QCheckBox::stateChanged, this,
- [=](int state) { switch_ui_identity_enabled(state == Qt::Checked); });
-
- connect(ui_->connextionSecurityComboBox, &QComboBox::currentTextChanged, this,
- [=](const QString& current_text) {
- if (current_text == "SSL") {
- connection_type_ = SmtpClient::ConnectionType::SslConnection;
- } else if (current_text == "TLS" || current_text == "STARTTLS") {
- connection_type_ = SmtpClient::ConnectionType::TlsConnection;
- } else {
- connection_type_ = SmtpClient::ConnectionType::TcpConnection;
- }
- });
-
- ui_->generalGroupBox->setTitle(_("General"));
- ui_->identityGroupBox->setTitle(_("Identity Information"));
- ui_->preferenceGroupBox->setTitle(_("Preference"));
- ui_->operationsGroupBox->setTitle(_("Operations"));
-
- ui_->enableCheckBox->setText(_("Enable Send Mail Ability"));
- ui_->identityCheckBox->setText(_("Need Auth"));
-
- ui_->smtpServerAddressLabel->setText(_("SMTP Server Address"));
- ui_->smtpServerPortLabel->setText(_("SMTP Server Port"));
- ui_->connectionSecurityLabel->setText(_("SMTP Connection Security"));
- ui_->usernameLabel->setText(_("Username"));
- ui_->passwordLabel->setText(_("Password"));
-
- ui_->senderLabel->setText(_("Default Sender Email"));
- ui_->checkConnectionButton->setText(_("Check Connection"));
- ui_->senTestMailButton->setText(_("Send Test Email"));
- ui_->gpgkeyIdLabel->setText(_("Default Sender GPG Key ID"));
-
- ui_->tipsLabel->setText(
- _("Tips: It is recommended that you build your own mail server or use "
- "a trusted mail server. If you don't know the detailed configuration "
- "information, you can get it from the mail service provider."));
-
- ui_->senTestMailButton->setDisabled(true);
-
- auto* email_validator =
- new QRegularExpressionValidator(re_email_, ui_->defaultSenderEmailEdit);
- ui_->defaultSenderEmailEdit->setValidator(email_validator);
-
- SetSettings();
-}
-
-void SendMailTab::SetSettings() {
- auto smtp_passport = SettingsObject("smtp_passport");
-
- ui_->smtpServerAddressEdit->setText(
- std::string{smtp_passport.Check("smtp_address", "")}.c_str());
-
- ui_->usernameEdit->setText(
- std::string{smtp_passport.Check("username", "")}.c_str());
-
- ui_->passwordEdit->setText(
- std::string{smtp_passport.Check("password", "")}.c_str());
-
- ui_->portSpin->setValue(int{smtp_passport.Check("port", 25)});
-
- ui_->connextionSecurityComboBox->setCurrentText(
- std::string{smtp_passport.Check("connection_type", "None")}.c_str());
-
- ui_->defaultSenderEmailEdit->setText(
- std::string{smtp_passport.Check("default_sender", "")}.c_str());
-
- ui_->gpgKeyIDEdit->setText(
- std::string{smtp_passport.Check("default_sender_gpg_key_id", "")}
- .c_str());
-
- ui_->identityCheckBox->setChecked(
- bool{smtp_passport.Check("identity_enable", false)});
-
- ui_->enableCheckBox->setChecked(bool{smtp_passport.Check("enable", false)});
-
- {
- auto state = ui_->identityCheckBox->checkState();
- switch_ui_identity_enabled(state == Qt::Checked);
- }
-
- {
- auto state = ui_->enableCheckBox->checkState();
- switch_ui_enabled(state == Qt::Checked);
- }
-}
-
-void SendMailTab::ApplySettings() {
- try {
- auto smtp_passport = SettingsObject("smtp_passport");
-
- smtp_passport["smtp_address"] =
- ui_->smtpServerAddressEdit->text().toStdString();
-
- smtp_passport["username"] = ui_->usernameEdit->text().toStdString();
-
- smtp_passport["password"] = ui_->passwordEdit->text().toStdString();
-
- smtp_passport["port"] = ui_->portSpin->value();
-
- smtp_passport["connection_type"] =
- ui_->connextionSecurityComboBox->currentText().toStdString();
-
- smtp_passport["default_sender"] =
- ui_->defaultSenderEmailEdit->text().toStdString();
-
- smtp_passport["default_sender_gpg_key_id"] =
- ui_->gpgKeyIDEdit->text().toStdString();
-
- smtp_passport["identity_enable"] = ui_->identityCheckBox->isChecked();
-
- smtp_passport["enable"] = ui_->enableCheckBox->isChecked();
-
- } catch (...) {
- LOG(ERROR) << _("apply settings failed");
- }
-}
-
-#ifdef SMTP_SUPPORT
-void SendMailTab::slot_check_connection() {
- auto host = ui_->smtpServerAddressEdit->text().toStdString();
- auto port = ui_->portSpin->value();
- auto connection_type = connection_type_;
- bool identity_needed = ui_->identityCheckBox->isChecked();
- auto username = ui_->usernameEdit->text().toStdString();
- auto password = ui_->passwordEdit->text().toStdString();
-
- auto thread = new SMTPConnectionTestThread(
- host, port, connection_type, identity_needed, username, password);
-
- // Waiting Dialog
- auto* waiting_dialog = new QProgressDialog(this);
- waiting_dialog->setMaximum(0);
- waiting_dialog->setMinimum(0);
- auto waiting_dialog_label =
- new QLabel(QString(_("Test SMTP Connection...")) + "<br /><br />" +
- _("If the process does not end for a long time, please check "
- "again whether your SMTP server configuration is correct."));
- waiting_dialog_label->setWordWrap(true);
- waiting_dialog->setLabel(waiting_dialog_label);
- waiting_dialog->resize(420, 120);
- connect(thread, &SMTPConnectionTestThread::SignalSMTPConnectionTestResult,
- this, &SendMailTab::slot_test_smtp_connection_result);
- 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();
-}
-#endif
-
-#ifdef SMTP_SUPPORT
-void SendMailTab::slot_send_test_mail() {
- auto host = ui_->smtpServerAddressEdit->text().toStdString();
- auto port = ui_->portSpin->value();
- auto connection_type = connection_type_;
- bool identity_needed = ui_->identityCheckBox->isChecked();
- auto username = ui_->usernameEdit->text().toStdString();
- auto password = ui_->passwordEdit->text().toStdString();
- auto sender_address = ui_->defaultSenderEmailEdit->text();
-
- auto thread = new SMTPSendMailThread(host, port, connection_type,
- identity_needed, username, password);
-
- // Waiting Dialog
- auto* waiting_dialog = new QProgressDialog(this);
- waiting_dialog->setMaximum(0);
- waiting_dialog->setMinimum(0);
- auto waiting_dialog_label =
- new QLabel(QString(_("Test SMTP Send Mail Ability...")) + "<br /><br />" +
- _("If the process does not end for a long time, please check "
- "again whether your SMTP server configuration is correct."));
- waiting_dialog_label->setWordWrap(true);
- waiting_dialog->setLabel(waiting_dialog_label);
- waiting_dialog->resize(420, 120);
- connect(thread, &SMTPSendMailThread::SignalSMTPResult, this,
- &SendMailTab::slot_test_smtp_connection_result);
- 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();
- });
-
- thread->SetSender(sender_address);
- thread->SetRecipient(sender_address);
- thread->SetSubject(_("Test Email from GpgFrontend"));
- thread->AddTextContent(
- _("Hello, this is a test email from GpgFrontend. If you receive this "
- "email, it means that you have configured the correct SMTP server "
- "parameters."));
-
- // Show Waiting Dialog
- waiting_dialog->show();
- waiting_dialog->setFocus();
-
- thread->start();
- QEventLoop loop;
- connect(thread, &QThread::finished, &loop, &QEventLoop::quit);
- loop.exec();
-}
-
-void SendMailTab::slot_test_smtp_connection_result(const QString& result) {
- if (result == "Fail to connect SMTP server") {
- QMessageBox::critical(this, _("Fail"), _("Fail to Connect SMTP Server."));
- ui_->senTestMailButton->setDisabled(true);
- } else if (result == "Fail to login") {
- QMessageBox::critical(this, _("Fail"), _("Fail to Login."));
- ui_->senTestMailButton->setDisabled(true);
- } else if (result == "Fail to send mail") {
- QMessageBox::critical(this, _("Fail"), _("Fail to Login."));
- ui_->senTestMailButton->setDisabled(true);
- } else if (result == "Succeed in testing connection") {
- QMessageBox::information(this, _("Success"),
- _("Succeed in connecting and login"));
- ui_->senTestMailButton->setDisabled(false);
- } else if (result == "Succeed in sending a test email") {
- QMessageBox::information(
- this, _("Success"),
- _("Succeed in sending a test email to the SMTP Server"));
- ui_->senTestMailButton->setDisabled(false);
- } else {
- QMessageBox::critical(this, _("Fail"), _("Unknown error."));
- ui_->senTestMailButton->setDisabled(true);
- }
-}
-
-void SendMailTab::switch_ui_enabled(bool enabled) {
- ui_->smtpServerAddressEdit->setDisabled(!enabled);
- ui_->portSpin->setDisabled(!enabled);
- ui_->connextionSecurityComboBox->setDisabled(!enabled);
-
- ui_->identityCheckBox->setDisabled(!enabled);
- ui_->usernameEdit->setDisabled(!enabled);
- ui_->passwordEdit->setDisabled(!enabled);
-
- ui_->defaultSenderEmailEdit->setDisabled(!enabled);
- ui_->gpgKeyIDEdit->setDisabled(!enabled);
- ui_->checkConnectionButton->setDisabled(!enabled);
-}
-
-void SendMailTab::switch_ui_identity_enabled(bool enabled) {
- ui_->usernameEdit->setDisabled(!enabled);
- ui_->passwordEdit->setDisabled(!enabled);
-}
-#endif
-
-} // namespace GpgFrontend::UI
diff --git a/src/ui/settings/SettingsSendMail.h b/src/ui/settings/SettingsSendMail.h
deleted file mode 100644
index 84259844..00000000
--- a/src/ui/settings/SettingsSendMail.h
+++ /dev/null
@@ -1,119 +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.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#ifndef GPGFRONTEND_SETTINGSSENDMAIL_H
-#define GPGFRONTEND_SETTINGSSENDMAIL_H
-
-#include "ui/GpgFrontendUI.h"
-
-class Ui_SendMailSettings;
-
-namespace GpgFrontend::UI {
-/**
- * @brief
- *
- */
-class SendMailTab : public QWidget {
- Q_OBJECT
-
- public:
- /**
- * @brief Construct a new Send Mail Tab object
- *
- * @param parent
- */
- explicit SendMailTab(QWidget* parent = nullptr);
-
- /**
- * @brief Set the Settings object
- *
- */
- void SetSettings();
-
- /**
- * @brief
- *
- */
- void ApplySettings();
-
- signals:
-
- /**
- * @brief
- *
- * @param needed
- */
- void SignalRestartNeeded(bool needed);
-
- private slots:
-
- /**
- * @brief
- *
- * @param result
- */
- void slot_test_smtp_connection_result(const QString& result);
-
-#ifdef SMTP_SUPPORT
- /**
- * @brief
- *
- */
- void slot_check_connection();
-
- /**
- * @brief
- *
- */
- void slot_send_test_mail();
-#endif
-
- private:
- std::shared_ptr<Ui_SendMailSettings> ui_; ///<
- QRegularExpression re_email_{
- R"((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))"};
- SmtpClient::ConnectionType connection_type_ =
- SmtpClient::ConnectionType::TcpConnection; ///<
-
- /**
- * @brief
- *
- * @param enabled
- */
- void switch_ui_enabled(bool enabled);
-
- /**
- * @brief
- *
- * @param enabled
- */
- void switch_ui_identity_enabled(bool enabled);
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_SETTINGSSENDMAIL_H
diff --git a/src/ui/thread/CtxCheckThread.cpp b/src/ui/thread/CtxCheckThread.cpp
deleted file mode 100644
index b1e50b94..00000000
--- a/src/ui/thread/CtxCheckThread.cpp
+++ /dev/null
@@ -1,50 +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 "CtxCheckThread.h"
-
-#include "core/GpgContext.h"
-#include "core/GpgCoreInit.h"
-#include "core/function/gpg/GpgKeyGetter.h"
-#include "ui/UserInterfaceUtils.h"
-
-GpgFrontend::UI::CtxCheckThread::CtxCheckThread() : QThread(nullptr) {
- connect(this, &CtxCheckThread::SignalGnupgNotInstall,
- CommonUtils::GetInstance(), &CommonUtils::SignalGnupgNotInstall);
-}
-
-void GpgFrontend::UI::CtxCheckThread::run() {
- // Init GpgFrontend Core
- init_gpgfrontend_core();
-
- // Create & Check Gnupg Context Status
- if (!GpgContext::GetInstance().good()) {
- emit SignalGnupgNotInstall();
- }
- // Try fetching key
- else
- GpgFrontend::GpgKeyGetter::GetInstance().FetchKey();
-}
diff --git a/src/ui/thread/CtxCheckThread.h b/src/ui/thread/CtxCheckThread.h
deleted file mode 100644
index 36281525..00000000
--- a/src/ui/thread/CtxCheckThread.h
+++ /dev/null
@@ -1,60 +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.
- *
- */
-
-#ifndef GPGFRONTEND_CTXCHECKTRHEAD_H
-#define GPGFRONTEND_CTXCHECKTRHEAD_H
-#include "ui/GpgFrontendUI.h"
-namespace GpgFrontend::UI {
-/**
- * @brief
- *
- */
-class CtxCheckThread : public QThread {
- Q_OBJECT
- public:
- /**
- * @brief Construct a new Ctx Check Thread object
- *
- */
- CtxCheckThread();
-
- signals:
- /**
- * @brief
- *
- */
- void SignalGnupgNotInstall();
-
- protected:
- /**
- * @brief
- *
- */
- void run() override;
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_CTXCHECKTRHEAD_H
diff --git a/src/ui/thread/SMTPConnectionTestThread.cpp b/src/ui/thread/SMTPConnectionTestThread.cpp
deleted file mode 100644
index 95cc8f72..00000000
--- a/src/ui/thread/SMTPConnectionTestThread.cpp
+++ /dev/null
@@ -1,48 +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 "SMTPConnectionTestThread.h"
-namespace GpgFrontend::UI {
-
-void SMTPConnectionTestThread::run() {
- SmtpClient smtp(host_.c_str(), port_, connection_type_);
- if (identify_) {
- smtp.setUser(username_.c_str());
- smtp.setPassword(password_.c_str());
- }
- if (!smtp.connectToHost()) {
- emit SignalSMTPConnectionTestResult("Fail to connect SMTP server");
- return;
- }
- if (!smtp.login()) {
- emit SignalSMTPConnectionTestResult("Fail to login");
- return;
- }
- smtp.quit();
- emit SignalSMTPConnectionTestResult("Succeed in testing connection");
-}
-
-} // namespace GpgFrontend::UI
diff --git a/src/ui/thread/SMTPConnectionTestThread.h b/src/ui/thread/SMTPConnectionTestThread.h
deleted file mode 100644
index b37cc09c..00000000
--- a/src/ui/thread/SMTPConnectionTestThread.h
+++ /dev/null
@@ -1,93 +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.
- *
- */
-
-#ifndef GPGFRONTEND_SMTPCONNECTIONTESTTHREAD_H
-#define GPGFRONTEND_SMTPCONNECTIONTESTTHREAD_H
-
-#include <utility>
-
-#include "ui/GpgFrontendUI.h"
-
-namespace GpgFrontend::UI {
-
-/**
- * @brief
- *
- */
-class SMTPConnectionTestThread : public QThread {
- Q_OBJECT
- public:
- /**
- * @brief Construct a new SMTPConnectionTestThread object
- *
- * @param host
- * @param port
- * @param connection_type
- * @param identify
- * @param username
- * @param password
- * @param parent
- */
- explicit SMTPConnectionTestThread(std::string host, int port,
- SmtpClient::ConnectionType connection_type,
- bool identify, std::string username,
- std::string password,
- QWidget* parent = nullptr)
- : QThread(parent),
- host_(std::move(host)),
- port_(port),
- connection_type_(connection_type),
- identify_(identify),
- username_(std::move(username)),
- password_(std::move(password)) {}
-
- signals:
- /**
- * @brief
- *
- * @param result
- */
- void SignalSMTPConnectionTestResult(const QString& result);
-
- protected:
- /**
- * @brief
- *
- */
- void run() override;
-
- private:
- std::string host_; ///<
- int port_; ///<
- SmtpClient::ConnectionType connection_type_; ///<
- bool identify_; ///<
- std::string username_; ///<
- std::string password_; ///<
-};
-
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_SMTPCONNECTIONTESTTHREAD_H
diff --git a/src/ui/thread/SMTPSendMailThread.cpp b/src/ui/thread/SMTPSendMailThread.cpp
deleted file mode 100644
index f1cb1626..00000000
--- a/src/ui/thread/SMTPSendMailThread.cpp
+++ /dev/null
@@ -1,263 +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 "SMTPSendMailThread.h"
-
-#include <boost/format.hpp>
-
-#include "core/function/gpg/GpgBasicOperator.h"
-#include "core/function/gpg/GpgKeyGetter.h"
-#include "core/function/gpg/GpgKeyImportExporter.h"
-
-namespace GpgFrontend::UI {
-
-void SMTPSendMailThread::run() {
- SmtpClient smtp(host_.c_str(), port_, connection_type_);
-
- if (identify_) {
- smtp.setUser(username_.c_str());
- smtp.setPassword(password_.c_str());
- }
-
- if (encrypt_content_ && public_key_ids_ != nullptr &&
- !public_key_ids_->empty() && !attach_signature_file_) {
- message.getContent().setContentType(
- "multipart/encrypted; "
- "protocol=\"application/pgp-encrypted\"");
- }
-
- if (attach_signature_file_ && !private_key_id_.empty()) {
- message.getContent().setContentType(
- "multipart/signed; "
- "protocol=\"application/pgp-signature\"");
- }
-
- int index = 0;
- for (auto& text : texts_) {
- const auto plain_text = text->getText().toStdString();
-
- // encrypt
- if (encrypt_content_ && public_key_ids_ != nullptr &&
- !public_key_ids_->empty()) {
- ByteArrayPtr out_buffer = nullptr;
- GpgEncrResult result;
- auto in_buffer = std::make_unique<ByteArray>(plain_text);
- auto keys = GpgKeyGetter::GetInstance().GetKeys(public_key_ids_);
- auto err = GpgBasicOperator::GetInstance().Encrypt(
- std::move(keys), *in_buffer, out_buffer, result);
-
- if (check_gpg_error_2_err_code(err) != GPG_ERR_NO_ERROR) {
- emit SignalSMTPResult("Fail to encrypt with gpg keys");
- return;
- }
- text->setText(out_buffer->c_str());
-
- // The multipart/encrypted MIME body MUST consist of exactly two body
- // parts, the first with content type "application/pgp-encrypted". This
- // body contains the control information. A message complying with this
- // standard MUST contain a "Version: 1" field in this body. Since the
- // OpenPGP packet format contains all other information necessary for
- // decrypting, no other information is required here.
- auto control_text = std::make_unique<MimeText>("Version: 1\r\n");
- control_text->setContentType("application/pgp-encrypted");
- send_texts_.push_back(std::move(control_text));
- // The second MIME body part MUST contain the actual encrypted data. It
- // MUST be labeled with a content type of "application/octet-stream".
- text->setContentType("application/octet-stream");
- }
-
- send_texts_.push_back(std::move(text));
-
- // sign
- if (attach_signature_file_ && !private_key_id_.empty()) {
- ByteArrayPtr out_buffer = nullptr;
- GpgSignResult result;
-
- auto& plain_mime_text = send_texts_.back();
- // In particular, line endings in the encoded data
- // MUST use the canonical <CR><LF> sequence where appropriate
- auto encoded_text = plain_mime_text->getText();
- // As described in section 3 of this document, any trailing
- // whitespace MUST then be removed from the signed material.
- encoded_text = encoded_text.trimmed();
- encoded_text = encoded_text.replace('\n', "\r\n");
- // An implementation which elects to adhere to the OpenPGP convention
- // has to make sure it inserts a <CR><LF> pair on the last line of the
- // data to be signed and transmitted.
- encoded_text.append("\r\n");
- plain_mime_text->setText(encoded_text);
-
- // This presents serious problems
- // for multipart/signed, in particular, where the signature is
- // invalidated when such an operation occurs. For this reason all data
- // signed according to this protocol MUST be constrained to 7 bits (8-
- // bit data MUST be encoded using either Quoted-Printable or Base64).
- plain_mime_text->setEncoding(MimePart::_7Bit);
-
- // As described in [2], the digital signature MUST be calculated
- // over both the data to be signed and its set of content headers.
- auto text_calculated = plain_mime_text->toString().toStdString();
-
- auto in_buffer = std::make_unique<ByteArray>(text_calculated);
- auto key = GpgKeyGetter::GetInstance().GetKey(private_key_id_);
- auto keys = std::make_unique<KeyArgsList>();
- keys->push_back(std::move(key));
-
- // The signature MUST be generated detached from the signed data
- // so that the process does not alter the signed data in any way.
- auto err = GpgBasicOperator::GetInstance().Sign(
- std::move(keys), *in_buffer, out_buffer, GPGME_SIG_MODE_DETACH,
- result);
-
- if (check_gpg_error_2_err_code(err) != GPG_ERR_NO_ERROR) {
- emit SignalSMTPResult("Fail to sign with gpg keys");
- return;
- }
-
- auto sign_content_name =
- boost::format("%1%_sign_%2%.asc") % private_key_id_ % index++;
-
- // Set MIME Options
- send_texts_.push_back(std::make_unique<MimeText>(out_buffer->c_str()));
- auto& sig_text = send_texts_.back();
- sig_text->setContentType("application/pgp-signature");
- sig_text->setEncoding(MimePart::_7Bit);
- sig_text->setContentName(sign_content_name.str().c_str());
-
- // set Message Integrity Check (MIC) algorithm
- if (result->signatures != nullptr) {
- // The "micalg" parameter for the "application/pgp-signature"
- // protocol
- // MUST contain exactly one hash-symbol of the format "pgp-<hash-
- // identifier>", where <hash-identifier> identifies the Message
- // Integrity Check (MIC) algorithm used to generate the signature.
- // Hash-symbols are constructed from the text names registered in [1]
- // or according to the mechanism defined in that document by
- // converting the text name to lower case and prefixing it with the
- // four characters "pgp-".
- auto hash_algo_name =
- std::string(gpgme_hash_algo_name(result->signatures->hash_algo));
- boost::algorithm::to_lower(hash_algo_name);
- std::stringstream ss;
- ss << message.getContent().getContentType().toStdString();
- ss << "; micalg=pgp-" << hash_algo_name;
- message.getContent().setContentType(ss.str().c_str());
- }
- }
- }
-
- if (attach_public_key_file_ && !attached_public_key_ids_.empty()) {
- auto key = GpgKeyGetter::GetInstance().GetKey(attached_public_key_ids_);
- ByteArrayPtr out_buffer = nullptr;
- GpgKeyImportExporter::GetInstance().ExportKey(key, out_buffer);
-
- auto public_key_file_name =
- boost::format("%1%_pubkey.asc") % attached_public_key_ids_;
- AddFileContent(public_key_file_name.str().c_str(), out_buffer->c_str());
- auto& key_file = files_.back();
- key_file->setEncoding(MimePart::_7Bit);
- key_file->setContentType("application/pgp-keys");
- }
-
- for (const auto& text : send_texts_) {
- message.addPart(text.get());
- }
-
- for (const auto& file : files_) {
- message.addPart(file.get());
- }
-
- // Now we can send the mail
- if (!smtp.connectToHost()) {
- emit SignalSMTPResult("Fail to connect SMTP server");
- return;
- }
- if (!smtp.login()) {
- emit SignalSMTPResult("Fail to login");
- return;
- }
- if (!smtp.sendMail(message)) {
- emit SignalSMTPResult("Fail to send mail");
- return;
- }
- smtp.quit();
- emit SignalSMTPResult("Succeed in sending a test email");
-}
-
-void SMTPSendMailThread::SetBCC(const QString& bccs) {
- QStringList bcc_string_list = bccs.split(';');
- for (const auto& bcc : bcc_string_list) {
- if (!bcc.isEmpty()) message.addBcc(new EmailAddress(bcc.trimmed()));
- }
-}
-
-void SMTPSendMailThread::SetCC(const QString& ccs) {
- QStringList cc_string_list = ccs.split(';');
- for (const auto& cc : cc_string_list) {
- if (!cc.isEmpty()) message.addCc(new EmailAddress(cc.trimmed()));
- }
-}
-
-void SMTPSendMailThread::SetRecipient(const QString& recipients) {
- QStringList rcpt_string_list = recipients.split(';');
- for (const auto& rcpt : rcpt_string_list) {
- if (!rcpt.isEmpty()) message.addRecipient(new EmailAddress(rcpt.trimmed()));
- }
-}
-
-void SMTPSendMailThread::SetSender(const QString& sender) {
- message.setSender(new EmailAddress(sender));
-}
-
-void SMTPSendMailThread::AddTextContent(const QString& content) {
- auto text = std::make_unique<MimeText>(content.trimmed());
- texts_.push_back(std::move(text));
-}
-
-void SMTPSendMailThread::AddFileContent(const QString& file_name,
- const QByteArray& content) {
- auto file = std::make_unique<MimeFile>(content, file_name);
- files_.push_back(std::move(file));
-}
-
-void SMTPSendMailThread::SetEncryptContent(
- bool encrypt_content, GpgFrontend::KeyIdArgsListPtr public_key_ids) {
- this->encrypt_content_ = encrypt_content;
- this->public_key_ids_ = std::move(public_key_ids);
-}
-
-void SMTPSendMailThread::SetAttachSignatureFile(
- bool attach_signature_file, GpgFrontend::KeyId private_key_id) {
- this->attach_signature_file_ = attach_signature_file;
- this->private_key_id_ = std::move(private_key_id);
-}
-
-void SMTPSendMailThread::SetAttachPublicKey(
- bool attach_public_key_file, GpgFrontend::KeyId attached_public_key_ids) {
- this->attach_public_key_file_ = attach_public_key_file;
- this->attached_public_key_ids_ = std::move(attached_public_key_ids);
-}
-} // namespace GpgFrontend::UI
diff --git a/src/ui/thread/SMTPSendMailThread.h b/src/ui/thread/SMTPSendMailThread.h
deleted file mode 100644
index 58420bf3..00000000
--- a/src/ui/thread/SMTPSendMailThread.h
+++ /dev/null
@@ -1,179 +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.
- *
- */
-
-#ifndef GPGFRONTEND_SMTPSENDMAILTHREAD_H
-#define GPGFRONTEND_SMTPSENDMAILTHREAD_H
-
-#include <utility>
-
-#include "ui/GpgFrontendUI.h"
-
-namespace GpgFrontend::UI {
-/**
- * @brief
- *
- */
-class SMTPSendMailThread : public QThread {
- Q_OBJECT
- public:
- /**
- * @brief Construct a new SMTPSendMailThread object
- *
- * @param host
- * @param port
- * @param connection_type
- * @param identify
- * @param username
- * @param password
- * @param parent
- */
- explicit SMTPSendMailThread(std::string host, int port,
- SmtpClient::ConnectionType connection_type,
- bool identify, std::string username,
- std::string password, QWidget* parent = nullptr)
- : QThread(parent),
- host_(std::move(host)),
- port_(port),
- connection_type_(connection_type),
- identify_(identify),
- username_(std::move(username)),
- password_(std::move(password)) {}
-
- void SetSender(const QString& sender);
-
- /**
- * @brief Set the Recipient object
- *
- * @param recipients
- */
- void SetRecipient(const QString& recipients);
-
- /**
- * @brief
- *
- * @param ccs
- */
- void SetCC(const QString& ccs);
-
- /**
- * @brief
- *
- * @param bccs
- */
- void SetBCC(const QString& bccs);
-
- /**
- * @brief Set the Subject object
- *
- * @param subject
- */
- void SetSubject(const QString& subject) { message.setSubject(subject); }
-
- /**
- * @brief
- *
- * @param content
- */
- void AddTextContent(const QString& content);
-
- /**
- * @brief
- *
- * @param file_name
- * @param content
- */
- void AddFileContent(const QString& file_name, const QByteArray& content);
-
- /**
- * @brief Set the Encrypt Content object
- *
- * @param encrypt_content
- * @param public_key_ids
- */
- void SetEncryptContent(bool encrypt_content,
- GpgFrontend::KeyIdArgsListPtr public_key_ids);
-
- /**
- * @brief Set the Attach Signature File object
- *
- * @param attach_signature_file
- * @param private_key_id
- */
- void SetAttachSignatureFile(bool attach_signature_file,
- GpgFrontend::KeyId private_key_id);
-
- /**
- * @brief Set the Attach Public Key object
- *
- * @param attach_public_key_file
- * @param attached_public_key_ids
- */
- void SetAttachPublicKey(bool attach_public_key_file,
- GpgFrontend::KeyId attached_public_key_ids);
-
- signals:
- /**
- * @brief
- *
- * @param result
- */
- void SignalSMTPResult(const QString& result);
-
- protected:
- /**
- * @brief
- *
- */
- void run() override;
-
- private:
- // SMTP Options
-
- std::string host_; ///<
- int port_; ///<
- SmtpClient::ConnectionType connection_type_; ///<
-
- bool identify_; ///<
- std::string username_; ///<
- std::string password_; ///<
-
- MimeMessage message; ///<
- std::vector<std::unique_ptr<MimeText>> texts_; ///<
- std::vector<std::unique_ptr<MimeText>> send_texts_; ///<
- std::vector<std::unique_ptr<MimeFile>> files_; ///<
-
- // GPG Options
-
- bool encrypt_content_ = false; ///<
- GpgFrontend::KeyIdArgsListPtr public_key_ids_; ///<
- bool attach_signature_file_ = false; ///<
- GpgFrontend::KeyId private_key_id_; ///<
- bool attach_public_key_file_ = false; ///<
- GpgFrontend::KeyId attached_public_key_ids_; ///<
-};
-} // namespace GpgFrontend::UI
-
-#endif // GPGFRONTEND_SMTPSENDMAILTHREAD_H
diff --git a/src/ui/widgets/KeyList.cpp b/src/ui/widgets/KeyList.cpp
index 60cfbc84..6292c1a9 100644
--- a/src/ui/widgets/KeyList.cpp
+++ b/src/ui/widgets/KeyList.cpp
@@ -32,38 +32,22 @@
#include <utility>
#include "core/GpgCoreInit.h"
+#include "core/function/GlobalSettingStation.h"
#include "core/function/gpg/GpgKeyGetter.h"
#include "ui/SignalStation.h"
#include "ui/UserInterfaceUtils.h"
-#include "core/function/GlobalSettingStation.h"
#include "ui_KeyList.h"
namespace GpgFrontend::UI {
-int KeyList::key_list_id_ = 2048;
-
KeyList::KeyList(KeyMenuAbility::AbilityType menu_ability, QWidget* parent)
: QWidget(parent),
- m_key_list_id_(key_list_id_++),
ui_(std::make_shared<Ui_KeyList>()),
menu_ability_(menu_ability) {
init();
}
void KeyList::init() {
-#ifdef GPG_STANDALONE_MODE
- LOG(INFO) << "GPG_STANDALONE_MODE Enabled";
- auto gpg_path = GpgFrontend::GlobalSettingStation::GetInstance()
- .GetStandaloneGpgBinDir();
- auto db_path = GpgFrontend::GlobalSettingStation::GetInstance()
- .GetStandaloneDatabaseDir();
- GpgContext::CreateInstance(
- _m_key_list_id, std::make_unique<GpgContext>(true, db_path.u8string(), true,
- gpg_path.string()));
-#else
- new_default_settings_channel(m_key_list_id_);
-#endif
-
ui_->setupUi(this);
ui_->menuWidget->setHidden(!menu_ability_);
@@ -170,13 +154,13 @@ void KeyList::AddListGroupTab(
}
void KeyList::SlotRefresh() {
- LOG(INFO) << _("Called") << "_m_key_list_id" << m_key_list_id_;
+ LOG(INFO) << _("Called");
emit SignalRefreshStatusBar(_("Refreshing Key List..."), 3000);
- auto thread = QThread::create([this, _id = m_key_list_id_]() {
+ auto thread = QThread::create([this]() {
std::lock_guard<std::mutex> guard(buffered_key_list_mutex_);
buffered_keys_list_ = nullptr;
// buffered keys list
- buffered_keys_list_ = GpgKeyGetter::GetInstance(_id).FetchKey();
+ buffered_keys_list_ = GpgKeyGetter::GetInstance().FetchKey();
});
connect(thread, &QThread::finished, this, &KeyList::slot_refresh_ui);
connect(thread, &QThread::finished, thread, &QThread::deleteLater);
@@ -402,8 +386,7 @@ void KeyList::dragEnterEvent(QDragEnterEvent* event) {
void KeyList::import_keys(const QByteArray& inBuffer) {
auto std_buffer = std::make_unique<ByteArray>(inBuffer.toStdString());
GpgImportInformation result =
- GpgKeyImportExporter::GetInstance(m_key_list_id_)
- .ImportKey(std::move(std_buffer));
+ GpgKeyImportExporter::GetInstance().ImportKey(std::move(std_buffer));
new KeyImportDetailDialog(result, false, this);
}
@@ -412,8 +395,8 @@ void KeyList::slot_double_clicked(const QModelIndex& index) {
const auto& buffered_keys =
m_key_tables_[ui_->keyGroupTab->currentIndex()].buffered_keys_;
if (m_action_ != nullptr) {
- const auto key = GpgKeyGetter::GetInstance(m_key_list_id_)
- .GetKey(buffered_keys[index.row()].GetId());
+ const auto key =
+ GpgKeyGetter::GetInstance().GetKey(buffered_keys[index.row()].GetId());
m_action_(key, this);
}
}
@@ -464,12 +447,11 @@ void KeyList::slot_sync_with_key_server() {
emit SignalRefreshStatusBar(_("Syncing Key List..."), 3000);
CommonUtils::SlotImportKeyFromKeyServer(
- m_key_list_id_, key_ids,
- [=](const std::string& key_id, const std::string& status,
- size_t current_index, size_t all_index) {
+ key_ids, [=](const std::string& key_id, const std::string& status,
+ size_t current_index, size_t all_index) {
LOG(INFO) << _("Called") << key_id << status << current_index
<< all_index;
- auto key = GpgKeyGetter::GetInstance(m_key_list_id_).GetKey(key_id);
+ auto key = GpgKeyGetter::GetInstance().GetKey(key_id);
boost::format status_str = boost::format(_("Sync [%1%/%2%] %3% %4%")) %
current_index % all_index %
diff --git a/src/ui/widgets/KeyList.h b/src/ui/widgets/KeyList.h
index d79f9331..60449ad9 100644
--- a/src/ui/widgets/KeyList.h
+++ b/src/ui/widgets/KeyList.h
@@ -329,8 +329,6 @@ class KeyList : public QWidget {
*/
void check_all();
- static int key_list_id_; ///<
- int m_key_list_id_; ///<
std::mutex buffered_key_list_mutex_; ///<
std::shared_ptr<Ui_KeyList> ui_; ///<