#include <boost/thread/mutex.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/signals2.hpp>
+#include <boost/thread.hpp>
class Film;
-class Options;
/** @class Job
* @brief A parent class to represent long-running tasks which are run in their own thread.
class Job : public boost::enable_shared_from_this<Job>
{
public:
- Job (boost::shared_ptr<Film> s, boost::shared_ptr<Job> req);
+ Job (boost::shared_ptr<Film>);
virtual ~Job() {}
/** @return user-readable name of this job */
virtual void run () = 0;
void start ();
+ 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;
- std::string error () const;
+ std::string error_summary () const;
+ std::string error_details () const;
int elapsed_time () const;
virtual std::string status () const;
void descend (float);
float overall_progress () const;
- boost::shared_ptr<Job> required () const {
- return _required;
- }
-
+ /** Emitted by the JobManagerView from the UI thread */
boost::signals2::signal<void()> Finished;
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
+ 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);
- /** Film for this job */
boost::shared_ptr<Film> _film;
private:
void run_wrapper ();
- boost::shared_ptr<Job> _required;
+ 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;