diff options
author | saturneric <[email protected]> | 2024-11-02 15:36:57 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2024-11-02 15:36:57 +0000 |
commit | 170b29aca537fc79837939cca67f8913964445c1 (patch) | |
tree | d7858dcd485a6a9d273c76ffe7179f6a2ef2d197 /src/core/utils/GpgUtils.cpp | |
parent | fix: should select channel before any gpg operation (diff) | |
download | GpgFrontend-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.cpp | 42 |
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 |