projects
/
dcpomatic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
442fcbf
)
Emit the state of the job with the Finished signals.
author
Carl Hetherington
<cth@carlh.net>
Thu, 16 Mar 2023 00:47:03 +0000
(
01:47
+0100)
committer
Carl Hetherington
<cth@carlh.net>
Thu, 16 Mar 2023 21:45:18 +0000
(22:45 +0100)
src/lib/job.cc
patch
|
blob
|
history
src/lib/job.h
patch
|
blob
|
history
src/lib/job_manager.cc
patch
|
blob
|
history
src/lib/job_manager.h
patch
|
blob
|
history
test/audio_analysis_test.cc
patch
|
blob
|
history
diff --git
a/src/lib/job.cc
b/src/lib/job.cc
index 53527d265da66d99262d7924d6e0f16d7647dc1b..912c6a6ef3c961374a81bd4863509a94d0c524f2 100644
(file)
--- a/
src/lib/job.cc
+++ b/
src/lib/job.cc
@@
-358,12
+358,31
@@
Job::set_state (State s)
}
if (finished) {
}
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
/** @return DCPTime (in seconds) that this sub-job has been running */
int
Job::elapsed_sub_time () const
@@
-677,11
+696,11
@@
Job::resume ()
void
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) {
{
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);
}
} else {
connection = Finished.connect (finished);
}
diff --git
a/src/lib/job.h
b/src/lib/job.h
index c8204c2806aa20ff14bcb82a16eba70f0de1291a..5562afc16cc89cae1e9dec8941ee837622598d8b 100644
(file)
--- a/
src/lib/job.h
+++ b/
src/lib/job.h
@@
-91,13
+91,19
@@
public:
return _film;
}
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()> 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 */
/** Emitted from the job thread when the job is finished */
- boost::signals2::signal<void
(
)> FinishedImmediate;
+ boost::signals2::signal<void
(Result
)> FinishedImmediate;
protected:
protected:
@@
-114,6
+120,7
@@
protected:
FINISHED_CANCELLED ///< the job was cancelled
};
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);
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 61087db72c5dccdf50c0efd49696158d95fa5cfb..9fcd86f2d38b7c034a332740a74457f672bd1b9b 100644
(file)
--- 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,
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,
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 435c250d194f015eff06f0e97d45779e2156dfb9..c8450bfdae152e3d4101ad0f1b3c063825e4cc55 100644
(file)
--- 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>
#include "signaller.h"
#include <boost/thread/mutex.hpp>
#include <boost/thread.hpp>
@@
-32,7
+33,6
@@
#include <list>
#include <list>
-class Job;
class Film;
class Playlist;
class Content;
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::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,
);
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;
);
boost::signals2::signal<void (std::weak_ptr<Job>)> JobAdded;
diff --git
a/test/audio_analysis_test.cc
b/test/audio_analysis_test.cc
index df809bb1510097b041ff4db9600cc5adf0912413..5a9c753242ec2983a541294f9b7ab841f6a5a9fa 100644
(file)
--- 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;
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 ());
}
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;
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));
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;
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());
}
BOOST_CHECK(!wait_for_jobs());
}