summaryrefslogtreecommitdiffstats
path: root/libqpdf/qpdf-c.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2020-12-20 20:43:08 +0100
committerJay Berkenbilt <ejb@ql.org>2020-12-20 20:43:24 +0100
commit573b6eb8b1801b40a4b6eb32cfd159f532876510 (patch)
tree0bc5a56ce0a267037b60990d90a01dadb5948622 /libqpdf/qpdf-c.cc
parent20509770999f705c25670bb14a8bb83aa1cc5b96 (diff)
downloadqpdf-573b6eb8b1801b40a4b6eb32cfd159f532876510.tar.zst
Provide qpdf write progress reporting from C API (fixes #487)
Diffstat (limited to 'libqpdf/qpdf-c.cc')
-rw-r--r--libqpdf/qpdf-c.cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc
index d3ada5fd..0d37f732 100644
--- a/libqpdf/qpdf-c.cc
+++ b/libqpdf/qpdf-c.cc
@@ -57,6 +57,30 @@ _qpdf_data::~_qpdf_data()
{
}
+class ProgressReporter: public QPDFWriter::ProgressReporter
+{
+ public:
+ ProgressReporter(void (*handler)(int, void*), void* data);
+ virtual ~ProgressReporter() = default;
+ virtual void reportProgress(int);
+
+ private:
+ void (*handler)(int, void*);
+ void* data;
+};
+
+ProgressReporter::ProgressReporter(void (*handler)(int, void*), void* data) :
+ handler(handler),
+ data(data)
+{
+}
+
+void
+ProgressReporter::reportProgress(int progress)
+{
+ this->handler(progress, this->data);
+}
+
// must set qpdf->filename and qpdf->password
static void call_read(qpdf_data qpdf)
{
@@ -752,6 +776,15 @@ void qpdf_force_pdf_version_and_extension(
qpdf->qpdf_writer->forcePDFVersion(version, extension_level);
}
+void qpdf_register_progress_reporter(
+ qpdf_data qpdf,
+ void (*report_progress)(int percent, void* data),
+ void* data)
+{
+ qpdf->qpdf_writer->registerProgressReporter(
+ new ProgressReporter(report_progress, data));
+}
+
QPDF_ERROR_CODE qpdf_write(qpdf_data qpdf)
{
QPDF_ERROR_CODE status = QPDF_SUCCESS;