X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fjob.cc;h=d3871bf7225da22ed1911416c1b2ee4df4cffd5d;hb=5428006e97b37d757a03c14024d7a0fb363bdcc6;hp=22754eb909659ffd8693b48c77a9c184b6c40f9b;hpb=3fc9a435a720d8b2abd78c1bdc7b34bc635ad797;p=dcpomatic.git diff --git a/src/lib/job.cc b/src/lib/job.cc index 22754eb90..d3871bf72 100644 --- a/src/lib/job.cc +++ b/src/lib/job.cc @@ -34,13 +34,15 @@ using namespace boost; * @param o Options. * @param l A log that we can write to. */ -Job::Job (shared_ptr s, shared_ptr o, Log* l) +Job::Job (shared_ptr s, shared_ptr o, Log* l, shared_ptr req) : _fs (s) , _opt (o) , _log (l) + , _required (req) , _state (NEW) , _start_time (0) , _progress_unknown (false) + , _ran_for (0) { assert (_log); @@ -68,9 +70,7 @@ Job::run_wrapper () set_progress (1); set_state (FINISHED_ERROR); - stringstream s; - s << e.what() << "(" << filesystem::path (e.filename()).leaf() << ")"; - set_error (s.str ()); + set_error (String::compose ("%1 (%2)", e.what(), filesystem::path (e.filename()).leaf())); } catch (std::exception& e) { @@ -81,6 +81,13 @@ Job::run_wrapper () } } +bool +Job::is_new () const +{ + boost::mutex::scoped_lock lm (_state_mutex); + return _state == NEW; +} + /** @return true if the job is running */ bool Job::running () const @@ -121,6 +128,10 @@ Job::set_state (State s) { boost::mutex::scoped_lock lm (_state_mutex); _state = s; + + if (_state == FINISHED_OK || _state == FINISHED_ERROR) { + _ran_for = elapsed_time (); + } } /** A hack to work around our lack of cross-thread @@ -245,7 +256,7 @@ Job::status () const } else if (!finished () && (t <= 10 || r == 0)) { s << rint (p * 100) << "%"; } else if (finished_ok ()) { - s << "OK (ran for " << seconds_to_hms (t) << ")"; + s << "OK (ran for " << seconds_to_hms (_ran_for) << ")"; } else if (finished_in_error ()) { s << "Error (" << error() << ")"; }