Merge branch 'direct-mxf' of /home/carl/git/dvdomatic into direct-mxf
[dcpomatic.git] / src / lib / job.h
index 2a77f78f7775e43009e5642fddb5710fcaf1c934..1538e2779563910e67e998b2ec87c10f80838fcd 100644 (file)
 
 #include <string>
 #include <boost/thread/mutex.hpp>
-#include <sigc++/sigc++.h>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/signals2.hpp>
 
-class Log;
-class FilmState;
-class Options;
+class Film;
 
 /** @class Job
  *  @brief A parent class to represent long-running tasks which are run in their own thread.
  */
-class Job
+class Job : public boost::enable_shared_from_this<Job>
 {
 public:
-       Job (boost::shared_ptr<const FilmState> s, boost::shared_ptr<const Options> o, Log* l);
+       Job (boost::shared_ptr<Film> s);
+       virtual ~Job() {}
 
        /** @return user-readable name of this job */
        virtual std::string name () const = 0;
@@ -47,12 +47,14 @@ public:
        
        void start ();
 
+       bool is_new () const;
        bool running () const;
        bool finished () const;
        bool finished_ok () const;
        bool finished_in_error () const;
 
-       std::string error () const;
+       std::string error_summary () const;
+       std::string error_details () const;
 
        int elapsed_time () const;
        virtual std::string status () const;
@@ -63,13 +65,13 @@ public:
        void descend (float);
        float overall_progress () const;
 
-       void emit_finished ();
-
-       /** Emitted from the GUI thread */
-       sigc::signal0<void> Finished;
+       boost::signals2::signal<void()> Finished;
 
 protected:
 
+       virtual int remaining_time () const;
+
+       /** Description of a job's state */
        enum State {
                NEW,           ///< the job hasn't been started yet
                RUNNING,       ///< the job is running
@@ -78,13 +80,10 @@ protected:
        };
        
        void set_state (State);
-       void set_error (std::string e);
-
-       boost::shared_ptr<const FilmState> _fs;
-       boost::shared_ptr<const Options> _opt;
+       void set_error (std::string s, std::string d);
 
-       /** A log that this job can write to */
-       Log* _log;
+       /** Film for this job */
+       boost::shared_ptr<Film> _film;
 
 private:
 
@@ -92,11 +91,16 @@ private:
 
        /** mutex for _state and _error */
        mutable boost::mutex _state_mutex;
+       /** current state of the job */
        State _state;
-       std::string _error;
+       /** summary of an error that has occurred (when state == FINISHED_ERROR) */
+       std::string _error_summary;
+       std::string _error_details;
 
+       /** time that this job was started */
        time_t _start_time;
-       
+
+       /** mutex for _stack and _progress_unknown */
        mutable boost::mutex _progress_mutex;
 
        struct Level {
@@ -110,6 +114,8 @@ private:
 
        /** true if this job's progress will always be unknown */
        bool _progress_unknown;
+
+       int _ran_for;
 };
 
 #endif