summaryrefslogtreecommitdiff
path: root/src/lib/job_manager.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-01-28 00:35:55 +0000
committerCarl Hetherington <cth@carlh.net>2017-01-28 00:35:55 +0000
commitf5bc071ddac2355da1d116404cc37f4485e97699 (patch)
tree55da5257669b366fac0a6d9d214655f75867543a /src/lib/job_manager.cc
parent861267156da5960260c9a080dce94c0892fd012a (diff)
Add priority control buttons to batch converter (#961).
Diffstat (limited to 'src/lib/job_manager.cc')
-rw-r--r--src/lib/job_manager.cc69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index c9924d226..3992e685e 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -210,3 +210,72 @@ JobManager::analyse_audio (
emit (boost::bind (boost::ref (JobAdded), weak_ptr<Job> (job)));
}
+
+void
+JobManager::increase_priority (shared_ptr<Job> job)
+{
+ bool changed = false;
+
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ list<shared_ptr<Job> >::iterator last = _jobs.end ();
+ for (list<shared_ptr<Job> >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) {
+ if (*i == job && last != _jobs.end()) {
+ swap (*i, *last);
+ changed = true;
+ break;
+ }
+ last = i;
+ }
+ }
+
+ if (changed) {
+ priority_changed ();
+ }
+}
+
+void
+JobManager::priority_changed ()
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+
+ bool first = true;
+ BOOST_FOREACH (shared_ptr<Job> i, _jobs) {
+ if (first) {
+ if (i->is_new ()) {
+ i->start ();
+ } else if (i->paused_by_priority ()) {
+ i->resume ();
+ }
+ first = false;
+ } else {
+ if (i->running ()) {
+ i->pause_by_priority ();
+ }
+ }
+ }
+ }
+
+ emit (boost::bind (boost::ref (JobsReordered)));
+}
+
+void
+JobManager::decrease_priority (shared_ptr<Job> job)
+{
+ bool changed = false;
+
+ for (list<shared_ptr<Job> >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) {
+ list<shared_ptr<Job> >::iterator next = i;
+ ++next;
+ if (*i == job && next != _jobs.end()) {
+ swap (*i, *next);
+ changed = true;
+ break;
+ }
+ }
+
+ if (changed) {
+ priority_changed ();
+ }
+}