From 73e46b34658c0130de5ab9e3f4ce1ac4ee35c5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Mon, 13 Feb 2023 15:56:20 +0100 Subject: [PATCH] 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 --- lang/qt/src/decryptverifyarchivejob.h | 17 +++++++++++++++ lang/qt/src/encryptarchivejob.h | 17 +++++++++++++++ lang/qt/src/job_p.h | 21 +++++++++++++++++++ lang/qt/src/qgpgmedecryptverifyarchivejob.cpp | 3 +++ lang/qt/src/qgpgmeencryptarchivejob.cpp | 3 +++ lang/qt/src/qgpgmesignarchivejob.cpp | 3 +++ lang/qt/src/qgpgmesignencryptarchivejob.cpp | 3 +++ lang/qt/src/signarchivejob.h | 17 +++++++++++++++ lang/qt/src/signencryptarchivejob.h | 17 +++++++++++++++ 9 files changed, 101 insertions(+) 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 &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 namespace QGpgME @@ -62,6 +64,25 @@ static T *jobPrivate(const Job *job) { return dynamic_cast(d); } +// Helper for the archive job classes +template +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{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{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{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{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 &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 = {},