summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-07-15 02:19:35 +0200
committerCarl Hetherington <cth@carlh.net>2025-07-15 11:10:47 +0200
commit847daf7ec0f741eb6d50638c2096743ee731634c (patch)
tree8fba9c9571d0579151dcca8876cd22c5062825e6
parent66a6aea50054a5af8624c7d36949c642f4c8b619 (diff)
Change ExamineContentJob to take a vector of content.
-rw-r--r--src/lib/check_content_job.cc4
-rw-r--r--src/lib/examine_content_job.cc14
-rw-r--r--src/lib/examine_content_job.h6
-rw-r--r--src/lib/film.cc2
-rw-r--r--src/lib/transcode_job.cc4
-rw-r--r--src/tools/dcpomatic_player.cc4
-rw-r--r--src/wx/content_menu.cc8
-rw-r--r--src/wx/content_view.cc23
-rw-r--r--test/dcp_decoder_test.cc5
-rw-r--r--test/remake_id_test.cc3
-rw-r--r--test/vf_test.cc2
11 files changed, 41 insertions, 34 deletions
diff --git a/src/lib/check_content_job.cc b/src/lib/check_content_job.cc
index bb43158ae..146fcd2a1 100644
--- a/src/lib/check_content_job.cc
+++ b/src/lib/check_content_job.cc
@@ -81,9 +81,7 @@ CheckContentJob::run ()
}
if (!changed.empty()) {
- for (auto i: changed) {
- JobManager::instance()->add(make_shared<ExamineContentJob>(_film, i, false));
- }
+ JobManager::instance()->add(make_shared<ExamineContentJob>(_film, changed, false));
set_message (_("Some files have been changed since they were added to the project.\n\nThese files will now be re-examined, so you may need to check their settings."));
}
diff --git a/src/lib/examine_content_job.cc b/src/lib/examine_content_job.cc
index 2466d8305..d12d736a7 100644
--- a/src/lib/examine_content_job.cc
+++ b/src/lib/examine_content_job.cc
@@ -29,14 +29,15 @@
#include "i18n.h"
-using std::string;
using std::cout;
using std::shared_ptr;
+using std::string;
+using std::vector;
-ExamineContentJob::ExamineContentJob(shared_ptr<const Film> film, shared_ptr<Content> content, bool tolerant)
+ExamineContentJob::ExamineContentJob(shared_ptr<const Film> film, vector<shared_ptr<Content>> content, bool tolerant)
: Job(film)
- , _content(content)
+ , _content(std::move(content))
, _tolerant(tolerant)
{
@@ -66,7 +67,12 @@ ExamineContentJob::json_name() const
void
ExamineContentJob::run()
{
- _content->examine(_film, shared_from_this(), _tolerant);
+ int n = 0;
+ for (auto c: _content) {
+ c->examine(_film, shared_from_this(), _tolerant);
+ set_progress(float(n) / _content.size());
+ ++n;
+ }
set_progress(1);
set_state(FINISHED_OK);
}
diff --git a/src/lib/examine_content_job.h b/src/lib/examine_content_job.h
index 093c396eb..ca298c252 100644
--- a/src/lib/examine_content_job.h
+++ b/src/lib/examine_content_job.h
@@ -28,19 +28,19 @@ class Content;
class ExamineContentJob : public Job
{
public:
- ExamineContentJob(std::shared_ptr<const Film> film, std::shared_ptr<Content> content, bool tolerant);
+ ExamineContentJob(std::shared_ptr<const Film> film, std::vector<std::shared_ptr<Content>> content, bool tolerant);
~ExamineContentJob();
std::string name() const override;
std::string json_name() const override;
void run() override;
- std::shared_ptr<Content> content() const {
+ std::vector<std::shared_ptr<Content>> content() const {
return _content;
}
private:
- std::shared_ptr<Content> _content;
+ std::vector<std::shared_ptr<Content>> _content;
bool _tolerant;
};
diff --git a/src/lib/film.cc b/src/lib/film.cc
index b73c2bac6..9dcc21918 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -1425,7 +1425,7 @@ Film::examine_and_add_content(shared_ptr<Content> content, bool disable_audio_an
run_ffprobe(content->path(0), file("ffprobe.log"));
}
- auto j = make_shared<ExamineContentJob>(shared_from_this(), content, false);
+ auto j = make_shared<ExamineContentJob>(shared_from_this(), vector<shared_ptr<Content>>{content}, false);
_job_connections.push_back(
j->Finished.connect(bind(&Film::maybe_add_content, this, weak_ptr<Job>(j), weak_ptr<Content>(content), disable_audio_analysis))
diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc
index 2a408266f..50ae4e6b7 100644
--- a/src/lib/transcode_job.cc
+++ b/src/lib/transcode_job.cc
@@ -100,9 +100,7 @@ TranscodeJob::run ()
if (!changed.empty()) {
switch (_changed) {
case ChangedBehaviour::EXAMINE_THEN_STOP:
- for (auto i: changed) {
- JobManager::instance()->add(make_shared<ExamineContentJob>(_film, i, false));
- }
+ JobManager::instance()->add(make_shared<ExamineContentJob>(_film, changed, false));
set_progress (1);
set_message (_("Some files have been changed since they were added to the project.\n\nThese files will now be re-examined, so you may need to check their settings before trying again."));
set_error (_("Files have changed since they were added to the project."), _("Check their new settings, then try again."));
diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc
index 9e15dd011..86467f0f7 100644
--- a/src/tools/dcpomatic_player.cc
+++ b/src/tools/dcpomatic_player.cc
@@ -438,7 +438,7 @@ public:
};
auto dcp = make_shared<DCPContent>(dir);
- auto job = make_shared<ExamineContentJob>(film, dcp, true);
+ auto job = make_shared<ExamineContentJob>(film, vector<shared_ptr<Content>>{dcp}, true);
_examine_job_connection = job->Finished.connect(boost::bind<void>(setup, weak_ptr<Film>(film), weak_ptr<Job>(job), weak_ptr<Content>(dcp)));
JobManager::instance()->add (job);
bool const ok = display_progress(variant::wx::dcpomatic_player(), _("Loading content"));
@@ -773,7 +773,7 @@ private:
return;
}
- auto job = make_shared<ExamineContentJob>(_film, dcp, true);
+ auto job = make_shared<ExamineContentJob>(_film, vector<shared_ptr<Content>>{dcp}, true);
_examine_job_connection = job->Finished.connect(boost::bind(&DOMFrame::prepare_to_play_film, this, Config::instance()->player_crop_output_ratio()));
JobManager::instance()->add(job);
diff --git a/src/wx/content_menu.cc b/src/wx/content_menu.cc
index 559b57553..75326158d 100644
--- a/src/wx/content_menu.cc
+++ b/src/wx/content_menu.cc
@@ -395,7 +395,7 @@ ContentMenu::re_examine ()
}
for (auto i: _content) {
- JobManager::instance()->add(make_shared<ExamineContentJob>(film, i, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(film, vector<shared_ptr<Content>>{i}, false));
}
}
@@ -449,7 +449,7 @@ ContentMenu::kdm ()
auto film = _film.lock ();
DCPOMATIC_ASSERT (film);
- JobManager::instance()->add(make_shared<ExamineContentJob>(film, dcp, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(film, vector<shared_ptr<Content>>{dcp}, false));
}
void
@@ -467,7 +467,7 @@ ContentMenu::ov ()
dcp->add_ov(dialog.path());
auto film = _film.lock();
DCPOMATIC_ASSERT (film);
- JobManager::instance()->add (make_shared<ExamineContentJob>(film, dcp, false));
+ JobManager::instance()->add (make_shared<ExamineContentJob>(film, vector<shared_ptr<Content>>{dcp}, false));
}
}
@@ -532,7 +532,7 @@ ContentMenu::cpl_selected (wxCommandEvent& ev)
auto film = _film.lock ();
DCPOMATIC_ASSERT (film);
- JobManager::instance()->add(make_shared<ExamineContentJob>(film, dcp, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(film, vector<shared_ptr<Content>>{dcp}, false));
}
diff --git a/src/wx/content_view.cc b/src/wx/content_view.cc
index fa6bd64dc..0bbc80535 100644
--- a/src/wx/content_view.cc
+++ b/src/wx/content_view.cc
@@ -48,6 +48,7 @@ using std::list;
using std::make_shared;
using std::shared_ptr;
using std::string;
+using std::vector;
using std::weak_ptr;
using boost::optional;
using namespace dcpomatic;
@@ -109,7 +110,7 @@ ContentView::update ()
}
if (content) {
- auto job = make_shared<ExamineContentJob>(shared_ptr<Film>(), content, false);
+ auto job = make_shared<ExamineContentJob>(shared_ptr<Film>(), vector<shared_ptr<Content>>{content}, false);
jm->add (job);
jobs.push_back (job);
}
@@ -136,16 +137,18 @@ ContentView::update ()
if (i->finished_in_error()) {
error_dialog(this, std_to_wx(i->error_summary()) + char_to_wx(".\n"), std_to_wx(i->error_details()));
} else {
- if (auto dcp = dynamic_pointer_cast<DCPContent>(i->content())) {
- for (auto cpl: dcp::find_and_resolve_cpls(dcp->directories(), true)) {
- auto copy = dynamic_pointer_cast<DCPContent>(dcp->clone());
- copy->set_cpl(cpl->id());
- add(copy);
- _content.push_back(copy);
+ for (auto c: i->content()) {
+ if (auto dcp = dynamic_pointer_cast<DCPContent>(c)) {
+ for (auto cpl: dcp::find_and_resolve_cpls(dcp->directories(), true)) {
+ auto copy = dynamic_pointer_cast<DCPContent>(dcp->clone());
+ copy->set_cpl(cpl->id());
+ add(copy);
+ _content.push_back(copy);
+ }
+ } else {
+ add(c);
+ _content.push_back(c);
}
- } else {
- add(i->content());
- _content.push_back(i->content());
}
}
}
diff --git a/test/dcp_decoder_test.cc b/test/dcp_decoder_test.cc
index cf8366919..5e31856eb 100644
--- a/test/dcp_decoder_test.cc
+++ b/test/dcp_decoder_test.cc
@@ -43,6 +43,7 @@
using std::list;
using std::make_shared;
+using std::shared_ptr;
using std::string;
using std::vector;
@@ -107,7 +108,7 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
reels = decoder->reels();
vf_content->add_ov (ov->dir(ov->dcp_name(false)));
- JobManager::instance()->add(make_shared<ExamineContentJob>(test, vf_content, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(test, vector<shared_ptr<Content>>{vf_content}, false));
BOOST_REQUIRE (!wait_for_jobs());
decoder = std::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
BOOST_REQUIRE (decoder);
@@ -125,7 +126,7 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
reels = decoder->reels();
encrypted_content->add_kdm (kdm);
- JobManager::instance()->add(make_shared<ExamineContentJob>(test, encrypted_content, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(test, vector<shared_ptr<Content>>{encrypted_content}, false));
BOOST_REQUIRE (!wait_for_jobs());
decoder = std::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
BOOST_REQUIRE (decoder);
diff --git a/test/remake_id_test.cc b/test/remake_id_test.cc
index 84937c3ab..0673a4283 100644
--- a/test/remake_id_test.cc
+++ b/test/remake_id_test.cc
@@ -34,6 +34,7 @@
using std::dynamic_pointer_cast;
using std::make_shared;
+using std::shared_ptr;
using std::string;
using std::vector;
using boost::optional;
@@ -95,7 +96,7 @@ BOOST_AUTO_TEST_CASE (remake_id_test2)
auto dcp_content = make_shared<DCPContent>(film->dir(film->dcp_name()));
auto film2 = new_test_film("remake_id_test2_2", { dcp_content });
dcp_content->add_kdm(kdm);
- JobManager::instance()->add(make_shared<ExamineContentJob>(film2, dcp_content, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(film2, vector<shared_ptr<Content>>{dcp_content}, false));
BOOST_REQUIRE(!wait_for_jobs());
make_and_verify_dcp (film2);
}
diff --git a/test/vf_test.cc b/test/vf_test.cc
index dac7dbcf7..33e33f4be 100644
--- a/test/vf_test.cc
+++ b/test/vf_test.cc
@@ -425,7 +425,7 @@ BOOST_AUTO_TEST_CASE(test_duplicate_font_id_in_vf)
auto test = new_test_film(name + "_test", { vf_dcp });
vf_dcp->add_ov(ov->dir(ov->dcp_name(false)));
- JobManager::instance()->add(make_shared<ExamineContentJob>(test, vf_dcp, false));
+ JobManager::instance()->add(make_shared<ExamineContentJob>(test, vector<shared_ptr<Content>>{vf_dcp}, false));
BOOST_CHECK(!wait_for_jobs());
make_and_verify_dcp(