Various fixes to make audio analysis sort-of work.
[dcpomatic.git] / src / lib / job.h
index 802bf468da24d71a723fc31929d1fcdd0810cca0..5a4775180586e7dbed363c6e4ac1bc3bb06ae97b 100644 (file)
  *  @brief A parent class to represent long-running tasks which are run in their own thread.
  */
 
-#ifndef DVDOMATIC_JOB_H
-#define DVDOMATIC_JOB_H
+#ifndef DCPOMATIC_JOB_H
+#define DCPOMATIC_JOB_H
 
 #include <string>
 #include <boost/thread/mutex.hpp>
 #include <boost/enable_shared_from_this.hpp>
-#include <sigc++/sigc++.h>
+#include <boost/signals2.hpp>
+#include <boost/thread.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.
@@ -39,7 +38,8 @@ class Options;
 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<const Film>);
+       virtual ~Job() {}
 
        /** @return user-readable name of this job */
        virtual std::string name () const = 0;
@@ -47,13 +47,20 @@ public:
        virtual void run () = 0;
        
        void start ();
+       void pause ();
+       void resume ();
+       void cancel ();
 
+       bool is_new () const;
        bool running () const;
        bool finished () const;
        bool finished_ok () const;
        bool finished_in_error () const;
+       bool finished_cancelled () const;
+       bool paused () const;
 
-       std::string error () const;
+       std::string error_summary () const;
+       std::string error_details () const;
 
        int elapsed_time () const;
        virtual std::string status () const;
@@ -64,10 +71,8 @@ public:
        void descend (float);
        float overall_progress () const;
 
-       void emit_finished ();
-
-       /** Emitted from the GUI thread */
-       sigc::signal0<void> Finished;
+       /** Emitted by the JobManagerView from the UI thread */
+       boost::signals2::signal<void()> Finished;
 
 protected:
 
@@ -75,32 +80,32 @@ protected:
 
        /** Description of a job's state */
        enum State {
-               NEW,           ///< the job hasn't been started yet
-               RUNNING,       ///< the job is running
-               FINISHED_OK,   ///< the job has finished successfully
-               FINISHED_ERROR ///< the job has finished in error
+               NEW,            ///< the job hasn't been started yet
+               RUNNING,        ///< the job is running
+               PAUSED,         ///< the job has been paused
+               FINISHED_OK,    ///< the job has finished successfully
+               FINISHED_ERROR, ///< the job has finished in error
+               FINISHED_CANCELLED ///< the job was cancelled
        };
        
        void set_state (State);
-       void set_error (std::string e);
+       void set_error (std::string s, std::string d);
 
-       /** FilmState for this job */
-       boost::shared_ptr<const FilmState> _fs;
-       /** options in use for this job */
-       boost::shared_ptr<const Options> _opt;
-       /** a log that this job can write to */
-       Log* _log;
+       boost::shared_ptr<const Film> _film;
 
 private:
 
        void run_wrapper ();
 
+       boost::thread* _thread;
+
        /** mutex for _state and _error */
        mutable boost::mutex _state_mutex;
        /** current state of the job */
        State _state;
-       /** message for an error that has occurred (when state == FINISHED_ERROR) */
-       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;