diff options
author | Saturneric <[email protected]> | 2021-12-16 13:59:45 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-12-16 13:59:45 +0000 |
commit | 22846ce38fd28ba750ca20f30611752f94c2e260 (patch) | |
tree | 78da57142ba6d9e469b318ff57937255c9aa6995 /src | |
parent | Modified CI Files. (diff) | |
download | GpgFrontend-22846ce38fd28ba750ca20f30611752f94c2e260.tar.gz GpgFrontend-22846ce38fd28ba750ca20f30611752f94c2e260.zip |
Fixed Known Problem.
Diffstat (limited to '')
-rw-r--r-- | src/gpg/model/GpgKey.h | 1 | ||||
-rw-r--r-- | src/ui/UserInterfaceUtils.cpp | 51 | ||||
-rw-r--r-- | src/ui/settings/SettingsSendMail.cpp | 40 | ||||
-rw-r--r-- | src/ui/smtp/SendMailDialog.cpp | 32 | ||||
-rw-r--r-- | src/ui/widgets/KeyList.cpp | 39 | ||||
-rw-r--r-- | src/ui/widgets/KeyList.h | 4 |
6 files changed, 100 insertions, 67 deletions
diff --git a/src/gpg/model/GpgKey.h b/src/gpg/model/GpgKey.h index 4acfa45f..fb7d5735 100644 --- a/src/gpg/model/GpgKey.h +++ b/src/gpg/model/GpgKey.h @@ -153,7 +153,6 @@ class GpgKey { private: struct _key_ref_deletor { void operator()(gpgme_key_t _key) { - DLOG(INFO) << _("Called") << _key; if (_key != nullptr) gpgme_key_unref(_key); } }; diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index bd756c51..4fdf4cea 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -233,7 +233,9 @@ void CommonUtils::slotDoImportKeyFromKeyServer( const ImportCallbackFunctiopn& _callback) { auto key_data = network_reply->readAll(); auto key_data_ptr = - std::make_shared<ByteArray>(key_data.constData(), key_data.length()); + std::make_unique<ByteArray>(key_data.data(), key_data.size()); + LOG(INFO) << "reply data size" + << "raw" << key_data.size() << "copy" << key_data_ptr->size(); std::string status; auto error = network_reply->error(); if (error != QNetworkReply::NoError) { @@ -251,23 +253,24 @@ void CommonUtils::slotDoImportKeyFromKeyServer( status = _("Connection Error"); } } + static int id = 512; + id = ++id % 1024; + if (!id) id = 512; + LOG(INFO) << "id" << id; + // fixed for multiply thread + // switch to channel 1 + GpgImportInformation result = + GpgKeyImportExportor::GetInstance(id).ImportKey(std::move(key_data_ptr)); + LOG(INFO) << "import key done"; + std::string new_status = status; + if (result.imported == 1) { + new_status = _("The key has been updated"); + } else { + new_status = _("No need to update the key"); + } - auto thread = QThread::create([=]() { - // need copy - auto unique_key_data_ptr = std::make_unique<ByteArray>(*key_data_ptr); - GpgImportInformation result = GpgKeyImportExportor::GetInstance().ImportKey( - std::move(unique_key_data_ptr)); - - std::string new_status = status; - if (result.imported == 1) { - new_status = _("The key has been updated"); - } else { - new_status = _("No need to update the key"); - } - _callback(key_id, new_status, current_index, all_index); - }); - connect(thread, &QThread::finished, thread, &QThread::deleteLater); - thread->start(); + LOG(INFO) << "call callback" << key_id << current_index << all_index; + _callback(key_id, status, current_index, all_index); } void CommonUtils::slotImportKeyFromKeyServer( @@ -302,13 +305,17 @@ void CommonUtils::slotImportKeyFromKeyServer( LOG(INFO) << "request url" << req_url.toString().toStdString(); QNetworkReply* reply = _network_manager->get(QNetworkRequest(req_url)); - connect(reply, &QNetworkReply::finished, this, [=]() { - this->slotDoImportKeyFromKeyServer(reply, key_id, current_index, - all_index, callback); - reply->deleteLater(); - }); + connect(reply, &QNetworkReply::finished, this, + [this, reply, key_id, current_index, all_index, callback]() { + this->slotDoImportKeyFromKeyServer(reply, key_id, current_index, + all_index, callback); + // Delete network reply + reply->deleteLater(); + }); current_index++; } + + LOG(INFO) << "request done"; } } // namespace GpgFrontend::UI
\ No newline at end of file diff --git a/src/ui/settings/SettingsSendMail.cpp b/src/ui/settings/SettingsSendMail.cpp index 821bf978..733ed82f 100644 --- a/src/ui/settings/SettingsSendMail.cpp +++ b/src/ui/settings/SettingsSendMail.cpp @@ -49,7 +49,7 @@ SendMailTab::SendMailTab(QWidget* parent) ui->defaultSenderEmailEdit->setDisabled(state != Qt::Checked); ui->checkConnectionButton->setDisabled(state != Qt::Checked); }); - + #ifdef SMTP_SUPPORT connect(ui->checkConnectionButton, &QPushButton::clicked, this, &SendMailTab::slotCheckConnection); @@ -96,22 +96,6 @@ SendMailTab::SendMailTab(QWidget* parent) void SendMailTab::setSettings() { auto& settings = GlobalSettingStation::GetInstance().GetUISettings(); - ui->enableCheckBox->setCheckState(Qt::Unchecked); - try { - bool smtp_enable = settings.lookup("smtp.enable"); - if (smtp_enable) ui->enableCheckBox->setCheckState(Qt::Checked); - } catch (...) { - LOG(ERROR) << _("Setting Operation Error") << _("save_key_checked"); - } - - ui->identityCheckBox->setCheckState(Qt::Unchecked); - try { - bool identity_enable = settings.lookup("smtp.identity_enable"); - if (identity_enable) ui->identityCheckBox->setCheckState(Qt::Checked); - } catch (...) { - LOG(ERROR) << _("Setting Operation Error") << _("identity_enable"); - } - try { std::string mail_address = settings.lookup("smtp.mail_address"); ui->smtpServerAddressEdit->setText(mail_address.c_str()); @@ -154,6 +138,28 @@ void SendMailTab::setSettings() { } catch (...) { LOG(ERROR) << _("Setting Operation Error") << _("default_sender"); } + + ui->identityCheckBox->setCheckState(Qt::Unchecked); + try { + bool identity_enable = settings.lookup("smtp.identity_enable"); + if (identity_enable) + ui->identityCheckBox->setCheckState(Qt::Checked); + else + ui->identityCheckBox->setCheckState(Qt::Unchecked); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("identity_enable"); + } + + ui->enableCheckBox->setCheckState(Qt::Unchecked); + try { + bool smtp_enable = settings.lookup("smtp.enable"); + if (smtp_enable) + ui->enableCheckBox->setCheckState(Qt::Checked); + else + ui->enableCheckBox->setCheckState(Qt::Unchecked); + } catch (...) { + LOG(ERROR) << _("Setting Operation Error") << _("save_key_checked"); + } } void SendMailTab::applySettings() { diff --git a/src/ui/smtp/SendMailDialog.cpp b/src/ui/smtp/SendMailDialog.cpp index 9523fd7c..28cbdf60 100644 --- a/src/ui/smtp/SendMailDialog.cpp +++ b/src/ui/smtp/SendMailDialog.cpp @@ -60,9 +60,11 @@ SendMailDialog::SendMailDialog(const QString& text, QWidget* parent) ui->senderEdit->setText(defaultSender); 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 @@ -123,23 +125,25 @@ void SendMailDialog::slotConfirm() { errString.append(QString(" ") + _("Subject cannot be empty") + " \n"); } - 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->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; + } } - } - 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 (!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); diff --git a/src/ui/widgets/KeyList.cpp b/src/ui/widgets/KeyList.cpp index c18d610a..b6f39fff 100644 --- a/src/ui/widgets/KeyList.cpp +++ b/src/ui/widgets/KeyList.cpp @@ -35,8 +35,12 @@ namespace GpgFrontend::UI { +int KeyList::key_list_id = 2048; + KeyList::KeyList(QWidget* parent) - : QWidget(parent), ui(std::make_shared<Ui_KeyList>()) { + : QWidget(parent), + _m_key_list_id(key_list_id++), + ui(std::make_shared<Ui_KeyList>()) { init(); } @@ -44,7 +48,9 @@ KeyList::KeyList(KeyListRow::KeyType selectType, KeyListColumn::InfoType infoType, const std::function<bool(const GpgKey&)>& filter, QWidget* parent) - : QWidget(parent), ui(std::make_shared<Ui_KeyList>()) { + : QWidget(parent), + _m_key_list_id(key_list_id++), + ui(std::make_shared<Ui_KeyList>()) { init(); addListGroupTab(_("Default"), selectType, infoType, filter); } @@ -138,10 +144,11 @@ void KeyList::addListGroupTab( void KeyList::slotRefresh() { LOG(INFO) << _("Called"); emit signalRefreshStatusBar(_("Refreshing Key List..."), 3000); - _buffered_keys_list = nullptr; - auto thread = QThread::create([=]() { + auto thread = QThread::create([this, _id = _m_key_list_id]() { + std::lock_guard<std::mutex> guard(buffered_key_list_mutex); + _buffered_keys_list = nullptr; // buffered keys list - _buffered_keys_list = GpgKeyGetter::GetInstance().FetchKey(); + _buffered_keys_list = GpgKeyGetter::GetInstance(_id).FetchKey(); }); connect(thread, &QThread::finished, this, &KeyList::slotRefreshUI); connect(thread, &QThread::finished, thread, &QThread::deleteLater); @@ -364,7 +371,8 @@ void KeyList::dragEnterEvent(QDragEnterEvent* event) { void KeyList::importKeys(const QByteArray& inBuffer) { auto std_buffer = std::make_unique<ByteArray>(inBuffer.toStdString()); GpgImportInformation result = - GpgKeyImportExportor::GetInstance().ImportKey(std::move(std_buffer)); + GpgKeyImportExportor::GetInstance(_m_key_list_id) + .ImportKey(std::move(std_buffer)); new KeyImportDetailDialog(result, false, this); } @@ -373,8 +381,8 @@ void KeyList::slotDoubleClicked(const QModelIndex& index) { const auto& buffered_keys = mKeyTables[ui->keyGroupTab->currentIndex()].buffered_keys; if (mAction != nullptr) { - const auto key = - GpgKeyGetter::GetInstance().GetKey(buffered_keys[index.row()].id()); + const auto key = GpgKeyGetter::GetInstance(_m_key_list_id) + .GetKey(buffered_keys[index.row()].id()); mAction(key, this); } } @@ -399,19 +407,24 @@ std::string KeyList::getSelectedKey() { void KeyList::slotRefreshUI() { LOG(INFO) << _("Called") << _buffered_keys_list.get(); - if (_buffered_keys_list != nullptr) + if (_buffered_keys_list != nullptr) { + std::lock_guard<std::mutex> guard(buffered_key_list_mutex); for (auto& key_table : mKeyTables) { key_table.Refresh(GpgKeyGetter::GetKeysCopy(_buffered_keys_list)); } + } emit signalRefreshStatusBar(_("Key List Refreshed."), 1000); ui->refreshKeyListButton->setDisabled(false); } void KeyList::slotSyncWithKeyServer() { KeyIdArgsList key_ids; - for (const auto& key : *_buffered_keys_list) { - if (!(key.is_private_key() && key.has_master_key())) - key_ids.push_back(key.id()); + { + std::lock_guard<std::mutex> guard(buffered_key_list_mutex); + for (const auto& key : *_buffered_keys_list) { + if (!(key.is_private_key() && key.has_master_key())) + key_ids.push_back(key.id()); + } } updateCallbackCalled(-1, key_ids.size()); CommonUtils::GetInstance()->slotImportKeyFromKeyServer( @@ -419,7 +432,7 @@ void KeyList::slotSyncWithKeyServer() { size_t current_index, size_t all_index) { LOG(INFO) << _("Called") << key_id << status << current_index << all_index; - auto key = GpgKeyGetter::GetInstance().GetKey(key_id); + auto key = GpgKeyGetter::GetInstance(_m_key_list_id).GetKey(key_id); boost::format status_str = boost::format(_("Sync [%1%/%2%] %3% %4%")) % current_index % all_index % key.uids()->front().uid() % status; diff --git a/src/ui/widgets/KeyList.h b/src/ui/widgets/KeyList.h index 6dd9f61a..254e66be 100644 --- a/src/ui/widgets/KeyList.h +++ b/src/ui/widgets/KeyList.h @@ -132,6 +132,10 @@ class KeyList : public QWidget { void importKeys(const QByteArray& inBuffer); void updateCallbackCalled(ssize_t current_index, size_t all_index); + static int key_list_id; + int _m_key_list_id; + std::mutex buffered_key_list_mutex; + std::shared_ptr<Ui_KeyList> ui; QTableWidget* mKeyList{}; std::vector<KeyTable> mKeyTables; |