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");
}
write_files (kdms, zip, output, container_name_format, filename_format, verbose, out);
if (email) {
- send_emails ({kdms}, container_name_format, filename_format, film->dcp_name());
+ send_emails ({kdms}, container_name_format, filename_format, film->dcp_name(), {});
}
} catch (FileError& e) {
throw KDMCLIError (String::compose("%1 (%2)", e.what(), e.file().string()));
}
write_files (kdms, zip, output, container_name_format, filename_format, verbose, out);
if (email) {
- send_emails ({kdms}, container_name_format, filename_format, dkdm.annotation_text().get_value_or(""));
+ send_emails ({kdms}, container_name_format, filename_format, dkdm.annotation_text().get_value_or(""), {});
}
} catch (FileError& e) {
throw KDMCLIError (String::compose("%1 (%2)", e.what(), e.file().string()));
auto filename_format = Config::instance()->kdm_filename_format();
optional<string> cinema_name;
shared_ptr<Cinema> cinema;
- string screen_description;
+ optional<boost::filesystem::path> certificate;
+ optional<string> screen;
list<shared_ptr<Screen>> screens;
optional<dcp::EncryptedKDM> dkdm;
optional<boost::posix_time::ptime> valid_from;
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[] = {
cinema = make_shared<Cinema>(optarg, list<string>(), "", 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>(screen_description, "", chain.leaf(), boost::none, vector<TrustedDevice>());
- 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 ()) {
}
}
+ 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.get_value_or(""), "", chain.leaf(), boost::none, vector<TrustedDevice>());
+ 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) {
}
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) {