}
bool
-Job::paused () const
+Job::paused_by_user () const
{
boost::mutex::scoped_lock lm (_state_mutex);
- return _state == PAUSED;
+ return _state == PAUSED_BY_USER;
+}
+
+bool
+Job::paused_by_priority () const
+{
+ boost::mutex::scoped_lock lm (_state_mutex);
+ return _state == PAUSED_BY_PRIORITY;
}
/** Set the state of this job.
boost::this_thread::interruption_point ();
boost::mutex::scoped_lock lm (_state_mutex);
- while (_state == PAUSED) {
+ while (_state == PAUSED_BY_USER || _state == PAUSED_BY_PRIORITY) {
emit (boost::bind (boost::ref (Progress)));
_pause_changed.wait (lm);
}
/** Set the progress of the current part of the job.
* @param p Progress (from 0 to 1)
+ * @param force Do not ignore this update, even if it hasn't been long since the last one.
*/
void
Job::set_progress (float p, bool force)
}
/** Set the current error string.
- * @param e New error string.
+ * @param s New error string.
+ * @param d New error detail string.
*/
void
Job::set_error (string s, string d)
return N_("new");
case RUNNING:
return N_("running");
- case PAUSED:
+ case PAUSED_BY_USER:
+ case PAUSED_BY_PRIORITY:
return N_("paused");
case FINISHED_OK:
return N_("finished_ok");
return;
}
- if (paused ()) {
+ if (paused_by_user() || paused_by_priority()) {
resume ();
}
}
void
-Job::pause ()
+Job::pause_by_user ()
+{
+ if (running ()) {
+ set_state (PAUSED_BY_USER);
+ _pause_changed.notify_all ();
+ }
+}
+
+void
+Job::pause_by_priority ()
{
if (running ()) {
- set_state (PAUSED);
+ set_state (PAUSED_BY_PRIORITY);
_pause_changed.notify_all ();
}
}
void
Job::resume ()
{
- if (paused ()) {
+ if (paused_by_user() || paused_by_priority()) {
set_state (RUNNING);
_pause_changed.notify_all ();
}