aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-06-19 02:44:44 +0200
committerJay Berkenbilt <ejb@ql.org>2022-06-19 14:46:58 +0200
commit87412eb05be3148e812310128f361f79922baad8 (patch)
treee8f58ce2ac059c7fcc912df62226885574d6a372 /libqpdf/QPDFJob.cc
parent3a7ee7e93847d41cae414ff77cc75fd6394751ef (diff)
downloadqpdf-87412eb05be3148e812310128f361f79922baad8.tar.zst
Add QPDFJob::registerProgressReporter
Diffstat (limited to 'libqpdf/QPDFJob.cc')
-rw-r--r--libqpdf/QPDFJob.cc33
1 files changed, 23 insertions, 10 deletions
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index 606a612a..5631df49 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -323,6 +323,7 @@ QPDFJob::Members::Members() :
decrypt(false),
split_pages(0),
progress(false),
+ progress_handler(nullptr),
suppress_warnings(false),
warnings_exit_zero(false),
copy_encryption(false),
@@ -464,6 +465,11 @@ QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err)
}
void
+QPDFJob::registerProgressReporter(std::function<void(int)> handler) {
+ this->m->progress_handler = handler;
+}
+
+void
QPDFJob::doIfVerbose(
std::function<void(Pipeline&, std::string const& prefix)> fn)
{
@@ -3146,16 +3152,23 @@ QPDFJob::setWriterOptions(QPDF& pdf, QPDFWriter& w)
w.forcePDFVersion(version, extension_level);
}
if (m->progress) {
- char const* outfilename = this->m->outfilename
- ? this->m->outfilename.get()
- : "standard output";
- w.registerProgressReporter(
- std::shared_ptr<QPDFWriter::ProgressReporter>(
- // line-break
- new ProgressReporter(
- *this->m->log->getInfo(),
- this->m->message_prefix,
- outfilename)));
+ if (this->m->progress_handler) {
+ w.registerProgressReporter(
+ std::shared_ptr<QPDFWriter::ProgressReporter>(
+ new QPDFWriter::FunctionProgressReporter(
+ this->m->progress_handler)));
+ } else {
+ char const* outfilename = this->m->outfilename
+ ? this->m->outfilename.get()
+ : "standard output";
+ w.registerProgressReporter(
+ std::shared_ptr<QPDFWriter::ProgressReporter>(
+ // line-break
+ new ProgressReporter(
+ *this->m->log->getInfo(),
+ this->m->message_prefix,
+ outfilename)));
+ }
}
}