summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-03-16 01:47:03 +0100
committerCarl Hetherington <cth@carlh.net>2023-03-16 22:45:18 +0100
commita6c4b4fa16d9c6597e362044b875f3d6df80753f (patch)
tree3e340bf5fb3d4865961034c8e372364c21fe958f
parent442fcbf670488eab7ddc21c3aa6e49f22d6c5f31 (diff)
Emit the state of the job with the Finished signals.
-rw-r--r--src/lib/job.cc27
-rw-r--r--src/lib/job.h13
-rw-r--r--src/lib/job_manager.cc4
-rw-r--r--src/lib/job_manager.h6
-rw-r--r--test/audio_analysis_test.cc6
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());
}