X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fverify_dcp_job.cc;h=daf8d0005a7d3face37c0bad67429539bb45fae8;hp=8ac41d2a4b9f70fc4edea9cb957c4825e0056d48;hb=HEAD;hpb=e8722ddec03cb18e8c23e604414f9d3a7cf2bae8 diff --git a/src/lib/verify_dcp_job.cc b/src/lib/verify_dcp_job.cc index 8ac41d2a4..5e50ec51d 100644 --- a/src/lib/verify_dcp_job.cc +++ b/src/lib/verify_dcp_job.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018 Carl Hetherington + Copyright (C) 2018-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,42 +18,86 @@ */ + +#include "config.h" +#include "cross.h" #include "verify_dcp_job.h" #include "content.h" #include "i18n.h" + using std::string; using std::vector; -using boost::shared_ptr; +using std::shared_ptr; +using boost::optional; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif + -VerifyDCPJob::VerifyDCPJob (vector directories) +VerifyDCPJob::VerifyDCPJob(vector directories, vector kdms) : Job (shared_ptr()) , _directories (directories) + , _kdms(kdms) { } + +VerifyDCPJob::~VerifyDCPJob () +{ + stop_thread (); +} + + string VerifyDCPJob::name () const { return _("Verify DCP"); } + string VerifyDCPJob::json_name () const { return N_("verify_dcp"); } + +void +VerifyDCPJob::update_stage (string s, optional path) +{ + if (path) { + s += ": " + path->string(); + } + sub (s); +} + + void VerifyDCPJob::run () { - _notes = dcp::verify (_directories); + vector decrypted_kdms; + auto key = Config::instance()->decryption_chain()->key(); + if (key) { + for (auto kdm: _kdms) { + decrypted_kdms.push_back(dcp::DecryptedKDM{dcp::EncryptedKDM(dcp::file_to_string(kdm)), *key}); + } + } + + _notes = dcp::verify( + _directories, + decrypted_kdms, + bind(&VerifyDCPJob::update_stage, this, _1, _2), + bind(&VerifyDCPJob::set_progress, this, _1, false), + {}, + libdcp_resources_path() / "xsd" + ); bool failed = false; - BOOST_FOREACH (dcp::VerificationNote i, _notes) { - if (i.type() == dcp::VerificationNote::VERIFY_ERROR) { + for (auto i: _notes) { + if (i.type() == dcp::VerificationNote::Type::ERROR) { failed = true; } }