set_progress (1);
set_state (FINISHED_ERROR);
+ } catch (dcp::DCPReadError& e) {
+
+ set_error (e.message(), e.detail().get_value_or(""));
+ set_progress (1);
+ set_state (FINISHED_ERROR);
+
+ } catch (KDMError& e) {
+
+ set_error (e.summary(), e.detail());
+ set_progress (1);
+ set_state (FINISHED_ERROR);
+
} catch (std::exception& e) {
set_error (
Job::set_error (string s, string d)
{
if (_film) {
- LOG_ERROR_NC (s);
- LOG_ERROR_NC (d);
_film->log()->log (String::compose ("Error in job: %1 (%2)", s, d), LogEntry::TYPE_ERROR);
}
_thread = 0;
}
-void
+/** @return true if the job was paused, false if it was not running */
+bool
Job::pause_by_user ()
{
- if (running ()) {
- set_state (PAUSED_BY_USER);
+ bool paused = false;
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ /* We can set _state here directly because we have a lock and we aren't
+ setting the job to FINISHED_*
+ */
+ if (_state == RUNNING) {
+ paused = true;
+ _state = PAUSED_BY_USER;
+ }
+ }
+
+ if (paused) {
_pause_changed.notify_all ();
}
+
+ return paused;
}
void
connection = Finished.connect (finished);
}
}
+
+optional<string>
+Job::message () const
+{
+ boost::mutex::scoped_lock lm (_state_mutex);
+ return _message;
+}
+
+void
+Job::set_message (string m)
+{
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _message = m;
+}