diff options
Diffstat (limited to 'src/ui/dialog/help/GnupgTab.cpp')
-rw-r--r-- | src/ui/dialog/help/GnupgTab.cpp | 242 |
1 files changed, 199 insertions, 43 deletions
diff --git a/src/ui/dialog/help/GnupgTab.cpp b/src/ui/dialog/help/GnupgTab.cpp index 996d4ad9..1aceed1a 100644 --- a/src/ui/dialog/help/GnupgTab.cpp +++ b/src/ui/dialog/help/GnupgTab.cpp @@ -1,7 +1,7 @@ -/* - * Copyright (c) 2022. Saturneric +/** + * Copyright (C) 2021 Saturneric <[email protected]> * - * This file is part of GpgFrontend. + * 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 @@ -20,9 +20,10 @@ * 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. + * Saturneric <[email protected]> starting on May 12, 2021. * * SPDX-License-Identifier: GPL-3.0-or-later + * */ // @@ -31,21 +32,21 @@ #include "GnupgTab.h" -#include <shared_mutex> - -#include "ui/UserInterfaceUtils.h" +#include "core/module/ModuleManager.h" #include "ui_GnuPGInfo.h" GpgFrontend::UI::GnupgTab::GnupgTab(QWidget* parent) - : QWidget(parent), ui_(std::make_shared<Ui_GnuPGInfo>()) { + : QWidget(parent), + ui_(GpgFrontend::SecureCreateSharedObject<Ui_GnuPGInfo>()) { ui_->setupUi(this); QStringList components_column_titles; - components_column_titles << _("Name") << _("Description") << _("Version") - << _("Checksum") << _("Binary Path"); + components_column_titles << tr("Name") << tr("Description") << tr("Version") + << tr("Checksum") << tr("Binary Path"); - ui_->tabWidget->setTabText(0, _("Components")); - ui_->tabWidget->setTabText(1, _("Configurations")); + ui_->tabWidget->setTabText(0, tr("Components")); + ui_->tabWidget->setTabText(1, tr("Directories")); + ui_->tabWidget->setTabText(2, tr("Options")); ui_->componentDetailsTable->setColumnCount(components_column_titles.length()); ui_->componentDetailsTable->setHorizontalHeaderLabels( @@ -54,59 +55,113 @@ GpgFrontend::UI::GnupgTab::GnupgTab(QWidget* parent) ui_->componentDetailsTable->setSelectionBehavior( QAbstractItemView::SelectRows); - QStringList configurations_column_titles; - configurations_column_titles << _("Key") << _("Value"); + // tableitems not editable + ui_->componentDetailsTable->setEditTriggers( + QAbstractItemView::NoEditTriggers); + + // no focus (rectangle around tableitems) + // may be it should focus on whole row + ui_->componentDetailsTable->setFocusPolicy(Qt::NoFocus); + ui_->componentDetailsTable->setAlternatingRowColors(true); + + QStringList directories_column_titles; + directories_column_titles << tr("Directory Type") << tr("Path"); - ui_->configurationDetailsTable->setColumnCount( - configurations_column_titles.length()); - ui_->configurationDetailsTable->setHorizontalHeaderLabels( - configurations_column_titles); - ui_->configurationDetailsTable->horizontalHeader()->setStretchLastSection( + ui_->directoriesDetailsTable->setColumnCount( + directories_column_titles.length()); + ui_->directoriesDetailsTable->setHorizontalHeaderLabels( + directories_column_titles); + ui_->directoriesDetailsTable->horizontalHeader()->setStretchLastSection( false); - ui_->configurationDetailsTable->setSelectionBehavior( + ui_->directoriesDetailsTable->setSelectionBehavior( QAbstractItemView::SelectRows); // tableitems not editable - ui_->componentDetailsTable->setEditTriggers( + ui_->directoriesDetailsTable->setEditTriggers( QAbstractItemView::NoEditTriggers); // no focus (rectangle around tableitems) // may be it should focus on whole row - ui_->componentDetailsTable->setFocusPolicy(Qt::NoFocus); - ui_->componentDetailsTable->setAlternatingRowColors(true); + ui_->directoriesDetailsTable->setFocusPolicy(Qt::NoFocus); + ui_->directoriesDetailsTable->setAlternatingRowColors(true); + + QStringList options_column_titles; + options_column_titles << tr("Component") << tr("Group") << tr("Key") + << tr("Description") << tr("Default Value") + << tr("Value"); + + ui_->optionDetailsTable->setColumnCount(options_column_titles.length()); + ui_->optionDetailsTable->setHorizontalHeaderLabels(options_column_titles); + ui_->optionDetailsTable->horizontalHeader()->setStretchLastSection(false); + ui_->optionDetailsTable->setSelectionBehavior(QAbstractItemView::SelectRows); + + // tableitems not editable + ui_->optionDetailsTable->setEditTriggers(QAbstractItemView::NoEditTriggers); + + // no focus (rectangle around tableitems) + // may be it should focus on whole row + ui_->optionDetailsTable->setFocusPolicy(Qt::NoFocus); + ui_->optionDetailsTable->setAlternatingRowColors(true); process_software_info(); } void GpgFrontend::UI::GnupgTab::process_software_info() { - auto& ctx_info = GpgContext::GetInstance().GetInfo(); + const auto gnupg_version = Module::RetrieveRTValueTypedOrDefault<>( + "core", "gpgme.ctx.gnupg_version", QString{"2.0.0"}); + GF_UI_LOG_DEBUG("got gnupg version from rt: {}", gnupg_version); - ui_->gnupgVersionLabel->setText(QString::fromStdString( - fmt::format("Version: {}", ctx_info.GnupgVersion))); + ui_->gnupgVersionLabel->setText( + QString::fromStdString(fmt::format("Version: {}", gnupg_version))); - ui_->componentDetailsTable->setRowCount(ctx_info.ComponentsInfo.size()); + auto components = Module::ListRTChildKeys( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + "gnupg.components"); + GF_UI_LOG_DEBUG("got gnupg components from rt, size: {}", components.size()); + + ui_->componentDetailsTable->setRowCount(components.size()); int row = 0; - for (const auto& info : ctx_info.ComponentsInfo) { - if (info.second.size() != 4) continue; + for (auto& component : components) { + auto component_info_json_bytes = Module::RetrieveRTValueTypedOrDefault( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.components.%1").arg(component), QByteArray{}); + GF_UI_LOG_DEBUG("got gnupg component {} info from rt", component); + + auto component_info_json = + QJsonDocument::fromJson(component_info_json_bytes); + if (!component_info_json.isObject()) { + GF_UI_LOG_WARN("illegal gnupg component info, json: {}", + QString(component_info_json_bytes)); + continue; + } + + auto component_info = component_info_json.object(); + if (!component_info.contains("name")) { + GF_UI_LOG_WARN( + "illegal gnupg component info. it doesn't have a name, json: {}", + QString(component_info_json_bytes)); + continue; + } - auto* tmp0 = new QTableWidgetItem(QString::fromStdString(info.first)); + auto* tmp0 = new QTableWidgetItem(component_info["name"].toString()); tmp0->setTextAlignment(Qt::AlignCenter); ui_->componentDetailsTable->setItem(row, 0, tmp0); - auto* tmp1 = new QTableWidgetItem(QString::fromStdString(info.second[0])); + auto* tmp1 = new QTableWidgetItem(component_info["desc"].toString()); tmp1->setTextAlignment(Qt::AlignCenter); ui_->componentDetailsTable->setItem(row, 1, tmp1); - auto* tmp2 = new QTableWidgetItem(QString::fromStdString(info.second[1])); + auto* tmp2 = new QTableWidgetItem(component_info["version"].toString()); tmp2->setTextAlignment(Qt::AlignCenter); ui_->componentDetailsTable->setItem(row, 2, tmp2); - auto* tmp3 = new QTableWidgetItem(QString::fromStdString(info.second[3])); + auto* tmp3 = + new QTableWidgetItem(component_info["binary_checksum"].toString()); tmp3->setTextAlignment(Qt::AlignCenter); ui_->componentDetailsTable->setItem(row, 3, tmp3); - auto* tmp4 = new QTableWidgetItem(QString::fromStdString(info.second[2])); + auto* tmp4 = new QTableWidgetItem(component_info["path"].toString()); tmp4->setTextAlignment(Qt::AlignLeft); ui_->componentDetailsTable->setItem(row, 4, tmp4); @@ -115,23 +170,124 @@ void GpgFrontend::UI::GnupgTab::process_software_info() { ui_->componentDetailsTable->resizeColumnsToContents(); - ui_->configurationDetailsTable->setRowCount( - ctx_info.ConfigurationsInfo.size()); + auto directories = Module::ListRTChildKeys( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.dirs")); + + ui_->directoriesDetailsTable->setRowCount(directories.size()); row = 0; - for (const auto& info : ctx_info.ConfigurationsInfo) { - if (info.second.size() != 1) continue; + for (auto& dir : directories) { + const auto dir_path = Module::RetrieveRTValueTypedOrDefault( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.dirs.%1").arg(dir), QString{}); + + if (dir_path.isEmpty()) continue; - auto* tmp0 = new QTableWidgetItem(QString::fromStdString(info.first)); + auto* tmp0 = new QTableWidgetItem(dir); tmp0->setTextAlignment(Qt::AlignCenter); - ui_->configurationDetailsTable->setItem(row, 0, tmp0); + ui_->directoriesDetailsTable->setItem(row, 0, tmp0); - auto* tmp1 = new QTableWidgetItem(QString::fromStdString(info.second[0])); + auto* tmp1 = new QTableWidgetItem(dir_path); tmp1->setTextAlignment(Qt::AlignCenter); - ui_->configurationDetailsTable->setItem(row, 1, tmp1); + ui_->directoriesDetailsTable->setItem(row, 1, tmp1); row++; } - ui_->configurationDetailsTable->resizeColumnsToContents(); + ui_->directoriesDetailsTable->resizeColumnsToContents(); + + // calcualte the total row number of configuration table + row = 0; + for (auto& component : components) { + auto options = Module::ListRTChildKeys( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.components.%1.options").arg(component)); + for (auto& option : options) { + const auto option_info_json = + QJsonDocument::fromJson(Module::RetrieveRTValueTypedOrDefault( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.components.%1.options.%2") + .arg(component) + .arg(option), + QByteArray{})); + + if (!option_info_json.isObject()) continue; + + auto option_info = option_info_json.object(); + if (!option_info.contains("name") || option_info["flags"] == "1") { + continue; + } + row++; + } + } + + ui_->optionDetailsTable->setRowCount(row); + + row = 0; + QString configuration_group; + for (auto& component : components) { + auto options = Module::ListRTChildKeys( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.components.%1.options").arg(component)); + + for (auto& option : options) { + auto option_info_json_bytes = Module::RetrieveRTValueTypedOrDefault( + "com.bktus.gpgfrontend.module.integrated.gnupg-info-gathering", + QString("gnupg.components.%1.options.%2").arg(component).arg(option), + QByteArray{}); + GF_UI_LOG_DEBUG("got gnupg component's option {} info from rt, info: {}", + component, option_info_json_bytes); + + auto option_info_json = QJsonDocument::fromJson(option_info_json_bytes); + + if (!option_info_json.isObject()) { + GF_UI_LOG_WARN("illegal gnupg option info, json: {}", + QString(option_info_json_bytes)); + continue; + } + + auto option_info = option_info_json.object(); + if (!option_info.contains("name")) { + GF_UI_LOG_WARN( + "illegal gnupg configuation info. it doesn't have a name, json: {}", + QString(option_info_json_bytes)); + continue; + } + + if (option_info["flags"] == "1") { + configuration_group = option_info["name"].toString(); + continue; + } + + auto* tmp0 = new QTableWidgetItem(component); + tmp0->setTextAlignment(Qt::AlignCenter); + ui_->optionDetailsTable->setItem(row, 0, tmp0); + + auto* tmp1 = new QTableWidgetItem(configuration_group); + tmp1->setTextAlignment(Qt::AlignCenter); + ui_->optionDetailsTable->setItem(row, 1, tmp1); + + auto* tmp2 = new QTableWidgetItem(option_info["name"].toString()); + tmp2->setTextAlignment(Qt::AlignCenter); + ui_->optionDetailsTable->setItem(row, 2, tmp2); + + auto* tmp3 = new QTableWidgetItem(option_info["description"].toString()); + + tmp3->setTextAlignment(Qt::AlignLeft); + ui_->optionDetailsTable->setItem(row, 3, tmp3); + + auto* tmp4 = + new QTableWidgetItem(option_info["default_value"].toString()); + tmp4->setTextAlignment(Qt::AlignLeft); + ui_->optionDetailsTable->setItem(row, 4, tmp4); + + auto* tmp5 = new QTableWidgetItem(option_info["value"].toString()); + tmp5->setTextAlignment(Qt::AlignLeft); + ui_->optionDetailsTable->setItem(row, 5, tmp5); + + row++; + } + } + // ui_->configurationDetailsTable->resizeColumnsToContents(); } |