summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authorIngo Klöcker <dev@ingo-kloecker.de>2022-04-29 10:50:31 +0200
committerIngo Klöcker <dev@ingo-kloecker.de>2022-04-29 10:50:31 +0200
commitfd97cbaa44b8e7914089319afac1e776c9a64283 (patch)
tree8cd4290a66a8cbc5eccd43c9ea6ba0cb56de1a10 /lang
parent62e770971786f272ecc079b78b11e798ec699d77 (diff)
downloadgpgme-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.cpp28
-rw-r--r--lang/qt/src/qgpgmerefreshsmimekeysjob.h2
-rw-r--r--lang/qt/src/refreshkeysjob.h15
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);
};