aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/help/GnupgTab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/dialog/help/GnupgTab.cpp')
-rw-r--r--src/ui/dialog/help/GnupgTab.cpp242
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();
}