Add --cinemas-file option to KDM CLI.
authorCarl Hetherington <cth@carlh.net>
Thu, 24 Aug 2023 15:55:39 +0000 (17:55 +0200)
committerCarl Hetherington <cth@carlh.net>
Thu, 24 Aug 2023 15:55:39 +0000 (17:55 +0200)
src/lib/kdm_cli.cc
test/kdm_cli_test.cc

index 23a60c9adbf14fbc9347951b70565539002634ed..3402fa71cf0cbc061bb5f5c6398e725af93af925 100644 (file)
@@ -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));
index c91cb64f41f01975c3572e5f5596a55ca5e6e709..4114cebd4e5dcb6169a6712a3c4cf0828c402fd0 100644 (file)
@@ -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 ()");
+}
+