virtual std::string json_name () const = 0;
/** Run this job in the current thread. */
virtual void run () = 0;
+ /** @return true if it should be possible to notify when this job finishes */
+ virtual bool enable_notify () const {
+ return false;
+ }
void start ();
+ virtual void pause() {}
bool pause_by_user ();
void pause_by_priority ();
- void resume ();
+ virtual void resume ();
void cancel ();
bool is_new () const;
void set_progress (float, bool force = false);
void sub (std::string);
boost::optional<float> progress () const;
+ boost::optional<float> seconds_since_last_progress_update () const;
std::shared_ptr<const Film> film () const {
return _film;
}
- void when_finished (boost::signals2::connection& connection, std::function<void()> finished);
+ enum class Result {
+ RESULT_OK,
+ RESULT_ERROR, // we can't have plain ERROR on Windows
+ RESULT_CANCELLED
+ };
+
+ void when_finished(boost::signals2::connection& connection, std::function<void(Result)> finished);
boost::signals2::signal<void()> Progress;
/** Emitted from the UI thread when the job is finished */
- boost::signals2::signal<void()> Finished;
+ boost::signals2::signal<void (Result)> Finished;
/** Emitted from the job thread when the job is finished */
- boost::signals2::signal<void()> FinishedImmediate;
+ boost::signals2::signal<void (Result)> FinishedImmediate;
protected:
FINISHED_CANCELLED ///< the job was cancelled
};
+ Result state_to_result(State state) const;
void set_state (State);
- void set_error (std::string s, std::string d);
+ void set_error (std::string s, std::string d = "");
void set_message (std::string m);
int elapsed_sub_time () const;
void check_for_interruption_or_pause ();