X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fkdm_cli.cc;h=a6656fa0e52ba736a5190447839d05bb8bf5506a;hb=1e12bd69a8c7d46d54aa947debcf77230361f972;hp=4c1a55d7d3f19423148d6797040fdcbb182f2c22;hpb=cacb0750b9e6efbefa5ffa33a0df9552db5483db;p=dcpomatic.git diff --git a/src/lib/kdm_cli.cc b/src/lib/kdm_cli.cc index 4c1a55d7d..a6656fa0e 100644 --- a/src/lib/kdm_cli.cc +++ b/src/lib/kdm_cli.cc @@ -70,8 +70,8 @@ help (std::function out) out (" -e, --email email KDMs to cinemas"); out (" -z, --zip ZIP each cinema's KDMs into its own file"); out (" -v, --verbose be verbose"); - out (" -c, --cinema specify a cinema, either by name or email address"); - out (" -S, --screen screen description"); + out (" -c, --cinema cinema name (when using -C) or name/email (to filter cinemas)"); + out (" -S, --screen screen name (when using -C) or screen name (to filter screens when using -c)"); out (" -C, --certificate file containing projector certificate"); out (" -T, --trusted-device file containing a trusted device's certificate"); out (" --list-cinemas list known cinemas from the DCP-o-matic settings"); @@ -422,7 +422,8 @@ try auto filename_format = Config::instance()->kdm_filename_format(); optional cinema_name; shared_ptr cinema; - string screen_description; + optional certificate; + optional screen; list> screens; optional dkdm; optional valid_from; @@ -439,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[] = { @@ -534,19 +538,14 @@ try cinema = make_shared(optarg, list(), "", 0, 0); break; case 'S': - screen_description = optarg; + /* 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': - { - /* Make a new screen and add it to the current cinema */ - dcp::CertificateChain chain (dcp::file_to_string(optarg)); - auto screen = std::make_shared(screen_description, "", chain.leaf(), boost::none, vector()); - if (cinema) { - cinema->add_screen (screen); - } - screens.push_back (screen); + certificate = optarg; break; - } case 'T': /* A trusted device ends up in the last screen we made */ if (!screens.empty ()) { @@ -562,6 +561,16 @@ 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.get_value_or(""), "", chain.leaf(), boost::none, vector()); + if (cinema) { + cinema->add_screen(screen_to_add); + } + screens.push_back(screen_to_add); + } + if (list_cinemas) { auto cinemas = Config::instance()->cinemas (); for (auto i: cinemas) { @@ -593,6 +602,9 @@ try } screens = find_cinema (*cinema_name)->screens (); + if (screen) { + screens.erase(std::remove_if(screens.begin(), screens.end(), [&screen](shared_ptr s) { return s->name != *screen; }), screens.end()); + } } if (duration_string) {