Put Font and Screen into dcpomatic namespace.
[dcpomatic.git] / src / lib / job_manager.h
index c623b6ef98d7f7fd5831b9644281a10946b58084..e0b72994df9dd2ab87495df0c6be3eb710afca2e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -26,6 +26,7 @@
 #include <boost/thread/mutex.hpp>
 #include <boost/thread.hpp>
 #include <boost/signals2.hpp>
+#include <boost/thread/condition.hpp>
 #include <list>
 
 class Job;
@@ -41,15 +42,23 @@ class JobManager : public Signaller, public boost::noncopyable
 {
 public:
        boost::shared_ptr<Job> add (boost::shared_ptr<Job>);
+       boost::shared_ptr<Job> add_after (boost::shared_ptr<Job> after, boost::shared_ptr<Job> j);
        std::list<boost::shared_ptr<Job> > get () const;
        bool work_to_do () const;
        bool errors () const;
        void increase_priority (boost::shared_ptr<Job>);
        void decrease_priority (boost::shared_ptr<Job>);
+       void pause ();
+       void resume ();
+       bool paused () const {
+               boost::mutex::scoped_lock lm (_mutex);
+               return _paused;
+       }
 
        void analyse_audio (
                boost::shared_ptr<const Film> film,
                boost::shared_ptr<const Playlist> playlist,
+               bool from_zero,
                boost::signals2::connection& connection,
                boost::function<void()> ready
                );
@@ -70,11 +79,16 @@ private:
        void scheduler ();
        void start ();
        void priority_changed ();
+       void job_finished ();
 
        mutable boost::mutex _mutex;
+       boost::condition _empty_condition;
        /** List of jobs in the order that they will be executed */
        std::list<boost::shared_ptr<Job> > _jobs;
+       std::list<boost::signals2::connection> _connections;
        bool _terminate;
+       bool _paused;
+       boost::shared_ptr<Job> _paused_job;
 
        boost::optional<std::string> _last_active_job;
        boost::thread* _scheduler;