aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2021-12-16 13:59:45 +0000
committerSaturneric <[email protected]>2021-12-16 13:59:45 +0000
commit22846ce38fd28ba750ca20f30611752f94c2e260 (patch)
tree78da57142ba6d9e469b318ff57937255c9aa6995 /src
parentModified CI Files. (diff)
downloadGpgFrontend-22846ce38fd28ba750ca20f30611752f94c2e260.tar.gz
GpgFrontend-22846ce38fd28ba750ca20f30611752f94c2e260.zip
Fixed Known Problem.
Diffstat (limited to '')
-rw-r--r--src/gpg/model/GpgKey.h1
-rw-r--r--src/ui/UserInterfaceUtils.cpp51
-rw-r--r--src/ui/settings/SettingsSendMail.cpp40
-rw-r--r--src/ui/smtp/SendMailDialog.cpp32
-rw-r--r--src/ui/widgets/KeyList.cpp39
-rw-r--r--src/ui/widgets/KeyList.h4
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;