From c88cdbfdade417bca9e03d9ab54b61c7ad85b852 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 31 Dec 2017 00:04:45 +0000 Subject: [PATCH] Separate from-film code out into a method. --- src/tools/dcpomatic_kdm_cli.cc | 140 ++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 62 deletions(-) diff --git a/src/tools/dcpomatic_kdm_cli.cc b/src/tools/dcpomatic_kdm_cli.cc index bc7dd60c6..dca951ef6 100644 --- a/src/tools/dcpomatic_kdm_cli.cc +++ b/src/tools/dcpomatic_kdm_cli.cc @@ -162,12 +162,88 @@ find_cinema (string cinema_name) return *i; } +void +from_film ( + boost::filesystem::path film_dir, + bool verbose, + optional cinema_name, + optional output, + optional certificate_file, + boost::posix_time::ptime valid_from, + boost::posix_time::ptime valid_to, + dcp::Formulation formulation, + bool zip + ) +{ + shared_ptr film; + try { + film.reset (new Film (film_dir)); + film->read_metadata (); + if (verbose) { + cout << "Read film " << film->name () << "\n"; + } + } catch (std::exception& e) { + cerr << program_name << ": error reading film `" << film_dir.string() << "' (" << e.what() << ")\n"; + exit (EXIT_FAILURE); + } + + /* XXX: allow specification of this */ + vector cpls = film->cpls (); + if (cpls.empty ()) { + error ("no CPLs found in film"); + } else if (cpls.size() > 1) { + error ("more than one CPL found in film"); + } + + boost::filesystem::path cpl = cpls.front().cpl_file; + + if (!cinema_name) { + + if (!output) { + error ("you must specify --output"); + } + + dcp::Certificate certificate (dcp::file_to_string (*certificate_file)); + dcp::EncryptedKDM kdm = film->make_kdm ( + certificate, vector(), cpl, dcp::LocalTime (valid_from), dcp::LocalTime (valid_to), formulation + ); + kdm.as_xml (*output); + if (verbose) { + cout << "Generated KDM " << *output << " for certificate.\n"; + } + } else { + + if (!output) { + output = "."; + } + + dcp::NameFormat::Map values; + values['f'] = film->name(); + values['b'] = dcp::LocalTime(valid_from).date() + " " + dcp::LocalTime(valid_from).time_of_day(true, false); + values['e'] = dcp::LocalTime(valid_to).date() + " " + dcp::LocalTime(valid_to).time_of_day(true, false); + + try { + list screen_kdms = film->make_kdms ( + find_cinema(*cinema_name)->screens(), cpl, valid_from, valid_to, formulation + ); + + write_files (screen_kdms, zip, *output, values, verbose); + } catch (FileError& e) { + cerr << program_name << ": " << e.what() << " (" << e.file().string() << ")\n"; + exit (EXIT_FAILURE); + } catch (KDMError& e) { + cerr << program_name << ": " << e.what() << "\n"; + exit (EXIT_FAILURE); + } + } +} + int main (int argc, char* argv[]) { optional output; optional valid_from; optional valid_to; - optional certificate_file; + optional certificate_file; bool zip = false; optional cinema_name; bool cinemas = false; @@ -279,71 +355,11 @@ int main (int argc, char* argv[]) dcpomatic_setup_path_encoding (); dcpomatic_setup (); - shared_ptr film; - try { - film.reset (new Film (film_dir)); - film->read_metadata (); - if (verbose) { - cout << "Read film " << film->name () << "\n"; - } - } catch (std::exception& e) { - cerr << program_name << ": error reading film `" << film_dir.string() << "' (" << e.what() << ")\n"; - exit (EXIT_FAILURE); - } - if (verbose) { cout << "Making KDMs valid from " << valid_from.get() << " to " << valid_to.get() << "\n"; } - /* XXX: allow specification of this */ - vector cpls = film->cpls (); - if (cpls.empty ()) { - error ("no CPLs found in film"); - } else if (cpls.size() > 1) { - error ("more than one CPL found in film"); - } - - boost::filesystem::path cpl = cpls.front().cpl_file; - - if (!cinema_name) { - - if (!output) { - error ("you must specify --output"); - } - - dcp::Certificate certificate (dcp::file_to_string (*certificate_file)); - dcp::EncryptedKDM kdm = film->make_kdm ( - certificate, vector(), cpl, dcp::LocalTime (*valid_from), dcp::LocalTime (*valid_to), formulation - ); - kdm.as_xml (*output); - if (verbose) { - cout << "Generated KDM " << *output << " for certificate.\n"; - } - } else { - - if (!output) { - output = "."; - } - - dcp::NameFormat::Map values; - values['f'] = film->name(); - values['b'] = dcp::LocalTime(*valid_from).date() + " " + dcp::LocalTime(*valid_from).time_of_day(true, false); - values['e'] = dcp::LocalTime(*valid_to).date() + " " + dcp::LocalTime(*valid_to).time_of_day(true, false); - - try { - list screen_kdms = film->make_kdms ( - find_cinema(*cinema_name)->screens(), cpl, valid_from.get(), valid_to.get(), formulation - ); - - write_files (screen_kdms, zip, *output, values, verbose); - } catch (FileError& e) { - cerr << argv[0] << ": " << e.what() << " (" << e.file().string() << ")\n"; - exit (EXIT_FAILURE); - } catch (KDMError& e) { - cerr << argv[0] << ": " << e.what() << "\n"; - exit (EXIT_FAILURE); - } - } + from_film (film_dir, verbose, cinema_name, output, certificate_file, *valid_from, *valid_to, formulation, zip); return 0; } -- 2.30.2