From a6c4b4fa16d9c6597e362044b875f3d6df80753f Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 16 Mar 2023 01:47:03 +0100 Subject: [PATCH] Emit the state of the job with the Finished signals. --- src/lib/job.cc | 27 +++++++++++++++++++++++---- src/lib/job.h | 13 ++++++++++--- src/lib/job_manager.cc | 4 ++-- src/lib/job_manager.h | 6 +++--- 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 finished) +Job::when_finished(boost::signals2::connection& connection, function 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 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 finished); boost::signals2::signal Progress; /** Emitted from the UI thread when the job is finished */ - boost::signals2::signal Finished; + boost::signals2::signal Finished; /** Emitted from the job thread when the job is finished */ - boost::signals2::signal FinishedImmediate; + boost::signals2::signal 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 playlist, bool from_zero, boost::signals2::connection& connection, - function ready + function ready ) { { @@ -264,7 +264,7 @@ JobManager::analyse_subtitles ( shared_ptr film, shared_ptr content, boost::signals2::connection& connection, - function ready + function 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 #include @@ -32,7 +33,6 @@ #include -class Job; class Film; class Playlist; class Content; @@ -70,14 +70,14 @@ public: std::shared_ptr playlist, bool from_zero, boost::signals2::connection& connection, - std::function ready + std::function ready ); void analyse_subtitles ( std::shared_ptr film, std::shared_ptr content, boost::signals2::connection& connection, - std::function ready + std::function ready ); boost::signals2::signal)> 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->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->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->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()); } -- 2.30.2