aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/controller/GnuPGControllerDialog.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-11-22 22:49:09 +0000
committersaturneric <[email protected]>2024-11-22 22:49:09 +0000
commitac78b0fe2d8c285ef1f051d883ac046ce6557fe7 (patch)
tree116baa5ee75a40b84017bcad0266f283542743b8 /src/ui/dialog/controller/GnuPGControllerDialog.cpp
parentfeat: improve version option (diff)
downloadGpgFrontend-ac78b0fe2d8c285ef1f051d883ac046ce6557fe7.tar.gz
GpgFrontend-ac78b0fe2d8c285ef1f051d883ac046ce6557fe7.zip
feat: default key db is not editable
Diffstat (limited to '')
-rw-r--r--src/ui/dialog/controller/GnuPGControllerDialog.cpp69
1 files changed, 40 insertions, 29 deletions
diff --git a/src/ui/dialog/controller/GnuPGControllerDialog.cpp b/src/ui/dialog/controller/GnuPGControllerDialog.cpp
index 2e817ba9..fe334e45 100644
--- a/src/ui/dialog/controller/GnuPGControllerDialog.cpp
+++ b/src/ui/dialog/controller/GnuPGControllerDialog.cpp
@@ -33,6 +33,7 @@
#include "core/model/SettingsObject.h"
#include "core/module/ModuleManager.h"
#include "core/struct/settings_object/KeyDatabaseListSO.h"
+#include "core/utils/GpgUtils.h"
#include "ui/UISignalStation.h"
#include "ui/dialog/GeneralDialog.h"
#include "ui/dialog/KeyDatabaseEditDialog.h"
@@ -269,9 +270,9 @@ void GnuPGControllerDialog::set_settings() {
this->slot_set_restart_needed(kNonRestartCode);
- auto key_database_list =
- KeyDatabaseListSO(SettingsObject("key_database_list"));
- buffered_key_db_so_ = key_database_list.key_databases;
+ buffered_key_db_so_ = GetGpgKeyDatabaseInfos();
+ editable_key_db_so_ = buffered_key_db_so_;
+ editable_key_db_so_.pop_front();
this->slot_refresh_key_database_table();
}
@@ -297,7 +298,10 @@ void GnuPGControllerDialog::apply_settings() {
auto so = SettingsObject("key_database_list");
auto key_database_list = KeyDatabaseListSO(so);
- key_database_list.key_databases = buffered_key_db_so_;
+ key_database_list.key_databases.clear();
+ for (const auto& key_db_info : editable_key_db_so_) {
+ key_database_list.key_databases.append(KeyDatabaseItemSO(key_db_info));
+ }
so.Store(key_database_list.ToJson());
}
@@ -343,9 +347,9 @@ auto GnuPGControllerDialog::check_custom_gnupg_path(QString path) -> bool {
}
void GnuPGControllerDialog::slot_add_new_key_database() {
- auto* dialog = new KeyDatabaseEditDialog(this);
+ auto* dialog = new KeyDatabaseEditDialog(editable_key_db_so_, this);
- if (buffered_key_db_so_.size() >= 8) {
+ if (editable_key_db_so_.size() >= 8) {
QMessageBox::critical(
this, tr("Maximum Key Database Limit Reached"),
tr("Currently, GpgFrontend supports a maximum of 8 key databases. "
@@ -369,11 +373,15 @@ void GnuPGControllerDialog::slot_add_new_key_database() {
LOG_D() << "new key database path, name: " << name
<< "path: " << path;
- KeyDatabaseItemSO key_database;
+ KeyDatabaseInfo key_database;
key_database.name = name;
key_database.path = path;
+ key_database.channel = buffered_key_db_so_.size();
key_databases.append(key_database);
+ editable_key_db_so_ = buffered_key_db_so_;
+ editable_key_db_so_.pop_front();
+
// refresh ui
slot_refresh_key_database_table();
@@ -384,7 +392,7 @@ void GnuPGControllerDialog::slot_add_new_key_database() {
}
void GnuPGControllerDialog::slot_refresh_key_database_table() {
- auto key_databases = buffered_key_db_so_;
+ auto& key_databases = editable_key_db_so_;
ui_->keyDatabaseTable->setRowCount(static_cast<int>(key_databases.size()));
int index = 0;
@@ -396,7 +404,7 @@ void GnuPGControllerDialog::slot_refresh_key_database_table() {
i_name->setTextAlignment(Qt::AlignCenter);
ui_->keyDatabaseTable->setVerticalHeaderItem(
- index, new QTableWidgetItem(QString::number(index)));
+ index, new QTableWidgetItem(QString::number(index + 1)));
ui_->keyDatabaseTable->setItem(index, 0, i_name);
ui_->keyDatabaseTable->setItem(index, 1,
@@ -417,7 +425,7 @@ void GnuPGControllerDialog::contextMenuEvent(QContextMenuEvent* event) {
void GnuPGControllerDialog::slot_remove_existing_key_database() {
const auto row_size = ui_->keyDatabaseTable->rowCount();
- auto& key_databases = buffered_key_db_so_;
+ auto& key_databases = editable_key_db_so_;
for (int i = 0; i < row_size; i++) {
auto* const item = ui_->keyDatabaseTable->item(i, 1);
if (!item->isSelected()) continue;
@@ -434,7 +442,7 @@ void GnuPGControllerDialog::slot_remove_existing_key_database() {
void GnuPGControllerDialog::slot_open_key_database() {
const auto row_size = ui_->keyDatabaseTable->rowCount();
- auto& key_databases = buffered_key_db_so_;
+ auto& key_databases = editable_key_db_so_;
for (int i = 0; i < row_size; i++) {
auto* const item = ui_->keyDatabaseTable->item(i, 1);
if (!item->isSelected()) continue;
@@ -449,7 +457,7 @@ void GnuPGControllerDialog::slot_move_up_key_database() {
if (row_size <= 0) return;
- auto& key_databases = buffered_key_db_so_;
+ auto& key_databases = editable_key_db_so_;
for (int i = 0; i < row_size; i++) {
auto* const item = ui_->keyDatabaseTable->item(i, 1);
@@ -479,7 +487,7 @@ void GnuPGControllerDialog::slot_move_to_top_key_database() {
if (row_size <= 0) return;
- auto& key_databases = buffered_key_db_so_;
+ auto& key_databases = editable_key_db_so_;
for (int i = 0; i < row_size; i++) {
auto* const item = ui_->keyDatabaseTable->item(i, 1);
@@ -512,7 +520,7 @@ void GnuPGControllerDialog::slot_move_down_key_database() {
if (row_size <= 0) return;
- auto& key_databases = buffered_key_db_so_;
+ auto& key_databases = editable_key_db_so_;
for (int i = row_size - 1; i >= 0; i--) {
auto* const item = ui_->keyDatabaseTable->item(i, 1);
@@ -557,31 +565,34 @@ void GnuPGControllerDialog::slot_edit_key_database() {
return;
}
- auto& key_databases = buffered_key_db_so_;
- KeyDatabaseItemSO& selected_key_database = key_databases[selected_row];
- auto* dialog = new KeyDatabaseEditDialog(this);
+ auto& key_databases = editable_key_db_so_;
+ KeyDatabaseInfo& selected_key_database = key_databases[selected_row];
+ auto* dialog = new KeyDatabaseEditDialog(editable_key_db_so_, this);
dialog->SetDefaultName(selected_key_database.name);
dialog->SetDefaultPath(selected_key_database.path);
connect(dialog, &KeyDatabaseEditDialog::SignalKeyDatabaseInfoAccepted, this,
- [this, selected_row](const QString& name, const QString& path) {
- auto& key_databases = buffered_key_db_so_;
-
- for (int i = 0; i < key_databases.size(); i++) {
- if (i != selected_row &&
- QFileInfo(key_databases[i].path) == QFileInfo(path)) {
- QMessageBox::warning(
- this, tr("Duplicate Key Database Paths"),
- tr("The edited key database path duplicates a previously "
- "existing one."));
- return;
+ [this, selected_row, selected_key_database](const QString& name,
+ const QString& path) {
+ auto& all_key_databases = buffered_key_db_so_;
+
+ if (selected_key_database.path != path) {
+ for (int i = 0; i < all_key_databases.size(); i++) {
+ if (i != selected_row &&
+ QFileInfo(all_key_databases[i].path) == QFileInfo(path)) {
+ QMessageBox::warning(
+ this, tr("Duplicate Key Database Paths"),
+ tr("The edited key database path duplicates a previously "
+ "existing one."));
+ return;
+ }
}
}
LOG_D() << "edit key database path, name: " << name
<< "path: " << path;
- KeyDatabaseItemSO& key_database = key_databases[selected_row];
+ KeyDatabaseInfo& key_database = editable_key_db_so_[selected_row];
key_database.name = name;
key_database.path = path;