aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/utils/GpgUtils.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-11-02 15:36:57 +0000
committersaturneric <[email protected]>2024-11-02 15:36:57 +0000
commit170b29aca537fc79837939cca67f8913964445c1 (patch)
treed7858dcd485a6a9d273c76ffe7179f6a2ef2d197 /src/core/utils/GpgUtils.cpp
parentfix: should select channel before any gpg operation (diff)
downloadGpgFrontend-170b29aca537fc79837939cca67f8913964445c1.tar.gz
GpgFrontend-170b29aca537fc79837939cca67f8913964445c1.zip
feat: support favorite key pairs for multi key databases
Diffstat (limited to 'src/core/utils/GpgUtils.cpp')
-rw-r--r--src/core/utils/GpgUtils.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp
index 3d584b8f..8d337d66 100644
--- a/src/core/utils/GpgUtils.cpp
+++ b/src/core/utils/GpgUtils.cpp
@@ -28,6 +28,9 @@
#include "GpgUtils.h"
+#include "core/model/KeyDatabaseInfo.h"
+#include "core/module/ModuleManager.h"
+
namespace GpgFrontend {
inline auto Trim(QString& s) -> QString { return s.trimmed(); }
@@ -169,4 +172,43 @@ auto SetExtensionOfOutputFileForArchive(const QString& path, GpgOperation opera,
return file_info.absolutePath() + "/" + file_info.baseName();
}
+static QList<KeyDatabaseInfo> gpg_key_database_info_cache;
+
+auto GPGFRONTEND_CORE_EXPORT GetGpgKeyDatabaseInfos()
+ -> QList<KeyDatabaseInfo> {
+ if (!gpg_key_database_info_cache.empty()) return gpg_key_database_info_cache;
+
+ auto context_index_list = Module::ListRTChildKeys("core", "gpgme.ctx.list");
+ gpg_key_database_info_cache.resize(
+ static_cast<qsizetype>(context_index_list.size()));
+
+ for (auto& context_index : context_index_list) {
+ LOG_D() << "context grt key: " << context_index;
+
+ const auto grt_key_prefix = QString("gpgme.ctx.list.%1").arg(context_index);
+ auto channel = Module::RetrieveRTValueTypedOrDefault(
+ "core", grt_key_prefix + ".channel", -1);
+ auto database_name = Module::RetrieveRTValueTypedOrDefault(
+ "core", grt_key_prefix + ".database_name", QString{});
+ auto database_path = Module::RetrieveRTValueTypedOrDefault(
+ "core", grt_key_prefix + ".database_path", QString{});
+
+ LOG_D() << "context grt channel: " << channel
+ << "GRT key prefix: " << grt_key_prefix
+ << "database name: " << database_name;
+
+ auto i = KeyDatabaseInfo();
+ i.channel = channel;
+ i.name = database_name;
+ i.path = database_path;
+ gpg_key_database_info_cache[channel] = i;
+ }
+
+ return gpg_key_database_info_cache;
+}
+auto GPGFRONTEND_CORE_EXPORT GetGpgKeyDatabaseName(int channel) -> QString {
+ auto info = GetGpgKeyDatabaseInfos();
+ if (channel >= info.size()) return {};
+ return info[channel].name;
+}
} // namespace GpgFrontend