diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-03-16 01:47:03 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-03-16 22:45:18 +0100 |
| commit | a6c4b4fa16d9c6597e362044b875f3d6df80753f (patch) | |
| tree | 3e340bf5fb3d4865961034c8e372364c21fe958f | |
| parent | 442fcbf670488eab7ddc21c3aa6e49f22d6c5f31 (diff) | |
Emit the state of the job with the Finished signals.
| -rw-r--r-- | src/lib/job.cc | 27 | ||||
| -rw-r--r-- | src/lib/job.h | 13 | ||||
| -rw-r--r-- | src/lib/job_manager.cc | 4 | ||||
| -rw-r--r-- | src/lib/job_manager.h | 6 | ||||
| -rw-r--r-- | test/audio_analysis_test.cc | 6 |
5 files changed, 41 insertions, 15 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc index 53527d265..912c6a6ef 100644 --- a/src/lib/job.cc +++ b/src/lib/job.cc @@ -358,12 +358,31 @@ Job::set_state (State s) } if (finished) { - emit (boost::bind (boost::ref (Finished))); - FinishedImmediate (); + auto const result = state_to_result(s); + emit(boost::bind(boost::ref(Finished), result)); + FinishedImmediate(result); } } +Job::Result +Job::state_to_result(State state) const +{ + switch (state) { + case FINISHED_OK: + return Result::RESULT_OK; + case FINISHED_ERROR: + return Result::RESULT_ERROR; + case FINISHED_CANCELLED: + return Result::RESULT_CANCELLED; + default: + DCPOMATIC_ASSERT(false); + }; + + DCPOMATIC_ASSERT(false); +} + + /** @return DCPTime (in seconds) that this sub-job has been running */ int Job::elapsed_sub_time () const @@ -677,11 +696,11 @@ Job::resume () void -Job::when_finished (boost::signals2::connection& connection, function<void()> finished) +Job::when_finished(boost::signals2::connection& connection, function<void(Result)> finished) { boost::mutex::scoped_lock lm (_state_mutex); if (_state == FINISHED_OK || _state == FINISHED_ERROR || _state == FINISHED_CANCELLED) { - finished (); + finished(state_to_result(_state)); } else { connection = Finished.connect (finished); } diff --git a/src/lib/job.h b/src/lib/job.h index c8204c280..5562afc16 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -91,13 +91,19 @@ public: 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: @@ -114,6 +120,7 @@ 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_message (std::string m); diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 61087db72..9fcd86f2d 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -229,7 +229,7 @@ JobManager::analyse_audio ( shared_ptr<const Playlist> playlist, bool from_zero, boost::signals2::connection& connection, - function<void()> ready + function<void (Job::Result)> ready ) { { @@ -264,7 +264,7 @@ JobManager::analyse_subtitles ( shared_ptr<const Film> film, shared_ptr<Content> content, boost::signals2::connection& connection, - function<void()> ready + function<void (Job::Result)> ready ) { { diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h index 435c250d1..c8450bfda 100644 --- a/src/lib/job_manager.h +++ b/src/lib/job_manager.h @@ -24,6 +24,7 @@ */ +#include "job.h" #include "signaller.h" #include <boost/thread/mutex.hpp> #include <boost/thread.hpp> @@ -32,7 +33,6 @@ #include <list> -class Job; class Film; class Playlist; class Content; @@ -70,14 +70,14 @@ public: std::shared_ptr<const Playlist> playlist, bool from_zero, boost::signals2::connection& connection, - std::function<void()> ready + std::function<void (Job::Result)> ready ); void analyse_subtitles ( std::shared_ptr<const Film> film, std::shared_ptr<Content> content, boost::signals2::connection& connection, - std::function<void()> ready + std::function<void (Job::Result)> ready ); boost::signals2::signal<void (std::weak_ptr<Job>)> JobAdded; diff --git a/test/audio_analysis_test.cc b/test/audio_analysis_test.cc index df809bb15..5a9c75324 100644 --- a/test/audio_analysis_test.cc +++ b/test/audio_analysis_test.cc @@ -193,7 +193,7 @@ BOOST_AUTO_TEST_CASE (analyse_audio_test4) auto playlist = make_shared<Playlist>(); playlist->add (film, content); boost::signals2::connection c; - JobManager::instance()->analyse_audio(film, playlist, false, c, []() {}); + JobManager::instance()->analyse_audio(film, playlist, false, c, [](Job::Result) {}); BOOST_CHECK (!wait_for_jobs ()); } @@ -209,7 +209,7 @@ BOOST_AUTO_TEST_CASE (analyse_audio_leqm_test) auto playlist = make_shared<Playlist>(); playlist->add (film, content); boost::signals2::connection c; - JobManager::instance()->analyse_audio(film, playlist, false, c, []() {}); + JobManager::instance()->analyse_audio(film, playlist, false, c, [](Job::Result) {}); BOOST_CHECK (!wait_for_jobs()); AudioAnalysis analysis(film->audio_analysis_path(playlist)); @@ -230,6 +230,6 @@ BOOST_AUTO_TEST_CASE(analyse_audio_with_long_silent_end) auto playlist = make_shared<Playlist>(); playlist->add(film, content); boost::signals2::connection c; - JobManager::instance()->analyse_audio(film, playlist, false, c, []() {}); + JobManager::instance()->analyse_audio(film, playlist, false, c, [](Job::Result) {}); BOOST_CHECK(!wait_for_jobs()); } |
