X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcheck_hashes_job.cc;h=88233ab665805c34b60328895375ba3a67c1ae5c;hb=abd57c6c2e8526eac93e9d0c9bd0b6080de1e6fa;hp=f07a5ab2accaf9d98172bbb2ba9da7cd213b0516;hpb=9dd38ef2f05b24ba669acb9805e0914ac227fff2;p=dcpomatic.git diff --git a/src/lib/check_hashes_job.cc b/src/lib/check_hashes_job.cc index f07a5ab2a..88233ab66 100644 --- a/src/lib/check_hashes_job.cc +++ b/src/lib/check_hashes_job.cc @@ -21,18 +21,21 @@ #include #include #include "check_hashes_job.h" -#include "film_state.h" #include "options.h" #include "log.h" #include "job_manager.h" #include "ab_transcode_job.h" #include "transcode_job.h" +#include "film.h" -using namespace std; -using namespace boost; +using std::string; +using std::stringstream; +using std::ifstream; +using boost::shared_ptr; -CheckHashesJob::CheckHashesJob (shared_ptr s, shared_ptr o, Log* l, shared_ptr req) - : Job (s, o, l, req) +CheckHashesJob::CheckHashesJob (shared_ptr f, shared_ptr o, shared_ptr req) + : Job (f, req) + , _opt (o) , _bad (0) { @@ -41,7 +44,7 @@ CheckHashesJob::CheckHashesJob (shared_ptr s, shared_ptrname); + return String::compose ("Check hashes of %1", _film->name()); } void @@ -49,37 +52,46 @@ CheckHashesJob::run () { _bad = 0; - int const N = _fs->dcp_length (); + int const N = _film->dcp_length (); for (int i = 0; i < N; ++i) { string const j2k_file = _opt->frame_out_path (i, false); string const hash_file = j2k_file + ".md5"; - ifstream ref (hash_file.c_str ()); - string hash; - ref >> hash; - - if (hash != md5_digest (j2k_file)) { - _log->log ("Frame " + lexical_cast (i) + " has wrong hash; deleting."); - filesystem::remove (j2k_file); - filesystem::remove (hash_file); + if (!boost::filesystem::exists (j2k_file)) { + _film->log()->log (String::compose ("Frame %1 has a missing J2K file.", i)); + boost::filesystem::remove (hash_file); + ++_bad; + } else if (!boost::filesystem::exists (hash_file)) { + _film->log()->log (String::compose ("Frame %1 has a missing hash file.", i)); + boost::filesystem::remove (j2k_file); ++_bad; + } else { + ifstream ref (hash_file.c_str ()); + string hash; + ref >> hash; + if (hash != md5_digest (j2k_file)) { + _film->log()->log (String::compose ("Frame %1 has wrong hash; deleting.", i)); + boost::filesystem::remove (j2k_file); + boost::filesystem::remove (hash_file); + ++_bad; + } } - set_progress (float (i) / _fs->length); + set_progress (float (i) / _film->length()); } if (_bad) { shared_ptr tc; - if (_fs->dcp_ab) { - tc.reset (new ABTranscodeJob (_fs, _opt, _log, shared_from_this())); + if (_film->dcp_ab()) { + tc.reset (new ABTranscodeJob (_film, _opt, shared_from_this())); } else { - tc.reset (new TranscodeJob (_fs, _opt, _log, shared_from_this())); + tc.reset (new TranscodeJob (_film, _opt, shared_from_this())); } JobManager::instance()->add_after (shared_from_this(), tc); - JobManager::instance()->add_after (tc, shared_ptr (new CheckHashesJob (_fs, _opt, _log, tc))); + JobManager::instance()->add_after (tc, shared_ptr (new CheckHashesJob (_film, _opt, tc))); } set_progress (1);