diff options
Diffstat (limited to 'src/ui/mail')
-rw-r--r-- | src/ui/mail/EmailListEditor.cpp | 106 | ||||
-rw-r--r-- | src/ui/mail/EmailListEditor.h | 85 | ||||
-rw-r--r-- | src/ui/mail/IMAPFolder.cpp | 95 | ||||
-rw-r--r-- | src/ui/mail/IMAPFolder.h | 91 | ||||
-rw-r--r-- | src/ui/mail/ReceiveMailDialog.cpp | 42 | ||||
-rw-r--r-- | src/ui/mail/ReceiveMailDialog.h | 80 | ||||
-rw-r--r-- | src/ui/mail/RecipientsPicker.cpp | 80 | ||||
-rw-r--r-- | src/ui/mail/RecipientsPicker.h | 68 | ||||
-rw-r--r-- | src/ui/mail/SendMailDialog.cpp | 439 | ||||
-rw-r--r-- | src/ui/mail/SendMailDialog.h | 132 | ||||
-rw-r--r-- | src/ui/mail/SenderPicker.cpp | 81 | ||||
-rw-r--r-- | src/ui/mail/SenderPicker.h | 66 |
12 files changed, 0 insertions, 1365 deletions
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/ReceiveMailDialog.cpp b/src/ui/mail/ReceiveMailDialog.cpp deleted file mode 100644 index 765e8baa..00000000 --- a/src/ui/mail/ReceiveMailDialog.cpp +++ /dev/null @@ -1,42 +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 "ReceiveMailDialog.h" - -#include "ui_ReceiveMailDialog.h" - -GpgFrontend::UI::ReceiveMailDialog::ReceiveMailDialog(QWidget *parent) - : QDialog(parent), ui_(std::make_shared<Ui_ReceiveMailDialog>()) { - ui_->setupUi(this); -} - -void GpgFrontend::UI::ReceiveMailDialog::slot_refresh_data() {} - -void GpgFrontend::UI::ReceiveMailDialog::list_sub_folders( - GpgFrontend::UI::IMAPFolder *parent_folder, - const std::shared_ptr<vmime::net::folder> &) {} diff --git a/src/ui/mail/ReceiveMailDialog.h b/src/ui/mail/ReceiveMailDialog.h deleted file mode 100644 index 2ccb2664..00000000 --- a/src/ui/mail/ReceiveMailDialog.h +++ /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 - * - */ - -#ifndef GPGFRONTEND_RECEIVEMAILDIALOG_H -#define GPGFRONTEND_RECEIVEMAILDIALOG_H - -#include "ui/GpgFrontendUI.h" - -class Ui_ReceiveMailDialog; - -namespace vmime::net { -class folder; -}; - -namespace GpgFrontend::UI { - -class IMAPFolder; - -/** - * @brief - * - */ -class ReceiveMailDialog : public QDialog { - Q_OBJECT - public: - /** - * @brief Construct a new Receive Mail Dialog object - * - * @param parent - */ - explicit ReceiveMailDialog(QWidget* parent); - - private slots: - /** - * @brief - * - */ - void slot_refresh_data(); - - private: - std::shared_ptr<Ui_ReceiveMailDialog> ui_; ///< - std::vector<std::shared_ptr<IMAPFolder>> folders_; ///< - - /** - * @brief - * - * @param parent_folder - */ - void list_sub_folders(IMAPFolder* parent_folder, - const std::shared_ptr<vmime::net::folder>&); -}; - -} // namespace GpgFrontend::UI - -#endif // GPGFRONTEND_RECEIVEMAILDIALOG_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 |