summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-08-24 17:55:39 +0200
committerCarl Hetherington <cth@carlh.net>2023-08-24 17:55:39 +0200
commit556d0dfce7577d6bad33d246a37f00a7627c295a (patch)
treecf49217122165db2ddb3b51e845d280b4f6f4c02
parent9e9de4d02ef9a9d5b0033db65791b88a37d78216 (diff)
Add --cinemas-file option to KDM CLI.
-rw-r--r--src/lib/kdm_cli.cc12
-rw-r--r--test/kdm_cli_test.cc23
2 files changed, 34 insertions, 1 deletions
diff --git a/src/lib/kdm_cli.cc b/src/lib/kdm_cli.cc
index 23a60c9ad..3402fa71c 100644
--- a/src/lib/kdm_cli.cc
+++ b/src/lib/kdm_cli.cc
@@ -74,6 +74,7 @@ help (std::function<void (string)> out)
out (" -S, --screen <name> screen name (when using -C) or screen name (to filter screens when using -c)");
out (" -C, --certificate <file> file containing projector certificate");
out (" -T, --trusted-device <file> file containing a trusted device's certificate");
+ out (" --cinemas-file <file> use the given file as a list of cinemas instead of the current configuration");
out (" --list-cinemas list known cinemas from the DCP-o-matic settings");
out (" --list-dkdm-cpls list CPLs for which DCP-o-matic has DKDMs");
out ("");
@@ -454,6 +455,7 @@ try
bool disable_forensic_marking_picture = false;
optional<int> disable_forensic_marking_audio;
bool email = false;
+ optional<boost::filesystem::path> cinemas_file;
program_name = argv[0];
@@ -482,10 +484,11 @@ try
{ "trusted-device", required_argument, 0, 'T' },
{ "list-cinemas", no_argument, 0, 'B' },
{ "list-dkdm-cpls", no_argument, 0, 'D' },
+ { "cinemas-file", required_argument, 0, 'E' },
{ 0, 0, 0, 0 }
};
- int c = getopt_long (argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:BD", long_options, &option_index);
+ int c = getopt_long (argc, argv, "ho:K:Z:f:t:d:F:pae::zvc:S:C:T:BDE:", long_options, &option_index);
if (c == -1) {
break;
@@ -575,9 +578,16 @@ try
case 'D':
list_dkdm_cpls = true;
break;
+ case 'E':
+ cinemas_file = optarg;
+ break;
}
}
+ if (cinemas_file) {
+ Config::instance()->set_cinemas_file(*cinemas_file);
+ }
+
if (certificate) {
/* Make a new screen and add it to the current cinema */
dcp::CertificateChain chain(dcp::file_to_string(*certificate));
diff --git a/test/kdm_cli_test.cc b/test/kdm_cli_test.cc
index c91cb64f4..4114cebd4 100644
--- a/test/kdm_cli_test.cc
+++ b/test/kdm_cli_test.cc
@@ -172,3 +172,26 @@ BOOST_AUTO_TEST_CASE(kdm_cli_select_screen)
}
+BOOST_AUTO_TEST_CASE(kdm_cli_specify_cinemas_file)
+{
+ ConfigRestorer cr;
+
+ setup_test_config();
+
+ vector<string> args = {
+ "kdm_cli",
+ "--cinemas-file",
+ "test/data/cinemas.xml",
+ "--list-cinemas"
+ };
+
+ vector<string> output;
+ auto const error = run(args, output);
+ BOOST_CHECK(!error);
+
+ BOOST_REQUIRE_EQUAL(output.size(), 3U);
+ BOOST_CHECK_EQUAL(output[0], "stinking dump ()");
+ BOOST_CHECK_EQUAL(output[1], "classy joint ()");
+ BOOST_CHECK_EQUAL(output[2], "Great ()");
+}
+