diff options
author | Ingo Klöcker <dev@ingo-kloecker.de> | 2022-04-29 10:50:31 +0200 |
---|---|---|
committer | Ingo Klöcker <dev@ingo-kloecker.de> | 2022-04-29 10:50:31 +0200 |
commit | fd97cbaa44b8e7914089319afac1e776c9a64283 (patch) | |
tree | 8cd4290a66a8cbc5eccd43c9ea6ba0cb56de1a10 /lang | |
parent | 62e770971786f272ecc079b78b11e798ec699d77 (diff) | |
download | gpgme-fd97cbaa44b8e7914089319afac1e776c9a64283.tar.gz |
qt: Allow refreshing a list of keys
* lang/qt/src/refreshkeysjob.h (class RefreshKeysJob): Add pure virtual
member function start taking a list of keys.
* lang/qt/src/qgpgmerefreshsmimekeysjob.h,
lang/qt/src/qgpgmerefreshsmimekeysjob.cpp (class
QGpgMERefreshSMIMEKeysJob): Implement new member function.
--
The new overload makes it easier to refresh some keys if one does
already have Keys.
GnuPG-bug-id: 5951
Diffstat (limited to 'lang')
-rw-r--r-- | lang/qt/src/qgpgmerefreshsmimekeysjob.cpp | 28 | ||||
-rw-r--r-- | lang/qt/src/qgpgmerefreshsmimekeysjob.h | 2 | ||||
-rw-r--r-- | lang/qt/src/refreshkeysjob.h | 15 |
3 files changed, 38 insertions, 7 deletions
diff --git a/lang/qt/src/qgpgmerefreshsmimekeysjob.cpp b/lang/qt/src/qgpgmerefreshsmimekeysjob.cpp index 1cb7abe3..81257d55 100644 --- a/lang/qt/src/qgpgmerefreshsmimekeysjob.cpp +++ b/lang/qt/src/qgpgmerefreshsmimekeysjob.cpp @@ -44,8 +44,11 @@ #include "qgpgme_debug.h" #include "context.h" +#include <key.h> #include <QByteArray> +#include <QMetaObject> +#include <QProcess> #include <QStringList> #include <gpg-error.h> @@ -81,6 +84,31 @@ GpgME::Error QGpgMERefreshSMIMEKeysJob::start(const QStringList &patterns) return startAProcess(); } +GpgME::Error QGpgMERefreshSMIMEKeysJob::start(const std::vector<GpgME::Key> &keys) +{ + if (keys.empty()) { + QMetaObject::invokeMethod(this, [this]() { + Q_EMIT slotProcessExited(0, QProcess::NormalExit); + }, Qt::QueuedConnection); + return {}; + } + + const bool gotWrongKeys = std::any_of(std::begin(keys), std::end(keys), [](const auto &k) { + return k.protocol() != GpgME::CMS; + }); + if (gotWrongKeys) { + qCDebug(QGPGME_LOG) << "Error: At least one of the keys is not an S/MIME key"; + return GpgME::Error::fromCode(GPG_ERR_INV_VALUE); + } + + QStringList fprs; + fprs.reserve(keys.size()); + std::transform(std::begin(keys), std::end(keys), std::back_inserter(fprs), [](const auto &k) { + return QString::fromLatin1(k.primaryFingerprint()); + }); + return start(fprs); +} + #if MAX_CMD_LENGTH < 65 + 128 #error MAX_CMD_LENGTH is too low #endif diff --git a/lang/qt/src/qgpgmerefreshsmimekeysjob.h b/lang/qt/src/qgpgmerefreshsmimekeysjob.h index 8ed0b379..aa2d5b73 100644 --- a/lang/qt/src/qgpgmerefreshsmimekeysjob.h +++ b/lang/qt/src/qgpgmerefreshsmimekeysjob.h @@ -58,6 +58,8 @@ public: /* from RefreshKeysJob */ GpgME::Error start(const QStringList &patterns) Q_DECL_OVERRIDE; + GpgME::Error start(const std::vector<GpgME::Key> &keys) override; + private Q_SLOTS: /* from Job */ void slotCancel() Q_DECL_OVERRIDE; diff --git a/lang/qt/src/refreshkeysjob.h b/lang/qt/src/refreshkeysjob.h index c4ba74a0..b6978060 100644 --- a/lang/qt/src/refreshkeysjob.h +++ b/lang/qt/src/refreshkeysjob.h @@ -73,19 +73,20 @@ public: ~RefreshKeysJob(); /** - Starts the keylist operation. \a pattern is a list of patterns + Starts the refresh operation. \a pattern is a list of patterns used to restrict the list of keys returned. Empty patterns are ignored. If \a pattern is empty or contains only empty strings, - all keys are returned (however, the backend is free to truncate - the result and should do so; when this happens, it will be - reported by the reult object). + all keys are refreshed. - If \a secretOnly is true, only keys for which the secret key is - also available are returned. Use this if you need to select a - key for signing. + Only implemented for S/MIME. */ virtual GpgME::Error start(const QStringList &patterns) = 0; + /** + Starts a refresh of the \a keys. + */ + virtual GpgME::Error start(const std::vector<GpgME::Key> &keys) = 0; + Q_SIGNALS: void result(const GpgME::Error &error); }; |