From 73a0f7ddf8a8db0057201374f1518d2063ad9a06 Mon Sep 17 00:00:00 2001 From: saturneric Date: Wed, 16 Apr 2025 01:19:53 +0200 Subject: feat: support key groups --- src/ui/main_window/MainWindowGpgOperaFunction.cpp | 49 ++++++++++------------- 1 file changed, 22 insertions(+), 27 deletions(-) (limited to 'src/ui/main_window/MainWindowGpgOperaFunction.cpp') diff --git a/src/ui/main_window/MainWindowGpgOperaFunction.cpp b/src/ui/main_window/MainWindowGpgOperaFunction.cpp index dc65fd1c..925950eb 100644 --- a/src/ui/main_window/MainWindowGpgOperaFunction.cpp +++ b/src/ui/main_window/MainWindowGpgOperaFunction.cpp @@ -27,8 +27,6 @@ */ #include "MainWindow.h" -#include "core/function/GlobalSettingStation.h" -#include "core/function/gpg/GpgKeyGetter.h" #include "core/utils/GpgUtils.h" #include "core/utils/IOUtils.h" #include "ui/UserInterfaceUtils.h" @@ -42,10 +40,10 @@ namespace GpgFrontend::UI { auto MainWindow::encrypt_operation_key_validate( const QSharedPointer& contexts) -> bool { - auto key_ids = m_key_list_->GetChecked(); + auto keys = m_key_list_->GetCheckedKeys(); // symmetric encryption - if (key_ids.isEmpty()) { + if (keys.isEmpty()) { auto ret = QMessageBox::information( this, tr("Symmetric Encryption"), tr("No Key Selected. Do you want to encrypt with a " @@ -56,7 +54,7 @@ auto MainWindow::encrypt_operation_key_validate( contexts->keys = {}; } else { contexts->keys = check_keys_helper( - key_ids, [](const GpgKey& key) { return key.IsHasActualEncrCap(); }, + keys, [](const GpgAbstractKeyPtr& key) { return key->IsHasEncrCap(); }, tr("The selected keypair cannot be used for encryption.")); if (contexts->keys.empty()) return false; } @@ -75,12 +73,9 @@ auto MainWindow::sign_operation_key_validate( // return when canceled if (!signers_picker->GetStatus()) return false; - auto signer_key_ids = signers_picker->GetCheckedSigners(); - auto signer_keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(signer_key_ids); + auto signer_keys = signers_picker->GetCheckedSigners(); assert(std::all_of(signer_keys.begin(), signer_keys.end(), - [](const auto& key) { return key.IsGood(); })); + [](const auto& key) { return key->IsGood(); })); contexts->singer_keys = signer_keys; @@ -150,21 +145,18 @@ auto MainWindow::check_write_file_paths_helper(const QStringList& o_paths) } auto MainWindow::check_keys_helper( - const KeyIdArgsList& key_ids, - const std::function& capability_check, - const QString& capability_err_string) -> GpgKeyList { - if (key_ids.empty()) { + const GpgAbstractKeyPtrList& keys, + const std::function& capability_check, + const QString& capability_err_string) -> GpgAbstractKeyPtrList { + if (keys.isEmpty()) { QMessageBox::critical( this, tr("No Key Checked"), tr("Please check the key in the key toolbox on the right.")); return {}; } - auto keys = - GpgKeyGetter::GetInstance(m_key_list_->GetCurrentGpgContextChannel()) - .GetKeys(key_ids); assert(std::all_of(keys.begin(), keys.end(), - [](const auto& key) { return key.IsGood(); })); + [](const auto& key) { return key->IsGood(); })); // check key abilities for (const auto& key : keys) { @@ -172,7 +164,7 @@ auto MainWindow::check_keys_helper( QMessageBox::critical(nullptr, tr("Invalid KeyPair"), capability_err_string + "

" + tr("For example the Following Key:") + - "
" + key.UIDs().front().GetUID()); + "
" + key->Email()); return {}; } } @@ -202,9 +194,10 @@ void MainWindow::SlotSign() { auto contexts = QSharedPointer::create(); contexts->ascii = true; - auto key_ids = m_key_list_->GetChecked(); + auto keys = m_key_list_->GetCheckedKeys(); + contexts->keys = check_keys_helper( - key_ids, [](const GpgKey& key) { return key.IsHasActualSignCap(); }, + keys, [](const GpgAbstractKeyPtr& key) { return key->IsHasSignCap(); }, tr("The selected key contains a key that does not actually have a " "sign usage.")); if (contexts->keys.empty()) return; @@ -255,9 +248,10 @@ void MainWindow::SlotEncryptSign() { auto contexts = QSharedPointer::create(); contexts->ascii = true; - auto key_ids = m_key_list_->GetChecked(); + auto keys = m_key_list_->GetCheckedKeys(); + contexts->keys = check_keys_helper( - key_ids, [](const GpgKey& key) { return key.IsHasActualEncrCap(); }, + keys, [](const GpgAbstractKeyPtr& key) { return key->IsHasEncrCap(); }, tr("The selected keypair cannot be used for encryption.")); if (contexts->keys.empty()) return; @@ -363,9 +357,10 @@ void MainWindow::SlotFileSign(const QStringList& paths, bool ascii) { contexts->ascii = ascii; - auto key_ids = m_key_list_->GetChecked(); + auto keys = m_key_list_->GetCheckedKeys(); + contexts->keys = check_keys_helper( - key_ids, [](const GpgKey& key) { return key.IsHasActualSignCap(); }, + keys, [](const GpgAbstractKeyPtr& key) { return key->IsHasSignCap(); }, tr("The selected key contains a key that does not actually have a " "sign usage.")); if (contexts->keys.empty()) return; @@ -442,9 +437,9 @@ void MainWindow::SlotFileEncryptSign(const QStringList& paths, bool ascii) { auto contexts = QSharedPointer::create(); contexts->ascii = ascii; - auto key_ids = m_key_list_->GetChecked(); + auto keys = m_key_list_->GetCheckedKeys(); contexts->keys = check_keys_helper( - key_ids, [](const GpgKey& key) { return key.IsHasActualEncrCap(); }, + keys, [](const GpgAbstractKeyPtr& key) { return key->IsHasEncrCap(); }, tr("The selected keypair cannot be used for encryption.")); if (contexts->keys.empty()) return; -- cgit v1.2.3