diff options
author | Saturn&Eric <[email protected]> | 2022-07-23 14:54:51 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2022-07-23 14:54:51 +0000 |
commit | b244320b2d228189767aa6d59febceb6b64527fb (patch) | |
tree | 179d34e2a3e84231fad72c4bbe9f74673d0b74d0 /src/ui/dialog/import_export/KeyImportDetailDialog.cpp | |
parent | Merge pull request #68 from saturneric/develop-2.0.8 (diff) | |
parent | feat(project): add rpm package support (diff) | |
download | GpgFrontend-2.0.9.tar.gz GpgFrontend-2.0.9.zip |
Merge pull request #70 from saturneric/dev/2.0.8/saturnericv2.0.9
Develop 2.0.9.1
Diffstat (limited to 'src/ui/dialog/import_export/KeyImportDetailDialog.cpp')
-rw-r--r-- | src/ui/dialog/import_export/KeyImportDetailDialog.cpp | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/src/ui/dialog/import_export/KeyImportDetailDialog.cpp b/src/ui/dialog/import_export/KeyImportDetailDialog.cpp new file mode 100644 index 00000000..31183a34 --- /dev/null +++ b/src/ui/dialog/import_export/KeyImportDetailDialog.cpp @@ -0,0 +1,204 @@ +/** + * 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 "KeyImportDetailDialog.h" + +#include "core/function/gpg/GpgKeyGetter.h" + +namespace GpgFrontend::UI { +KeyImportDetailDialog::KeyImportDetailDialog(GpgImportInformation result, + bool automatic, QWidget* parent) + : GeneralDialog(typeid(KeyImportDetailDialog).name(), parent), + m_result_(std::move(result)) { + // If no key for import found, just show a message + if (m_result_.considered == 0) { + if (automatic) + QMessageBox::information(parent, _("Key Update Details"), + _("No keys found")); + else + QMessageBox::information(parent, _("Key Import Details"), + _("No keys found to import")); + emit finished(0); + this->close(); + this->deleteLater(); + } else { + auto* mv_box = new QVBoxLayout(); + + this->create_general_info_box(); + mv_box->addWidget(general_info_box_); + this->create_keys_table(); + mv_box->addWidget(keys_table_); + this->create_button_box(); + mv_box->addWidget(button_box_); + + this->setLayout(mv_box); + if (automatic) + this->setWindowTitle(_("Key Update Details")); + else + this->setWindowTitle(_("Key Import Details")); + + auto pos = QPoint(100, 100); + if (parent) pos += parent->pos(); + this->move(pos); + + this->setMinimumSize(QSize(600, 300)); + this->adjustSize(); + + this->setModal(true); + this->show(); + } +} + +void KeyImportDetailDialog::create_general_info_box() { + // GridBox for general import information + general_info_box_ = new QGroupBox(_("General key info")); + auto* generalInfoBoxLayout = new QGridLayout(general_info_box_); + + generalInfoBoxLayout->addWidget(new QLabel(QString(_("Considered")) + ": "), + 1, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.considered)), 1, 1); + int row = 2; + if (m_result_.unchanged != 0) { + generalInfoBoxLayout->addWidget( + new QLabel(QString(_("Public unchanged")) + ": "), row, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.unchanged)), row, 1); + row++; + } + if (m_result_.imported != 0) { + generalInfoBoxLayout->addWidget(new QLabel(QString(_("Imported")) + ": "), + row, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.imported)), row, 1); + row++; + } + if (m_result_.not_imported != 0) { + generalInfoBoxLayout->addWidget( + new QLabel(QString(_("Not Imported")) + ": "), row, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.not_imported)), row, 1); + row++; + } + if (m_result_.secret_read != 0) { + generalInfoBoxLayout->addWidget( + new QLabel(QString(_("Private Read")) + ": "), row, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.secret_read)), row, 1); + row++; + } + if (m_result_.secret_imported != 0) { + generalInfoBoxLayout->addWidget( + new QLabel(QString(_("Private Imported")) + ": "), row, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.secret_imported)), row, 1); + row++; + } + if (m_result_.secret_unchanged != 0) { + generalInfoBoxLayout->addWidget( + new QLabel(QString(_("Private Unchanged")) + ": "), row, 0); + generalInfoBoxLayout->addWidget( + new QLabel(QString::number(m_result_.secret_unchanged)), row, 1); + row++; + } +} + +void KeyImportDetailDialog::create_keys_table() { + LOG(INFO) << "KeyImportDetailDialog::create_keys_table() Called"; + + keys_table_ = new QTableWidget(this); + keys_table_->setRowCount(0); + keys_table_->setColumnCount(4); + keys_table_->setEditTriggers(QAbstractItemView::NoEditTriggers); + // Nothing is selectable + keys_table_->setSelectionMode(QAbstractItemView::NoSelection); + + QStringList headerLabels; + headerLabels << _("Name") << _("Email") << _("Status") << _("Fingerprint"); + keys_table_->verticalHeader()->hide(); + + keys_table_->setHorizontalHeaderLabels(headerLabels); + int row = 0; + for (const auto& imp_key : m_result_.importedKeys) { + keys_table_->setRowCount(row + 1); + GpgKey key = GpgKeyGetter::GetInstance().GetKey(imp_key.fpr); + if (!key.IsGood()) continue; + keys_table_->setItem( + row, 0, new QTableWidgetItem(QString::fromStdString(key.GetName()))); + keys_table_->setItem( + row, 1, new QTableWidgetItem(QString::fromStdString(key.GetEmail()))); + keys_table_->setItem( + row, 2, new QTableWidgetItem(get_status_string(imp_key.import_status))); + keys_table_->setItem( + row, 3, new QTableWidgetItem(QString::fromStdString(imp_key.fpr))); + row++; + } + keys_table_->horizontalHeader()->setSectionResizeMode( + 0, QHeaderView::ResizeToContents); + keys_table_->horizontalHeader()->setStretchLastSection(true); + keys_table_->resizeColumnsToContents(); +} + +QString KeyImportDetailDialog::get_status_string(int keyStatus) { + QString statusString; + // keystatus is greater than 15, if key is private + if (keyStatus > 15) { + statusString.append(_("Private")); + keyStatus = keyStatus - 16; + } else { + statusString.append(_("Public")); + } + if (keyStatus == 0) { + statusString.append(", " + QString(_("Unchanged"))); + } else { + if (keyStatus == 1) { + statusString.append(", " + QString(_("New Key"))); + } else { + if (keyStatus > 7) { + statusString.append(", " + QString(_("New Subkey"))); + keyStatus = keyStatus - 8; + } + if (keyStatus > 3) { + statusString.append(", " + QString(_("New Signature"))); + keyStatus = keyStatus - 4; + } + if (keyStatus > 1) { + statusString.append(", " + QString(_("New UID"))); + keyStatus = keyStatus - 2; + } + } + } + return statusString; +} + +void KeyImportDetailDialog::create_button_box() { + button_box_ = new QDialogButtonBox(QDialogButtonBox::Ok); + connect(button_box_, &QDialogButtonBox::accepted, this, + &KeyImportDetailDialog::close); +} +} // namespace GpgFrontend::UI |