diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-09-09 01:48:52 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-09-09 01:54:38 +0200 |
| commit | 3e1f008d416a5d0493b799599e1e6ee29785d754 (patch) | |
| tree | 8c631fe933f9e4e75be5bc1448b1ab8bd1bd9bd3 /src/lib/kdm_cli.cc | |
| parent | b1d0ce202bac3fedbc5c77e879cbfd253befbf8a (diff) | |
Make -S parameter to dcpomatic2_kdm_cli also filter screens (#2324).
Diffstat (limited to 'src/lib/kdm_cli.cc')
| -rw-r--r-- | src/lib/kdm_cli.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/lib/kdm_cli.cc b/src/lib/kdm_cli.cc index 56977b521..79e65f9de 100644 --- a/src/lib/kdm_cli.cc +++ b/src/lib/kdm_cli.cc @@ -423,7 +423,7 @@ try optional<string> cinema_name; shared_ptr<Cinema> cinema; optional<boost::filesystem::path> certificate; - string screen; + optional<string> screen; list<shared_ptr<Screen>> screens; optional<dcp::EncryptedKDM> dkdm; optional<boost::posix_time::ptime> valid_from; @@ -440,6 +440,9 @@ try program_name = argv[0]; + /* Reset getopt() so we can call this method several times in one test process */ + optind = 1; + int option_index = 0; while (true) { static struct option long_options[] = { @@ -535,6 +538,9 @@ try cinema = make_shared<Cinema>(optarg, list<string>(), "", 0, 0); break; case 'S': + /* Similarly, this could be the name of a new (temporary) screen or the name of a screen + * to search for. + */ screen = optarg; break; case 'C': @@ -558,7 +564,7 @@ try if (certificate) { /* Make a new screen and add it to the current cinema */ dcp::CertificateChain chain(dcp::file_to_string(*certificate)); - auto screen_to_add = std::make_shared<Screen>(screen, "", chain.leaf(), boost::none, vector<TrustedDevice>()); + auto screen_to_add = std::make_shared<Screen>(screen.get_value_or(""), "", chain.leaf(), boost::none, vector<TrustedDevice>()); if (cinema) { cinema->add_screen(screen_to_add); } @@ -596,6 +602,9 @@ try } screens = find_cinema (*cinema_name)->screens (); + if (screen) { + screens.erase(std::remove_if(screens.begin(), screens.end(), [&screen](shared_ptr<Screen> s) { return s->name != *screen; }), screens.end()); + } } if (duration_string) { |
