diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-07-15 02:19:35 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-07-15 11:10:47 +0200 |
| commit | 847daf7ec0f741eb6d50638c2096743ee731634c (patch) | |
| tree | 8fba9c9571d0579151dcca8876cd22c5062825e6 | |
| parent | 66a6aea50054a5af8624c7d36949c642f4c8b619 (diff) | |
Change ExamineContentJob to take a vector of content.
| -rw-r--r-- | src/lib/check_content_job.cc | 4 | ||||
| -rw-r--r-- | src/lib/examine_content_job.cc | 14 | ||||
| -rw-r--r-- | src/lib/examine_content_job.h | 6 | ||||
| -rw-r--r-- | src/lib/film.cc | 2 | ||||
| -rw-r--r-- | src/lib/transcode_job.cc | 4 | ||||
| -rw-r--r-- | src/tools/dcpomatic_player.cc | 4 | ||||
| -rw-r--r-- | src/wx/content_menu.cc | 8 | ||||
| -rw-r--r-- | src/wx/content_view.cc | 23 | ||||
| -rw-r--r-- | test/dcp_decoder_test.cc | 5 | ||||
| -rw-r--r-- | test/remake_id_test.cc | 3 | ||||
| -rw-r--r-- | test/vf_test.cc | 2 |
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( |
