summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngo Klöcker <dev@ingo-kloecker.de>2023-02-13 15:56:20 +0100
committerIngo Klöcker <dev@ingo-kloecker.de>2023-02-14 09:25:21 +0100
commit73e46b34658c0130de5ab9e3f4ce1ac4ee35c5e2 (patch)
treead6e4e0a9a17fc4dc491196447aa0e8a945a9d14
parentccff6a96fc2b0b069c6fd3a6d2991a9b372ad714 (diff)
downloadgpgme-73e46b34658c0130de5ab9e3f4ce1ac4ee35c5e2.tar.gz
qt: Add signals for file-based and data-based progress
* lang/qt/src/decryptverifyarchivejob.h (DecryptVerifyArchiveJob): Add signals fileProgress and dataProgress. * lang/qt/src/encryptarchivejob.h (EncryptArchiveJob): Ditto. * lang/qt/src/signarchivejob.h (SignArchiveJob): Ditto. * lang/qt/src/signencryptarchivejob.h (SignEncryptArchiveJob): Ditto. * lang/qt/src/job_p.h (emitArchiveProgressSignals): New. * lang/qt/src/qgpgmedecryptverifyarchivejob.cpp (QGpgMEDecryptVerifyArchiveJob::QGpgMEDecryptVerifyArchiveJob): Emit appropriate signal when receiving Job::rawProgress signal. * lang/qt/src/qgpgmeencryptarchivejob.cpp (QGpgMEEncryptArchiveJob::QGpgMEEncryptArchiveJob): Ditto. * lang/qt/src/qgpgmesignarchivejob.cpp (QGpgMESignArchiveJob::QGpgMESignArchiveJob): Ditto. * lang/qt/src/qgpgmesignencryptarchivejob.cpp (QGpgMESignEncryptArchiveJob::QGpgMESignEncryptArchiveJob): Ditto. -- GnuPG-bug-id: 6342
-rw-r--r--lang/qt/src/decryptverifyarchivejob.h17
-rw-r--r--lang/qt/src/encryptarchivejob.h17
-rw-r--r--lang/qt/src/job_p.h21
-rw-r--r--lang/qt/src/qgpgmedecryptverifyarchivejob.cpp3
-rw-r--r--lang/qt/src/qgpgmeencryptarchivejob.cpp3
-rw-r--r--lang/qt/src/qgpgmesignarchivejob.cpp3
-rw-r--r--lang/qt/src/qgpgmesignencryptarchivejob.cpp3
-rw-r--r--lang/qt/src/signarchivejob.h17
-rw-r--r--lang/qt/src/signencryptarchivejob.h17
9 files changed, 101 insertions, 0 deletions
diff --git a/lang/qt/src/decryptverifyarchivejob.h b/lang/qt/src/decryptverifyarchivejob.h
index ea922bc4..4e72be2d 100644
--- a/lang/qt/src/decryptverifyarchivejob.h
+++ b/lang/qt/src/decryptverifyarchivejob.h
@@ -80,6 +80,23 @@ public:
virtual GpgME::Error start(const std::shared_ptr<QIODevice> &cipherText) = 0;
Q_SIGNALS:
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the number of files. In the scanning phase (i.e. while gpgtar checks
+ * which files to put into the archive), \a current is the current number of
+ * files and \a total is 0. In the writing phase, \a current is the number
+ * of processed files and \a total is the total number of files.
+ */
+ void fileProgress(int current, int total);
+
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the amount of processed data. It is only emitted in the writing phase.
+ * \a current is the processed amount data and \a total is the total amount
+ * of data to process. Both values never exceed 2^20.
+ */
+ void dataProgress(int current, int total);
+
void result(const GpgME::DecryptionResult &decryptionResult,
const GpgME::VerificationResult &verificationResult,
const QString &auditLogAsHtml = {},
diff --git a/lang/qt/src/encryptarchivejob.h b/lang/qt/src/encryptarchivejob.h
index 39b8fb14..b3c16c3a 100644
--- a/lang/qt/src/encryptarchivejob.h
+++ b/lang/qt/src/encryptarchivejob.h
@@ -81,6 +81,23 @@ public:
const GpgME::Context::EncryptionFlags flags) = 0;
Q_SIGNALS:
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the number of files. In the scanning phase (i.e. while gpgtar checks
+ * which files to put into the archive), \a current is the current number of
+ * files and \a total is 0. In the writing phase, \a current is the number
+ * of processed files and \a total is the total number of files.
+ */
+ void fileProgress(int current, int total);
+
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the amount of processed data. It is only emitted in the writing phase.
+ * \a current is the processed amount data and \a total is the total amount
+ * of data to process. Both values never exceed 2^20.
+ */
+ void dataProgress(int current, int total);
+
void result(const GpgME::EncryptionResult &result,
const QString &auditLogAsHtml = {},
const GpgME::Error &auditLogError = {});
diff --git a/lang/qt/src/job_p.h b/lang/qt/src/job_p.h
index ff99d6ea..7d0f9952 100644
--- a/lang/qt/src/job_p.h
+++ b/lang/qt/src/job_p.h
@@ -36,6 +36,8 @@
#include "job.h"
+#include "qgpgme_debug.h"
+
#include <memory>
namespace QGpgME
@@ -62,6 +64,25 @@ static T *jobPrivate(const Job *job) {
return dynamic_cast<T *>(d);
}
+// Helper for the archive job classes
+template<class JobClass>
+void emitArchiveProgressSignals(JobClass *job, const QString &what, int type, int current, int total)
+{
+ if (what != QLatin1String{"gpgtar"}) {
+ return;
+ }
+ switch (type) {
+ case 'c':
+ Q_EMIT job->fileProgress(current, total);
+ break;
+ case 's':
+ Q_EMIT job->dataProgress(current, total);
+ break;
+ default:
+ qCDebug(QGPGME_LOG) << job << __func__ << "Received progress for gpgtar with unknown type" << char(type);
+ };
+}
+
}
#endif // __QGPGME_JOB_P_H__
diff --git a/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp b/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp
index 2e8c89c1..ddbbac20 100644
--- a/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp
+++ b/lang/qt/src/qgpgmedecryptverifyarchivejob.cpp
@@ -77,6 +77,9 @@ QGpgMEDecryptVerifyArchiveJob::QGpgMEDecryptVerifyArchiveJob(Context *context)
{
setJobPrivate(this, std::unique_ptr<QGpgMEDecryptVerifyArchiveJobPrivate>{new QGpgMEDecryptVerifyArchiveJobPrivate{this}});
lateInitialization();
+ connect(this, &Job::rawProgress, this, [this](const QString &what, int type, int current, int total) {
+ emitArchiveProgressSignals(this, what, type, current, total);
+ });
}
static QGpgMEDecryptVerifyArchiveJob::result_type decrypt_verify(Context *ctx,
diff --git a/lang/qt/src/qgpgmeencryptarchivejob.cpp b/lang/qt/src/qgpgmeencryptarchivejob.cpp
index 91086426..3dc5b433 100644
--- a/lang/qt/src/qgpgmeencryptarchivejob.cpp
+++ b/lang/qt/src/qgpgmeencryptarchivejob.cpp
@@ -78,6 +78,9 @@ QGpgMEEncryptArchiveJob::QGpgMEEncryptArchiveJob(Context *context)
{
setJobPrivate(this, std::unique_ptr<QGpgMEEncryptArchiveJobPrivate>{new QGpgMEEncryptArchiveJobPrivate{this}});
lateInitialization();
+ connect(this, &Job::rawProgress, this, [this](const QString &what, int type, int current, int total) {
+ emitArchiveProgressSignals(this, what, type, current, total);
+ });
}
static QGpgMEEncryptArchiveJob::result_type encrypt(Context *ctx,
diff --git a/lang/qt/src/qgpgmesignarchivejob.cpp b/lang/qt/src/qgpgmesignarchivejob.cpp
index 0a99627a..cd569f31 100644
--- a/lang/qt/src/qgpgmesignarchivejob.cpp
+++ b/lang/qt/src/qgpgmesignarchivejob.cpp
@@ -78,6 +78,9 @@ QGpgMESignArchiveJob::QGpgMESignArchiveJob(Context *context)
{
setJobPrivate(this, std::unique_ptr<QGpgMESignArchiveJobPrivate>{new QGpgMESignArchiveJobPrivate{this}});
lateInitialization();
+ connect(this, &Job::rawProgress, this, [this](const QString &what, int type, int current, int total) {
+ emitArchiveProgressSignals(this, what, type, current, total);
+ });
}
static QGpgMESignArchiveJob::result_type sign(Context *ctx,
diff --git a/lang/qt/src/qgpgmesignencryptarchivejob.cpp b/lang/qt/src/qgpgmesignencryptarchivejob.cpp
index b75c4d0f..c5e00ef0 100644
--- a/lang/qt/src/qgpgmesignencryptarchivejob.cpp
+++ b/lang/qt/src/qgpgmesignencryptarchivejob.cpp
@@ -85,6 +85,9 @@ QGpgMESignEncryptArchiveJob::QGpgMESignEncryptArchiveJob(Context *context)
{
setJobPrivate(this, std::unique_ptr<QGpgMESignEncryptArchiveJobPrivate>{new QGpgMESignEncryptArchiveJobPrivate{this}});
lateInitialization();
+ connect(this, &Job::rawProgress, this, [this](const QString &what, int type, int current, int total) {
+ emitArchiveProgressSignals(this, what, type, current, total);
+ });
}
static QGpgMESignEncryptArchiveJob::result_type sign_encrypt(Context *ctx,
diff --git a/lang/qt/src/signarchivejob.h b/lang/qt/src/signarchivejob.h
index f30e3e5e..ef2b6754 100644
--- a/lang/qt/src/signarchivejob.h
+++ b/lang/qt/src/signarchivejob.h
@@ -80,6 +80,23 @@ public:
const std::shared_ptr<QIODevice> &output) = 0;
Q_SIGNALS:
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the number of files. In the scanning phase (i.e. while gpgtar checks
+ * which files to put into the archive), \a current is the current number of
+ * files and \a total is 0. In the writing phase, \a current is the number
+ * of processed files and \a total is the total number of files.
+ */
+ void fileProgress(int current, int total);
+
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the amount of processed data. It is only emitted in the writing phase.
+ * \a current is the processed amount data and \a total is the total amount
+ * of data to process. Both values never exceed 2^20.
+ */
+ void dataProgress(int current, int total);
+
void result(const GpgME::SigningResult &result,
const QString &auditLogAsHtml = {},
const GpgME::Error &auditLogError = {});
diff --git a/lang/qt/src/signencryptarchivejob.h b/lang/qt/src/signencryptarchivejob.h
index 2cc28a5e..a14b6d64 100644
--- a/lang/qt/src/signencryptarchivejob.h
+++ b/lang/qt/src/signencryptarchivejob.h
@@ -86,6 +86,23 @@ public:
const GpgME::Context::EncryptionFlags flags) = 0;
Q_SIGNALS:
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the number of files. In the scanning phase (i.e. while gpgtar checks
+ * which files to put into the archive), \a current is the current number of
+ * files and \a total is 0. In the writing phase, \a current is the number
+ * of processed files and \a total is the total number of files.
+ */
+ void fileProgress(int current, int total);
+
+ /**
+ * This signal is emitted whenever gpgtar sends a progress status update for
+ * the amount of processed data. It is only emitted in the writing phase.
+ * \a current is the processed amount data and \a total is the total amount
+ * of data to process. Both values never exceed 2^20.
+ */
+ void dataProgress(int current, int total);
+
void result(const GpgME::SigningResult &signingResult,
const GpgME::EncryptionResult &encryptionResult,
const QString &auditLogAsHtml = {},