From 573b6eb8b1801b40a4b6eb32cfd159f532876510 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 20 Dec 2020 14:43:08 -0500 Subject: Provide qpdf write progress reporting from C API (fixes #487) --- libqpdf/qpdf-c.cc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'libqpdf') 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; -- cgit v1.2.3-70-g09d2