Remove in-place translations support.
[dcpomatic.git] / src / lib / kdm_cli.cc
index 05a59142f1f037bf77f0fbcbb50e626eb04ed791..2d3a021b5f5709368c2c46854ed561dbd24c8579 100644 (file)
@@ -27,7 +27,7 @@
 #include "cinema.h"
 #include "config.h"
 #include "dkdm_wrapper.h"
-#include "emailer.h"
+#include "email.h"
 #include "exceptions.h"
 #include "film.h"
 #include "kdm_with_metadata.h"
@@ -35,6 +35,7 @@
 #include <dcp/certificate.h>
 #include <dcp/decrypted_kdm.h>
 #include <dcp/encrypted_kdm.h>
+#include <dcp/filesystem.h>
 #include <getopt.h>
 
 
@@ -58,22 +59,23 @@ help (std::function<void (string)> out)
 {
        out (String::compose("Syntax: %1 [OPTION] <FILM|CPL-ID|DKDM>", program_name));
        out ("  -h, --help                               show this help");
-       out ("  -o, --output                             output file or directory");
-       out ("  -K, --filename-format                    filename format for KDMs");
-       out ("  -Z, --container-name-format              filename format for ZIP containers");
-       out ("  -f, --valid-from                         valid from time (in local time zone of the cinema) (e.g. \"2013-09-28 01:41:51\") or \"now\"");
-       out ("  -t, --valid-to                           valid to time (in local time zone of the cinema) (e.g. \"2014-09-28 01:41:51\")");
-       out ("  -d, --valid-duration                     valid duration (e.g. \"1 day\", \"4 hours\", \"2 weeks\")");
-       out ("  -F, --formulation                        modified-transitional-1, multiple-modified-transitional-1, dci-any or dci-specific [default modified-transitional-1]");
+       out ("  -o, --output <path>                      output file or directory");
+       out ("  -K, --filename-format <format>           filename format for KDMs");
+       out ("  -Z, --container-name-format <format>     filename format for ZIP containers");
+       out ("  -f, --valid-from <time>                  valid from time (in local time zone of the cinema) (e.g. \"2013-09-28 01:41:51\") or \"now\"");
+       out ("  -t, --valid-to <time>                    valid to time (in local time zone of the cinema) (e.g. \"2014-09-28 01:41:51\")");
+       out ("  -d, --valid-duration <duration>          valid duration (e.g. \"1 day\", \"4 hours\", \"2 weeks\")");
+       out ("  -F, --formulation <formulation>          modified-transitional-1, multiple-modified-transitional-1, dci-any or dci-specific [default modified-transitional-1]");
        out ("  -p, --disable-forensic-marking-picture   disable forensic marking of pictures essences");
        out ("  -a, --disable-forensic-marking-audio     disable forensic marking of audio essences (optionally above a given channel, e.g 12)");
        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                             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 ("  -c, --cinema <name|email>                cinema name (when using -C) or name/email (to filter cinemas)");
+       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 ("");
@@ -255,13 +257,21 @@ from_film (
                }
 
 
-               if (find(period_checks.begin(), period_checks.end(), KDMCertificatePeriod::KDM_OUTSIDE_CERTIFICATE) != period_checks.end()) {
+               if (find_if(
+                       period_checks.begin(),
+                       period_checks.end(),
+                       [](KDMCertificatePeriod const& p) { return p.overlap == KDMCertificateOverlap::KDM_OUTSIDE_CERTIFICATE; }
+                  ) != period_checks.end()) {
                        throw KDMCLIError(
                                "Some KDMs would have validity periods which are completely outside the recipient certificate periods.  Such KDMs are very unlikely to work, so will not be created."
                                );
                }
 
-               if (find(period_checks.begin(), period_checks.end(), KDMCertificatePeriod::KDM_OVERLAPS_CERTIFICATE) != period_checks.end()) {
+               if (find_if(
+                       period_checks.begin(),
+                       period_checks.end(),
+                       [](KDMCertificatePeriod const& p) { return p.overlap == KDMCertificateOverlap::KDM_OVERLAPS_CERTIFICATE; }
+                  ) != period_checks.end()) {
                        out("For some of these KDMs the recipient certificate's validity period will not cover the whole of the KDM validity period.  This might cause problems with the KDMs.");
                }
 
@@ -434,7 +444,7 @@ optional<string>
 kdm_cli (int argc, char* argv[], std::function<void (string)> out)
 try
 {
-       boost::filesystem::path output = boost::filesystem::current_path();
+       boost::filesystem::path output = dcp::filesystem::current_path();
        auto container_name_format = Config::instance()->kdm_container_name_format();
        auto filename_format = Config::instance()->kdm_filename_format();
        optional<string> cinema_name;
@@ -454,6 +464,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 +493,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;
@@ -494,7 +506,7 @@ try
                switch (c) {
                case 'h':
                        help (out);
-                       exit (EXIT_SUCCESS);
+                       return {};
                case 'o':
                        output = optarg;
                        break;
@@ -575,9 +587,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));
@@ -591,14 +610,14 @@ try
        if (list_cinemas) {
                auto cinemas = Config::instance()->cinemas ();
                for (auto i: cinemas) {
-                       out (String::compose("%1 (%2)", i->name, Emailer::address_list (i->emails)));
+                       out (String::compose("%1 (%2)", i->name, Email::address_list(i->emails)));
                }
-               exit (EXIT_SUCCESS);
+               return {};
        }
 
        if (list_dkdm_cpls) {
                dump_dkdm_group (Config::instance()->dkdms(), 0, out);
-               exit (EXIT_SUCCESS);
+               return {};
        }
 
        if (!duration_string && !valid_to) {
@@ -633,7 +652,7 @@ try
        }
 
        string const thing = argv[optind];
-       if (boost::filesystem::is_directory(thing) && boost::filesystem::is_regular_file(boost::filesystem::path(thing) / "metadata.xml")) {
+       if (dcp::filesystem::is_directory(thing) && dcp::filesystem::is_regular_file(boost::filesystem::path(thing) / "metadata.xml")) {
                from_film (
                        screens,
                        thing,
@@ -651,7 +670,7 @@ try
                        out
                        );
        } else {
-               if (boost::filesystem::is_regular_file(thing)) {
+               if (dcp::filesystem::is_regular_file(thing)) {
                        dkdm = dcp::EncryptedKDM (dcp::file_to_string (thing));
                } else {
                        dkdm = find_dkdm (thing);