Correctly handle multiple cinemas and multiple screens per cinema.
authorMart Jansink <mart@gofilex.nl>
Mon, 12 Feb 2018 21:01:42 +0000 (22:01 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 14 Feb 2018 23:28:26 +0000 (23:28 +0000)
src/tools/dcpomatic_kdm_cli.cc

index fe83e9e41cf8b8b23f377e1a80068de16e21e92d..4b7a35f7ebf4b144c4f6e08804044998120498cf 100644 (file)
@@ -322,6 +322,7 @@ from_dkdm (
                        if (!i->recipient) {
                                continue;
                        }
                        if (!i->recipient) {
                                continue;
                        }
+
                        screen_kdms.push_back (
                                ScreenKDM (
                                        i,
                        screen_kdms.push_back (
                                ScreenKDM (
                                        i,
@@ -380,7 +381,6 @@ int main (int argc, char* argv[])
        string screen_description = "";
        list<shared_ptr<Screen> > screens;
        optional<dcp::Certificate> certificate;
        string screen_description = "";
        list<shared_ptr<Screen> > screens;
        optional<dcp::Certificate> certificate;
-       vector<dcp::Certificate> trusted_devices;
        optional<dcp::EncryptedKDM> dkdm;
        optional<boost::posix_time::ptime> valid_from;
        optional<boost::posix_time::ptime> valid_to;
        optional<dcp::EncryptedKDM> dkdm;
        optional<boost::posix_time::ptime> valid_from;
        optional<boost::posix_time::ptime> valid_to;
@@ -463,29 +463,24 @@ int main (int argc, char* argv[])
                        verbose = true;
                        break;
                case 'c':
                        verbose = true;
                        break;
                case 'c':
-                       if (certificate) {
-                               shared_ptr<Screen> screen (new Screen (screen_description, certificate, trusted_devices));
-                               if (cinema_name) {
-                                       cinema->add_screen (screen);
-                               }
-                               screens.push_back (screen);
-
-                               certificate = boost::none;
-                               screen_description = "";
-                               trusted_devices = vector<dcp::Certificate> ();
-                       }
-
                        cinema_name = optarg;
                        cinema = shared_ptr<Cinema> (new Cinema (optarg, list<string> (), "", 0, 0 ));
                        break;
                case 'S':
                        screen_description = optarg;
                        break;
                        cinema_name = optarg;
                        cinema = shared_ptr<Cinema> (new Cinema (optarg, list<string> (), "", 0, 0 ));
                        break;
                case 'S':
                        screen_description = optarg;
                        break;
-               case 'C':
+               case 'C': {
                        certificate = dcp::Certificate (dcp::file_to_string (optarg));
                        certificate = dcp::Certificate (dcp::file_to_string (optarg));
+                       vector<dcp::Certificate> trusted_devices;
+                       shared_ptr<Screen> screen (new Screen (screen_description, certificate, trusted_devices));
+                       if (cinema_name) {
+                               cinema->add_screen (screen);
+                       }
+                       screens.push_back (screen);
                        break;
                        break;
+               }
                case 'T':
                case 'T':
-                       trusted_devices.push_back (dcp::Certificate (dcp::file_to_string (optarg)));
+                       screens.back()->trusted_devices.push_back (dcp::Certificate (dcp::file_to_string (optarg)));
                        break;
                case 'B':
                        list_cinemas = true;
                        break;
                case 'B':
                        list_cinemas = true;
@@ -509,14 +504,6 @@ int main (int argc, char* argv[])
                exit (EXIT_SUCCESS);
        }
 
                exit (EXIT_SUCCESS);
        }
 
-       if (certificate) {
-               shared_ptr<Screen> screen (new Screen (screen_description, certificate, trusted_devices));
-               if (cinema_name) {
-                       cinema->add_screen (screen);
-               }
-               screens.push_back (screen);
-       }
-
        if (!duration_string && !valid_to) {
                error ("you must specify a --valid-duration or --valid-to");
        }
        if (!duration_string && !valid_to) {
                error ("you must specify a --valid-duration or --valid-to");
        }