aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--lang/qt/src/changeexpiryjob.h19
-rw-r--r--lang/qt/src/qgpgmechangeexpiryjob.cpp19
-rw-r--r--lang/qt/src/qgpgmechangeexpiryjob.h5
4 files changed, 42 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 08d40116..2b74c69f 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,9 @@ Noteworthy changes in version 1.14.1 (unreleased)
* cpp: Support for set expire operations in the C++ bindings. [#5003]
+ * qt: Extended ChangeExpiryJob to support changing the expiry of
+ subkeys. [#4717]
+
* Interface changes relative to the 1.14.0 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gpgme_op_setexpire_start NEW.
diff --git a/lang/qt/src/changeexpiryjob.h b/lang/qt/src/changeexpiryjob.h
index 90834791..39ed52ea 100644
--- a/lang/qt/src/changeexpiryjob.h
+++ b/lang/qt/src/changeexpiryjob.h
@@ -37,10 +37,17 @@
#include "job.h"
+#ifdef BUILDING_QGPGME
+# include "key.h"
+#else
+# include <gpgme++/key.h>
+#endif
+
+#include <vector>
+
namespace GpgME
{
class Error;
-class Key;
}
class QDateTime;
@@ -76,6 +83,16 @@ public:
*/
virtual GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry) = 0;
+ /**
+ Starts the change-expiry operation. \a key is the key to change,
+ \a subkeys is a list of subkeys of the key, and \a expiry is the
+ new expiry time. If \a subkeys is empty, then the expiry of \a key
+ is changed. Otherwise, the expiry of \a subkeys is changed. If
+ \a expiry is not valid, then \a key or \a subkeys are set to never expire.
+ */
+ virtual GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry,
+ const std::vector<GpgME::Subkey> &subkeys);
+
Q_SIGNALS:
void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error());
};
diff --git a/lang/qt/src/qgpgmechangeexpiryjob.cpp b/lang/qt/src/qgpgmechangeexpiryjob.cpp
index 6eb5855f..68591b7e 100644
--- a/lang/qt/src/qgpgmechangeexpiryjob.cpp
+++ b/lang/qt/src/qgpgmechangeexpiryjob.cpp
@@ -54,20 +54,33 @@ QGpgMEChangeExpiryJob::QGpgMEChangeExpiryJob(Context *context)
QGpgMEChangeExpiryJob::~QGpgMEChangeExpiryJob() {}
-static QGpgMEChangeExpiryJob::result_type change_expiry(Context *ctx, const Key &key, const QDateTime &expiry)
+static QGpgMEChangeExpiryJob::result_type change_expiry(Context *ctx, const Key &key, const QDateTime &expiry,
+ const std::vector<Subkey> &subkeys)
{
// convert expiry to "seconds from now"; use 1 second from now if expiry is before the current datetime
const unsigned long expires = expiry.isValid()
? std::max<qint64>(QDateTime::currentDateTime().secsTo(expiry), 1)
: 0;
- auto err = ctx->setExpire(key, expires);
+ auto err = ctx->setExpire(key, expires, subkeys);
return std::make_tuple(err, QString(), Error());
}
Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry)
{
- run(std::bind(&change_expiry, std::placeholders::_1, key, expiry));
+ return start(key, expiry, std::vector<Subkey>());
+}
+
+Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry, const std::vector<Subkey> &subkeys)
+{
+ run(std::bind(&change_expiry, std::placeholders::_1, key, expiry, subkeys));
+ return Error();
+}
+
+/* For ABI compat not pure virtual. */
+Error ChangeExpiryJob::start(const Key &, const QDateTime &, const std::vector<Subkey> &)
+{
return Error();
}
+
#include "qgpgmechangeexpiryjob.moc"
diff --git a/lang/qt/src/qgpgmechangeexpiryjob.h b/lang/qt/src/qgpgmechangeexpiryjob.h
index 83565686..bb9b9ba8 100644
--- a/lang/qt/src/qgpgmechangeexpiryjob.h
+++ b/lang/qt/src/qgpgmechangeexpiryjob.h
@@ -60,6 +60,11 @@ public:
/* from ChangeExpiryJob */
GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry) Q_DECL_OVERRIDE;
+
+ /* from ChangeExpiryJob */
+ GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry,
+ const std::vector<GpgME::Subkey> &subkeys) Q_DECL_OVERRIDE;
+
};
}