From 36ce958a516567d8481163692c028a88c6ce0df7 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 4 May 2020 22:53:08 +0200 Subject: Rename ScreenKDM -> KDMWithMetadata --- src/lib/wscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/wscript') diff --git a/src/lib/wscript b/src/lib/wscript index ea52079d0..19d68f045 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -125,6 +125,7 @@ sources = """ job_manager.cc j2k_encoder.cc json_server.cc + kdm_with_metadata.cc lock_file_checker.cc log.cc log_entry.cc @@ -145,7 +146,6 @@ sources = """ scoped_temporary.cc scp_uploader.cc screen.cc - screen_kdm.cc send_kdm_email_job.cc send_notification_email_job.cc send_problem_report_job.cc -- cgit v1.2.3 From 8f8730cadb3dae36e8aa7b7c732a7c162eac0fb6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 5 May 2020 00:56:54 +0200 Subject: Move some functions to kdm_with_metadata --- src/lib/cinema_kdms.cc | 245 ------------------------------------- src/lib/cinema_kdms.h | 56 --------- src/lib/kdm_with_metadata.cc | 216 ++++++++++++++++++++++++++++++++ src/lib/kdm_with_metadata.h | 35 ++++++ src/lib/send_kdm_email_job.cc | 2 +- src/lib/wscript | 1 - src/tools/dcpomatic.cc | 1 - src/tools/dcpomatic_kdm.cc | 1 - src/tools/dcpomatic_kdm_cli.cc | 1 - src/wx/confirm_kdm_email_dialog.cc | 1 - src/wx/kdm_dialog.cc | 1 - src/wx/kdm_output_panel.cc | 1 - src/wx/recreate_chain_dialog.cc | 1 - 13 files changed, 252 insertions(+), 310 deletions(-) delete mode 100644 src/lib/cinema_kdms.cc delete mode 100644 src/lib/cinema_kdms.h (limited to 'src/lib/wscript') diff --git a/src/lib/cinema_kdms.cc b/src/lib/cinema_kdms.cc deleted file mode 100644 index 94e83f807..000000000 --- a/src/lib/cinema_kdms.cc +++ /dev/null @@ -1,245 +0,0 @@ -/* - Copyright (C) 2013-2015 Carl Hetherington - - This file is part of DCP-o-matic. - - DCP-o-matic is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - DCP-o-matic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with DCP-o-matic. If not, see . - -*/ - -#include "exceptions.h" -#include "cinema_kdms.h" -#include "cinema.h" -#include "screen.h" -#include "config.h" -#include "util.h" -#include "emailer.h" -#include "compose.hpp" -#include "log.h" -#include "zipper.h" -#include "dcpomatic_log.h" -#include "kdm_with_metadata.h" -#include - -#include "i18n.h" - -using std::list; -using std::cout; -using std::string; -using std::runtime_error; -using boost::shared_ptr; -using boost::function; -using boost::optional; - -void -make_zip_file (list kdms, boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values) -{ - Zipper zipper (zip_file); - - BOOST_FOREACH (KDMWithMetadataPtr i, kdms) { - name_values['i'] = i->kdm_id (); - string const name = careful_string_filter(name_format.get(name_values, ".xml")); - zipper.add (name, i->kdm_as_xml()); - } - - zipper.close (); -} - -/** Collect a list of KDMWithMetadatas into a list of list so that each - * CinemaKDM contains the KDMs for its cinema. - */ -list > -collect (list screen_kdms) -{ - list > cinema_kdms; - - while (!screen_kdms.empty ()) { - - /* Get all the screens from a single cinema */ - - list ck; - - list::iterator i = screen_kdms.begin (); - ck.push_back (*i); - list::iterator j = i; - ++i; - screen_kdms.remove (*j); - - while (i != screen_kdms.end ()) { - if ((*i)->cinema() == ck.front()->cinema()) { - ck.push_back (*i); - list::iterator j = i; - ++i; - screen_kdms.remove (*j); - } else { - ++i; - } - } - - cinema_kdms.push_back (ck); - } - - return cinema_kdms; -} - -/** Write one directory per cinema into another directory */ -int -write_directories ( - list > cinema_kdms, - boost::filesystem::path directory, - dcp::NameFormat container_name_format, - dcp::NameFormat filename_format, - dcp::NameFormat::Map name_values, - function confirm_overwrite - ) -{ - /* No specific screen */ - name_values['s'] = ""; - - int written = 0; - - BOOST_FOREACH (list const & i, cinema_kdms) { - boost::filesystem::path path = directory; - path /= container_name_format.get(name_values, ""); - if (!boost::filesystem::exists (path) || confirm_overwrite (path)) { - boost::filesystem::create_directories (path); - write_files (i, path, filename_format, name_values, confirm_overwrite); - } - written += i.size(); - } - - return written; -} - -/** Write one ZIP file per cinema into a directory */ -int -write_zip_files ( - list > cinema_kdms, - boost::filesystem::path directory, - dcp::NameFormat container_name_format, - dcp::NameFormat filename_format, - dcp::NameFormat::Map name_values, - function confirm_overwrite - ) -{ - /* No specific screen */ - name_values['s'] = ""; - - int written = 0; - - BOOST_FOREACH (list const & i, cinema_kdms) { - boost::filesystem::path path = directory; - path /= container_name_format.get(name_values, ".zip"); - if (!boost::filesystem::exists (path) || confirm_overwrite (path)) { - if (boost::filesystem::exists (path)) { - /* Creating a new zip file over an existing one is an error */ - boost::filesystem::remove (path); - } - make_zip_file (i, path, filename_format, name_values); - written += i.size(); - } - } - - return written; -} - -/** Email one ZIP file per cinema to the cinema. - * @param cinema_kdms KDMS to email. - * @param container_name_format Format of folder / ZIP to use. - * @param filename_format Format of filenames to use. - * @param name_values Values to substitute into \p container_name_format and \p filename_format. - * @param cpl_name Name of the CPL that the KDMs are for. - */ -void -email ( - list > cinema_kdms, - dcp::NameFormat container_name_format, - dcp::NameFormat filename_format, - dcp::NameFormat::Map name_values, - string cpl_name - ) -{ - Config* config = Config::instance (); - - if (config->mail_server().empty()) { - throw NetworkError (_("No mail server configured in preferences")); - } - - /* No specific screen */ - name_values['s'] = ""; - - BOOST_FOREACH (list const & i, cinema_kdms) { - - if (i.front()->cinema()->emails.empty()) { - continue; - } - - boost::filesystem::path zip_file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path(); - boost::filesystem::create_directories (zip_file); - zip_file /= container_name_format.get(name_values, ".zip"); - make_zip_file (i, zip_file, filename_format, name_values); - - string subject = config->kdm_subject(); - boost::algorithm::replace_all (subject, "$CPL_NAME", cpl_name); - boost::algorithm::replace_all (subject, "$START_TIME", name_values['b']); - boost::algorithm::replace_all (subject, "$END_TIME", name_values['e']); - boost::algorithm::replace_all (subject, "$CINEMA_NAME", i.front()->cinema()->name); - - string body = config->kdm_email().c_str(); - boost::algorithm::replace_all (body, "$CPL_NAME", cpl_name); - boost::algorithm::replace_all (body, "$START_TIME", name_values['b']); - boost::algorithm::replace_all (body, "$END_TIME", name_values['e']); - boost::algorithm::replace_all (body, "$CINEMA_NAME", i.front()->cinema()->name); - - string screens; - BOOST_FOREACH (KDMWithMetadataPtr j, i) { - optional screen_name = j->get('n'); - if (screen_name) { - screens += *screen_name + ", "; - } - } - boost::algorithm::replace_all (body, "$SCREENS", screens.substr (0, screens.length() - 2)); - - Emailer email (config->kdm_from(), i.front()->cinema()->emails, subject, body); - - BOOST_FOREACH (string i, config->kdm_cc()) { - email.add_cc (i); - } - if (!config->kdm_bcc().empty ()) { - email.add_bcc (config->kdm_bcc ()); - } - - email.add_attachment (zip_file, container_name_format.get(name_values, ".zip"), "application/zip"); - - Config* c = Config::instance (); - - try { - email.send (c->mail_server(), c->mail_port(), c->mail_protocol(), c->mail_user(), c->mail_password()); - } catch (...) { - boost::filesystem::remove (zip_file); - dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.email(), LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log ("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL); - throw; - } - - boost::filesystem::remove (zip_file); - - dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.email(), LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log ("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); - dcpomatic_log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL); - } -} diff --git a/src/lib/cinema_kdms.h b/src/lib/cinema_kdms.h deleted file mode 100644 index 0a5749ee8..000000000 --- a/src/lib/cinema_kdms.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright (C) 2013-2015 Carl Hetherington - - This file is part of DCP-o-matic. - - DCP-o-matic is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - DCP-o-matic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with DCP-o-matic. If not, see . - -*/ - -#include "kdm_with_metadata.h" - -class Cinema; -class Job; -class Log; - -void make_zip_file (std::list kdms, boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values); - -std::list > collect (std::list kdms); - -int write_directories ( - std::list > cinema_kdms, - boost::filesystem::path directory, - dcp::NameFormat container_name_format, - dcp::NameFormat filename_format, - dcp::NameFormat::Map name_values, - boost::function confirm_overwrite - ); - -int write_zip_files ( - std::list > cinema_kdms, - boost::filesystem::path directory, - dcp::NameFormat container_name_format, - dcp::NameFormat filename_format, - dcp::NameFormat::Map name_values, - boost::function confirm_overwrite - ); - -void email ( - std::list > cinema_kdms, - dcp::NameFormat container_name_format, - dcp::NameFormat filename_format, - dcp::NameFormat::Map name_values, - std::string cpl_name - ); - diff --git a/src/lib/kdm_with_metadata.cc b/src/lib/kdm_with_metadata.cc index 012172a8e..fe4f9ccdd 100644 --- a/src/lib/kdm_with_metadata.cc +++ b/src/lib/kdm_with_metadata.cc @@ -22,13 +22,22 @@ #include "cinema.h" #include "screen.h" #include "util.h" +#include "zipper.h" +#include "config.h" +#include "dcpomatic_log.h" +#include "emailer.h" #include +#include +#include + +#include "i18n.h" using std::string; using std::cout; using std::list; using boost::shared_ptr; using boost::optional; +using boost::function; int write_files ( @@ -79,3 +88,210 @@ KDMWithMetadata::get (char k) const return i->second; } + + +void +make_zip_file (list kdms, boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values) +{ + Zipper zipper (zip_file); + + BOOST_FOREACH (KDMWithMetadataPtr i, kdms) { + name_values['i'] = i->kdm_id (); + string const name = careful_string_filter(name_format.get(name_values, ".xml")); + zipper.add (name, i->kdm_as_xml()); + } + + zipper.close (); +} + + +/** Collect a list of KDMWithMetadatas into a list of list so that each + * CinemaKDM contains the KDMs for its cinema. + */ +list > +collect (list screen_kdms) +{ + list > cinema_kdms; + + while (!screen_kdms.empty ()) { + + /* Get all the screens from a single cinema */ + + list ck; + + list::iterator i = screen_kdms.begin (); + ck.push_back (*i); + list::iterator j = i; + ++i; + screen_kdms.remove (*j); + + while (i != screen_kdms.end ()) { + if ((*i)->cinema() == ck.front()->cinema()) { + ck.push_back (*i); + list::iterator j = i; + ++i; + screen_kdms.remove (*j); + } else { + ++i; + } + } + + cinema_kdms.push_back (ck); + } + + return cinema_kdms; +} + + +/** Write one directory per cinema into another directory */ +int +write_directories ( + list > cinema_kdms, + boost::filesystem::path directory, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + dcp::NameFormat::Map name_values, + function confirm_overwrite + ) +{ + /* No specific screen */ + name_values['s'] = ""; + + int written = 0; + + BOOST_FOREACH (list const & i, cinema_kdms) { + boost::filesystem::path path = directory; + path /= container_name_format.get(name_values, ""); + if (!boost::filesystem::exists (path) || confirm_overwrite (path)) { + boost::filesystem::create_directories (path); + write_files (i, path, filename_format, name_values, confirm_overwrite); + } + written += i.size(); + } + + return written; +} + + +/** Write one ZIP file per cinema into a directory */ +int +write_zip_files ( + list > cinema_kdms, + boost::filesystem::path directory, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + dcp::NameFormat::Map name_values, + function confirm_overwrite + ) +{ + /* No specific screen */ + name_values['s'] = ""; + + int written = 0; + + BOOST_FOREACH (list const & i, cinema_kdms) { + boost::filesystem::path path = directory; + path /= container_name_format.get(name_values, ".zip"); + if (!boost::filesystem::exists (path) || confirm_overwrite (path)) { + if (boost::filesystem::exists (path)) { + /* Creating a new zip file over an existing one is an error */ + boost::filesystem::remove (path); + } + make_zip_file (i, path, filename_format, name_values); + written += i.size(); + } + } + + return written; +} + + +/** Email one ZIP file per cinema to the cinema. + * @param cinema_kdms KDMS to email. + * @param container_name_format Format of folder / ZIP to use. + * @param filename_format Format of filenames to use. + * @param name_values Values to substitute into \p container_name_format and \p filename_format. + * @param cpl_name Name of the CPL that the KDMs are for. + */ +void +email ( + list > cinema_kdms, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + dcp::NameFormat::Map name_values, + string cpl_name + ) +{ + Config* config = Config::instance (); + + if (config->mail_server().empty()) { + throw NetworkError (_("No mail server configured in preferences")); + } + + /* No specific screen */ + name_values['s'] = ""; + + BOOST_FOREACH (list const & i, cinema_kdms) { + + if (i.front()->cinema()->emails.empty()) { + continue; + } + + boost::filesystem::path zip_file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path(); + boost::filesystem::create_directories (zip_file); + zip_file /= container_name_format.get(name_values, ".zip"); + make_zip_file (i, zip_file, filename_format, name_values); + + string subject = config->kdm_subject(); + boost::algorithm::replace_all (subject, "$CPL_NAME", cpl_name); + boost::algorithm::replace_all (subject, "$START_TIME", name_values['b']); + boost::algorithm::replace_all (subject, "$END_TIME", name_values['e']); + boost::algorithm::replace_all (subject, "$CINEMA_NAME", i.front()->cinema()->name); + + string body = config->kdm_email().c_str(); + boost::algorithm::replace_all (body, "$CPL_NAME", cpl_name); + boost::algorithm::replace_all (body, "$START_TIME", name_values['b']); + boost::algorithm::replace_all (body, "$END_TIME", name_values['e']); + boost::algorithm::replace_all (body, "$CINEMA_NAME", i.front()->cinema()->name); + + string screens; + BOOST_FOREACH (KDMWithMetadataPtr j, i) { + optional screen_name = j->get('n'); + if (screen_name) { + screens += *screen_name + ", "; + } + } + boost::algorithm::replace_all (body, "$SCREENS", screens.substr (0, screens.length() - 2)); + + Emailer email (config->kdm_from(), i.front()->cinema()->emails, subject, body); + + BOOST_FOREACH (string i, config->kdm_cc()) { + email.add_cc (i); + } + if (!config->kdm_bcc().empty ()) { + email.add_bcc (config->kdm_bcc ()); + } + + email.add_attachment (zip_file, container_name_format.get(name_values, ".zip"), "application/zip"); + + Config* c = Config::instance (); + + try { + email.send (c->mail_server(), c->mail_port(), c->mail_protocol(), c->mail_user(), c->mail_password()); + } catch (...) { + boost::filesystem::remove (zip_file); + dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log (email.email(), LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log ("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL); + throw; + } + + boost::filesystem::remove (zip_file); + + dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log (email.email(), LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log ("Email session follows", LogEntry::TYPE_DEBUG_EMAIL); + dcpomatic_log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL); + } +} diff --git a/src/lib/kdm_with_metadata.h b/src/lib/kdm_with_metadata.h index ee84d9eb4..c2a13fced 100644 --- a/src/lib/kdm_with_metadata.h +++ b/src/lib/kdm_with_metadata.h @@ -70,6 +70,41 @@ int write_files ( ); +void make_zip_file (std::list kdms, boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values); + + +std::list > collect (std::list kdms); + + +int write_directories ( + std::list > cinema_kdms, + boost::filesystem::path directory, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + dcp::NameFormat::Map name_values, + boost::function confirm_overwrite + ); + + +int write_zip_files ( + std::list > cinema_kdms, + boost::filesystem::path directory, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + dcp::NameFormat::Map name_values, + boost::function confirm_overwrite + ); + + +void email ( + std::list > cinema_kdms, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + dcp::NameFormat::Map name_values, + std::string cpl_name + ); + + class DCPKDMWithMetadata : public KDMWithMetadata { public: diff --git a/src/lib/send_kdm_email_job.cc b/src/lib/send_kdm_email_job.cc index e9bad4c20..7b4d349f3 100644 --- a/src/lib/send_kdm_email_job.cc +++ b/src/lib/send_kdm_email_job.cc @@ -20,8 +20,8 @@ #include "send_kdm_email_job.h" #include "compose.hpp" +#include "kdm_with_metadata.h" #include "film.h" -#include "cinema_kdms.h" #include #include "i18n.h" diff --git a/src/lib/wscript b/src/lib/wscript index 19d68f045..49c55cc6d 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -47,7 +47,6 @@ sources = """ checker.cc check_content_change_job.cc cinema.cc - cinema_kdms.cc cinema_sound_processor.cc colour_conversion.cc config.cc diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 5976de22a..546286e48 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -72,7 +72,6 @@ #include "lib/cross.h" #include "lib/content_factory.h" #include "lib/compose.hpp" -#include "lib/cinema_kdms.h" #include "lib/dcpomatic_socket.h" #include "lib/hints.h" #include "lib/dcp_content.h" diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index bda944d83..bbaf5bad7 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -40,7 +40,6 @@ #include "lib/job_manager.h" #include "lib/kdm_with_metadata.h" #include "lib/exceptions.h" -#include "lib/cinema_kdms.h" #include "lib/send_kdm_email_job.h" #include "lib/compose.hpp" #include "lib/cinema.h" diff --git a/src/tools/dcpomatic_kdm_cli.cc b/src/tools/dcpomatic_kdm_cli.cc index 493eea2c9..e3e977c6a 100644 --- a/src/tools/dcpomatic_kdm_cli.cc +++ b/src/tools/dcpomatic_kdm_cli.cc @@ -25,7 +25,6 @@ #include "lib/film.h" #include "lib/cinema.h" #include "lib/kdm_with_metadata.h" -#include "lib/cinema_kdms.h" #include "lib/config.h" #include "lib/exceptions.h" #include "lib/emailer.h" diff --git a/src/wx/confirm_kdm_email_dialog.cc b/src/wx/confirm_kdm_email_dialog.cc index eca34b5cf..df6131fe1 100644 --- a/src/wx/confirm_kdm_email_dialog.cc +++ b/src/wx/confirm_kdm_email_dialog.cc @@ -23,7 +23,6 @@ #include "static_text.h" #include "check_box.h" #include "lib/config.h" -#include "lib/cinema_kdms.h" #include using std::list; diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc index f041c16c5..14ba5cf05 100644 --- a/src/wx/kdm_dialog.cc +++ b/src/wx/kdm_dialog.cc @@ -31,7 +31,6 @@ #include "lib/screen.h" #include "lib/kdm_with_metadata.h" #include "lib/job_manager.h" -#include "lib/cinema_kdms.h" #include "lib/config.h" #include "lib/cinema.h" #include diff --git a/src/wx/kdm_output_panel.cc b/src/wx/kdm_output_panel.cc index c2884008f..dcd5c6f91 100644 --- a/src/wx/kdm_output_panel.cc +++ b/src/wx/kdm_output_panel.cc @@ -20,7 +20,6 @@ #include "lib/config.h" #include "lib/cinema.h" -#include "lib/cinema_kdms.h" #include "lib/send_kdm_email_job.h" #include "kdm_output_panel.h" #include "kdm_timing_panel.h" diff --git a/src/wx/recreate_chain_dialog.cc b/src/wx/recreate_chain_dialog.cc index e477cdc1f..ae6afdd08 100644 --- a/src/wx/recreate_chain_dialog.cc +++ b/src/wx/recreate_chain_dialog.cc @@ -23,7 +23,6 @@ #include "static_text.h" #include "check_box.h" #include "lib/config.h" -#include "lib/cinema_kdms.h" #include using std::list; -- cgit v1.2.3 From c4e10c9a007345cca8594d7bfd23138d56e21d5e Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 30 Apr 2020 00:28:33 +0200 Subject: Move TrustedDevice to its own source files. --- src/lib/screen.cc | 32 --------------------------- src/lib/screen.h | 19 +--------------- src/lib/trusted_device.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++++ src/lib/trusted_device.h | 46 ++++++++++++++++++++++++++++++++++++++ src/lib/wscript | 1 + 5 files changed, 104 insertions(+), 50 deletions(-) create mode 100644 src/lib/trusted_device.cc create mode 100644 src/lib/trusted_device.h (limited to 'src/lib/wscript') diff --git a/src/lib/screen.cc b/src/lib/screen.cc index 632370810..c4bcb41c7 100644 --- a/src/lib/screen.cc +++ b/src/lib/screen.cc @@ -77,38 +77,6 @@ Screen::trusted_device_thumbprints () const return t; } -TrustedDevice::TrustedDevice (string thumbprint) - : _thumbprint (thumbprint) -{ - -} - -TrustedDevice::TrustedDevice (dcp::Certificate certificate) - : _certificate (certificate) -{ - -} - -string -TrustedDevice::as_string () const -{ - if (_certificate) { - return _certificate->certificate(true); - } - - return *_thumbprint; -} - -string -TrustedDevice::thumbprint () const -{ - if (_certificate) { - return _certificate->thumbprint (); - } - - return *_thumbprint; -} - KDMWithMetadataPtr kdm_for_screen ( diff --git a/src/lib/screen.h b/src/lib/screen.h index 33c7f280c..a564f1ed3 100644 --- a/src/lib/screen.h +++ b/src/lib/screen.h @@ -22,6 +22,7 @@ #define DCPOMATIC_SCREEN_H #include "kdm_with_metadata.h" +#include "trusted_device.h" #include #include #include @@ -30,24 +31,6 @@ class Cinema; class Film; -class TrustedDevice -{ -public: - explicit TrustedDevice (std::string); - explicit TrustedDevice (dcp::Certificate); - - boost::optional certificate () const { - return _certificate; - } - - std::string thumbprint () const; - std::string as_string () const; - -private: - boost::optional _certificate; - boost::optional _thumbprint; -}; - namespace dcpomatic { /** @class Screen diff --git a/src/lib/trusted_device.cc b/src/lib/trusted_device.cc new file mode 100644 index 000000000..5849b8fd2 --- /dev/null +++ b/src/lib/trusted_device.cc @@ -0,0 +1,56 @@ +/* + Copyright (C) 2013-2016 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "trusted_device.h" + +using std::string; + +TrustedDevice::TrustedDevice (string thumbprint) + : _thumbprint (thumbprint) +{ + +} + +TrustedDevice::TrustedDevice (dcp::Certificate certificate) + : _certificate (certificate) +{ + +} + +string +TrustedDevice::as_string () const +{ + if (_certificate) { + return _certificate->certificate(true); + } + + return *_thumbprint; +} + +string +TrustedDevice::thumbprint () const +{ + if (_certificate) { + return _certificate->thumbprint (); + } + + return *_thumbprint; +} + diff --git a/src/lib/trusted_device.h b/src/lib/trusted_device.h new file mode 100644 index 000000000..7c6af3ea8 --- /dev/null +++ b/src/lib/trusted_device.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 2013-2019 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#ifndef DCPOMATIC_TRUSTED_DEVICE_H +#define DCPOMATIC_TRUSTED_DEVICE_H + +#include +#include +#include + +class TrustedDevice +{ +public: + explicit TrustedDevice (std::string); + explicit TrustedDevice (dcp::Certificate); + + boost::optional certificate () const { + return _certificate; + } + + std::string thumbprint () const; + std::string as_string () const; + +private: + boost::optional _certificate; + boost::optional _thumbprint; +}; + +#endif diff --git a/src/lib/wscript b/src/lib/wscript index 49c55cc6d..508e5f990 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -162,6 +162,7 @@ sources = """ text_ring_buffers.cc timer.cc transcode_job.cc + trusted_device.cc types.cc signal_manager.cc stdout_log.cc -- cgit v1.2.3 From 2d5c6f23650ae3a912badc8b059c83d40c61a0fa Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 30 Apr 2020 01:06:13 +0200 Subject: Derive Screen from a new class KDMRecipient. --- src/lib/kdm_recipient.cc | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/lib/kdm_recipient.h | 43 +++++++++++++++++++++++++++++++++++++++++++ src/lib/screen.cc | 17 ++--------------- src/lib/screen.h | 14 +++++--------- src/lib/wscript | 1 + 5 files changed, 96 insertions(+), 24 deletions(-) create mode 100644 src/lib/kdm_recipient.cc create mode 100644 src/lib/kdm_recipient.h (limited to 'src/lib/wscript') diff --git a/src/lib/kdm_recipient.cc b/src/lib/kdm_recipient.cc new file mode 100644 index 000000000..d05192ac6 --- /dev/null +++ b/src/lib/kdm_recipient.cc @@ -0,0 +1,45 @@ +/* + Copyright (C) 2020 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "kdm_recipient.h" + +KDMRecipient::KDMRecipient (cxml::ConstNodePtr node) + : name (node->string_child("Name")) + , notes (node->optional_string_child("Notes").get_value_or ("")) +{ + if (node->optional_string_child("Certificate")) { + recipient = dcp::Certificate (node->string_child("Certificate")); + } else if (node->optional_string_child("Recipient")) { + recipient = dcp::Certificate (node->string_child("Recipient")); + } +} + + +void +KDMRecipient::as_xml (xmlpp::Element* parent) const +{ + parent->add_child("Name")->add_child_text(name); + if (recipient) { + parent->add_child("Recipient")->add_child_text(recipient->certificate(true)); + } + + parent->add_child("Notes")->add_child_text(notes); +} + diff --git a/src/lib/kdm_recipient.h b/src/lib/kdm_recipient.h new file mode 100644 index 000000000..ee4e8c39c --- /dev/null +++ b/src/lib/kdm_recipient.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2020 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include +#include +#include +#include +#include + +class KDMRecipient +{ +public: + KDMRecipient (std::string const& name_, std::string const& notes_, boost::optional recipient_) + : name (name_) + , notes (notes_) + , recipient (recipient_) + {} + + explicit KDMRecipient (cxml::ConstNodePtr); + + virtual void as_xml (xmlpp::Element *) const; + + std::string name; + std::string notes; + boost::optional recipient; +}; diff --git a/src/lib/screen.cc b/src/lib/screen.cc index c4bcb41c7..2441efccb 100644 --- a/src/lib/screen.cc +++ b/src/lib/screen.cc @@ -34,15 +34,8 @@ using boost::optional; using namespace dcpomatic; Screen::Screen (cxml::ConstNodePtr node) - : name (node->string_child("Name")) - , notes (node->optional_string_child("Notes").get_value_or ("")) + : KDMRecipient (node) { - if (node->optional_string_child ("Certificate")) { - recipient = dcp::Certificate (node->string_child ("Certificate")); - } else if (node->optional_string_child ("Recipient")) { - recipient = dcp::Certificate (node->string_child ("Recipient")); - } - BOOST_FOREACH (cxml::ConstNodePtr i, node->node_children ("TrustedDevice")) { if (boost::algorithm::starts_with(i->content(), "-----BEGIN CERTIFICATE-----")) { trusted_devices.push_back (TrustedDevice(dcp::Certificate(i->content()))); @@ -55,13 +48,7 @@ Screen::Screen (cxml::ConstNodePtr node) void Screen::as_xml (xmlpp::Element* parent) const { - parent->add_child("Name")->add_child_text (name); - if (recipient) { - parent->add_child("Recipient")->add_child_text (recipient->certificate (true)); - } - - parent->add_child("Notes")->add_child_text (notes); - + KDMRecipient::as_xml (parent); BOOST_FOREACH (TrustedDevice i, trusted_devices) { parent->add_child("TrustedDevice")->add_child_text(i.as_string()); } diff --git a/src/lib/screen.h b/src/lib/screen.h index a564f1ed3..013afff85 100644 --- a/src/lib/screen.h +++ b/src/lib/screen.h @@ -22,6 +22,7 @@ #define DCPOMATIC_SCREEN_H #include "kdm_with_metadata.h" +#include "kdm_recipient.h" #include "trusted_device.h" #include #include @@ -40,14 +41,12 @@ namespace dcpomatic { * `recipient' (i.e. the mediablock) and the certificates/thumbprints * of any trusted devices. */ -class Screen +class Screen : public KDMRecipient { public: - Screen (std::string const & na, std::string const & no, boost::optional rec, std::vector td) - : name (na) - , notes (no) - , recipient (rec) - , trusted_devices (td) + Screen (std::string const & name_, std::string const & notes_, boost::optional recipient_, std::vector trusted_devices_) + : KDMRecipient (name_, notes_, recipient_) + , trusted_devices (trusted_devices_) {} explicit Screen (cxml::ConstNodePtr); @@ -56,9 +55,6 @@ public: std::vector trusted_device_thumbprints () const; boost::shared_ptr cinema; - std::string name; - std::string notes; - boost::optional recipient; std::vector trusted_devices; }; diff --git a/src/lib/wscript b/src/lib/wscript index 508e5f990..828f0290b 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -125,6 +125,7 @@ sources = """ j2k_encoder.cc json_server.cc kdm_with_metadata.cc + kdm_recipient.cc lock_file_checker.cc log.cc log_entry.cc -- cgit v1.2.3 From 581797d640af1572f884ddf4395924894b745b3a Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 7 May 2020 00:00:40 +0200 Subject: Add a 'Make DKDM' dialogue box to simplify and (hopefully) clarify DKDM creation (#1637). --- src/lib/kdm_with_metadata.cc | 28 ++++++++++++++-------------- src/lib/kdm_with_metadata.h | 26 ++++++++++++++++---------- src/lib/screen.cc | 3 ++- src/lib/send_kdm_email_job.cc | 18 ++++++++++++++++++ src/lib/send_kdm_email_job.h | 8 ++++++++ src/lib/wscript | 1 + src/tools/dcpomatic.cc | 21 +++++++++++++++++++++ src/tools/dcpomatic_kdm.cc | 2 +- src/tools/dcpomatic_kdm_cli.cc | 2 +- src/wx/cinema_dialog.cc | 31 +------------------------------ src/wx/cinema_dialog.h | 14 -------------- src/wx/kdm_output_panel.cc | 5 +++-- src/wx/wscript | 4 ++++ src/wx/wx_util.cc | 37 +++++++++++++++++++++++++++++++++++++ src/wx/wx_util.h | 17 +++++++++++++++++ test/kdm_naming_test.cc | 1 - 16 files changed, 144 insertions(+), 74 deletions(-) (limited to 'src/lib/wscript') diff --git a/src/lib/kdm_with_metadata.cc b/src/lib/kdm_with_metadata.cc index 08b6dbbab..0ef1b8f38 100644 --- a/src/lib/kdm_with_metadata.cc +++ b/src/lib/kdm_with_metadata.cc @@ -103,7 +103,7 @@ make_zip_file (list kdms, boost::filesystem::path zip_file, /** Collect a list of KDMWithMetadatas into a list of lists so that - * each list contains the KDMs for one cinema. + * each list contains the KDMs for one list. */ list > collect (list kdms) @@ -115,7 +115,7 @@ collect (list kdms) list >::iterator j = grouped.begin (); while (j != grouped.end()) { - if (j->front()->cinema() == i->cinema()) { + if (j->front()->group() == i->group()) { j->push_back (i); break; } @@ -132,10 +132,10 @@ collect (list kdms) } -/** Write one directory per cinema into another directory */ +/** Write one directory per list into another directory */ int write_directories ( - list > cinema_kdms, + list > kdms, boost::filesystem::path directory, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, @@ -144,7 +144,7 @@ write_directories ( { int written = 0; - BOOST_FOREACH (list const & i, cinema_kdms) { + BOOST_FOREACH (list const & i, kdms) { boost::filesystem::path path = directory; path /= container_name_format.get(i.front()->name_values(), "", "s"); if (!boost::filesystem::exists (path) || confirm_overwrite (path)) { @@ -161,7 +161,7 @@ write_directories ( /** Write one ZIP file per cinema into a directory */ int write_zip_files ( - list > cinema_kdms, + list > kdms, boost::filesystem::path directory, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, @@ -170,7 +170,7 @@ write_zip_files ( { int written = 0; - BOOST_FOREACH (list const & i, cinema_kdms) { + BOOST_FOREACH (list const & i, kdms) { boost::filesystem::path path = directory; path /= container_name_format.get(i.front()->name_values(), ".zip", "s"); if (!boost::filesystem::exists (path) || confirm_overwrite (path)) { @@ -188,7 +188,7 @@ write_zip_files ( /** Email one ZIP file per cinema to the cinema. - * @param cinema_kdms KDMS to email. + * @param kdms KDMs to email. * @param container_name_format Format of folder / ZIP to use. * @param filename_format Format of filenames to use. * @param name_values Values to substitute into \p container_name_format and \p filename_format. @@ -196,7 +196,7 @@ write_zip_files ( */ void email ( - list > cinema_kdms, + list > kdms, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, string cpl_name @@ -208,9 +208,9 @@ email ( throw NetworkError (_("No mail server configured in preferences")); } - BOOST_FOREACH (list const & i, cinema_kdms) { + BOOST_FOREACH (list const & i, kdms) { - if (i.front()->cinema()->emails.empty()) { + if (i.front()->emails().empty()) { continue; } @@ -223,13 +223,13 @@ email ( boost::algorithm::replace_all (subject, "$CPL_NAME", cpl_name); boost::algorithm::replace_all (subject, "$START_TIME", i.front()->get('b').get_value_or("")); boost::algorithm::replace_all (subject, "$END_TIME", i.front()->get('e').get_value_or("")); - boost::algorithm::replace_all (subject, "$CINEMA_NAME", i.front()->cinema()->name); + boost::algorithm::replace_all (subject, "$CINEMA_NAME", i.front()->get('c').get_value_or("")); string body = config->kdm_email().c_str(); boost::algorithm::replace_all (body, "$CPL_NAME", cpl_name); boost::algorithm::replace_all (body, "$START_TIME", i.front()->get('b').get_value_or("")); boost::algorithm::replace_all (body, "$END_TIME", i.front()->get('e').get_value_or("")); - boost::algorithm::replace_all (body, "$CINEMA_NAME", i.front()->cinema()->name); + boost::algorithm::replace_all (body, "$CINEMA_NAME", i.front()->get('c').get_value_or("")); string screens; BOOST_FOREACH (KDMWithMetadataPtr j, i) { @@ -240,7 +240,7 @@ email ( } boost::algorithm::replace_all (body, "$SCREENS", screens.substr (0, screens.length() - 2)); - Emailer email (config->kdm_from(), i.front()->cinema()->emails, subject, body); + Emailer email (config->kdm_from(), i.front()->emails(), subject, body); BOOST_FOREACH (string i, config->kdm_cc()) { email.add_cc (i); diff --git a/src/lib/kdm_with_metadata.h b/src/lib/kdm_with_metadata.h index 6b9ff23c7..b6bec1c4c 100644 --- a/src/lib/kdm_with_metadata.h +++ b/src/lib/kdm_with_metadata.h @@ -33,9 +33,10 @@ class Cinema; class KDMWithMetadata { public: - KDMWithMetadata (dcp::NameFormat::Map const& name_values, boost::shared_ptr cinema) + KDMWithMetadata (dcp::NameFormat::Map const& name_values, void const* group, std::list emails) : _name_values (name_values) - , _cinema (cinema) + , _group (group) + , _emails (emails) {} virtual ~KDMWithMetadata () {} @@ -49,13 +50,18 @@ public: boost::optional get (char k) const; - boost::shared_ptr cinema () const { - return _cinema; + void const* group () const { + return _group; + } + + std::list emails () const { + return _emails; } private: dcp::NameFormat::Map _name_values; - boost::shared_ptr _cinema; + void const* _group; + std::list _emails; }; @@ -75,7 +81,7 @@ std::list > collect (std::list int write_directories ( - std::list > cinema_kdms, + std::list > kdms, boost::filesystem::path directory, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, @@ -84,7 +90,7 @@ int write_directories ( int write_zip_files ( - std::list > cinema_kdms, + std::list > kdms, boost::filesystem::path directory, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, @@ -93,7 +99,7 @@ int write_zip_files ( void email ( - std::list > cinema_kdms, + std::list > kdms, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, std::string cpl_name @@ -104,8 +110,8 @@ template class SpecialKDMWithMetadata : public KDMWithMetadata { public: - SpecialKDMWithMetadata (dcp::NameFormat::Map const& name_values, boost::shared_ptr cinema, T k) - : KDMWithMetadata (name_values, cinema) + SpecialKDMWithMetadata (dcp::NameFormat::Map const& name_values, void const* group, std::list emails, T k) + : KDMWithMetadata (name_values, group, emails) , kdm (k) {} diff --git a/src/lib/screen.cc b/src/lib/screen.cc index 2441efccb..61a27f2bc 100644 --- a/src/lib/screen.cc +++ b/src/lib/screen.cc @@ -29,6 +29,7 @@ using std::string; using std::vector; +using std::list; using boost::shared_ptr; using boost::optional; using namespace dcpomatic; @@ -106,6 +107,6 @@ kdm_for_screen ( name_values['e'] = end.date() + " " + end.time_of_day(true, false); name_values['i'] = kdm.cpl_id(); - return KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, cinema, kdm)); + return KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, cinema.get(), cinema ? cinema->emails : list(), kdm)); } diff --git a/src/lib/send_kdm_email_job.cc b/src/lib/send_kdm_email_job.cc index 18f686717..55a171811 100644 --- a/src/lib/send_kdm_email_job.cc +++ b/src/lib/send_kdm_email_job.cc @@ -31,6 +31,24 @@ using std::list; using boost::shared_ptr; using boost::optional; +SendKDMEmailJob::SendKDMEmailJob ( + list kdms, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + string cpl_name + ) + : Job (shared_ptr()) + , _container_name_format (container_name_format) + , _filename_format (filename_format) + , _cpl_name (cpl_name) +{ + BOOST_FOREACH (KDMWithMetadataPtr i, kdms) { + list s; + s.push_back (i); + _kdms.push_back (s); + } +} + /** @param kdms KDMs to email. * @param container_name_format Format to ues for folders / ZIP files. * @param filename_format Format to use for filenames. diff --git a/src/lib/send_kdm_email_job.h b/src/lib/send_kdm_email_job.h index 452c76cee..fa409edaa 100644 --- a/src/lib/send_kdm_email_job.h +++ b/src/lib/send_kdm_email_job.h @@ -33,12 +33,20 @@ class Log; class SendKDMEmailJob : public Job { public: + SendKDMEmailJob ( + std::list kdms, + dcp::NameFormat container_name_format, + dcp::NameFormat filename_format, + std::string cpl_name + ); + SendKDMEmailJob ( std::list > kdms, dcp::NameFormat container_name_format, dcp::NameFormat filename_format, std::string cpl_name ); + ~SendKDMEmailJob (); std::string name () const; diff --git a/src/lib/wscript b/src/lib/wscript index 828f0290b..0f2a5d197 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -77,6 +77,7 @@ sources = """ decoder_part.cc decrypted_ecinema_kdm.cc digester.cc + dkdm_recipient.cc dkdm_wrapper.cc dolby_cp750.cc edid.cc diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 546286e48..f69ab5a6a 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -33,6 +33,7 @@ #include "wx/recreate_chain_dialog.h" #include "wx/about_dialog.h" #include "wx/kdm_dialog.h" +#include "wx/dkdm_dialog.h" #include "wx/self_dkdm_dialog.h" #include "wx/servers_list_dialog.h" #include "wx/hints_dialog.h" @@ -226,6 +227,7 @@ enum { ID_jobs_make_dcp, ID_jobs_make_dcp_batch, ID_jobs_make_kdms, + ID_jobs_make_dkdms, ID_jobs_make_self_dkdm, ID_jobs_export, ID_jobs_send_dcp_to_tms, @@ -261,6 +263,7 @@ public: , _servers_list_dialog (0) , _config_dialog (0) , _kdm_dialog (0) + , _dkdm_dialog (0) , _templates_dialog (0) , _file_menu (0) , _history_items (0) @@ -317,6 +320,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::content_scale_to_fit_height, this), ID_content_scale_to_fit_height); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_dcp, this), ID_jobs_make_dcp); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_kdms, this), ID_jobs_make_kdms); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_dkdms, this), ID_jobs_make_dkdms); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_dcp_batch, this), ID_jobs_make_dcp_batch); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_self_dkdm, this), ID_jobs_make_self_dkdm); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_export, this), ID_jobs_export); @@ -796,6 +800,21 @@ private: _kdm_dialog->Show (); } + void jobs_make_dkdms () + { + if (!_film) { + return; + } + + if (_dkdm_dialog) { + _dkdm_dialog->Destroy (); + _dkdm_dialog = 0; + } + + _dkdm_dialog = new DKDMDialog (this, _film); + _dkdm_dialog->Show (); + } + /** @return false if we succeeded, true if not */ bool send_to_other_tool (int port, function start, string message) { @@ -1313,6 +1332,7 @@ private: add_item (jobs_menu, _("Make DCP in &batch converter\tCtrl-B"), ID_jobs_make_dcp_batch, NEEDS_FILM | NOT_DURING_DCP_CREATION); jobs_menu->AppendSeparator (); add_item (jobs_menu, _("Make &KDMs...\tCtrl-K"), ID_jobs_make_kdms, NEEDS_FILM); + add_item (jobs_menu, _("Make &DKDMs...\tCtrl-D"), ID_jobs_make_dkdms, NEEDS_FILM); add_item (jobs_menu, _("Make DKDM for DCP-o-matic..."), ID_jobs_make_self_dkdm, NEEDS_FILM | NEEDS_ENCRYPTION); jobs_menu->AppendSeparator (); add_item (jobs_menu, _("Export...\tCtrl-E"), ID_jobs_export, NEEDS_FILM); @@ -1484,6 +1504,7 @@ private: ServersListDialog* _servers_list_dialog; wxPreferencesEditor* _config_dialog; KDMDialog* _kdm_dialog; + DKDMDialog* _dkdm_dialog; TemplatesDialog* _templates_dialog; wxMenu* _file_menu; shared_ptr _film; diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index da856d358..117e756c7 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -398,7 +398,7 @@ private: /* Encrypt */ kdms.push_back ( KDMWithMetadataPtr( - new DCPKDMWithMetadata(name_values, i->cinema, encrypted) + new DCPKDMWithMetadata(name_values, i->cinema.get(), i->cinema->emails, encrypted) ) ); } diff --git a/src/tools/dcpomatic_kdm_cli.cc b/src/tools/dcpomatic_kdm_cli.cc index a3075d675..adb14f49e 100644 --- a/src/tools/dcpomatic_kdm_cli.cc +++ b/src/tools/dcpomatic_kdm_cli.cc @@ -350,7 +350,7 @@ from_dkdm ( name_values['e'] = end.date() + " " + end.time_of_day(true, false); name_values['i'] = kdm.cpl_id(); - kdms.push_back (KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, i->cinema, kdm))); + kdms.push_back (KDMWithMetadataPtr(new DCPKDMWithMetadata(name_values, i->cinema.get(), i->cinema->emails, kdm))); } write_files (kdms, zip, output, container_name_format, filename_format, verbose); } catch (FileError& e) { diff --git a/src/wx/cinema_dialog.cc b/src/wx/cinema_dialog.cc index ff5d1faf6..31e6ebe79 100644 --- a/src/wx/cinema_dialog.cc +++ b/src/wx/cinema_dialog.cc @@ -83,37 +83,8 @@ CinemaDialog::CinemaDialog (wxWindow* parent, wxString title, string name, list< overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } - _offsets.push_back (Offset (_("UTC-11"), -11, 0)); - _offsets.push_back (Offset (_("UTC-10"), -10, 0)); - _offsets.push_back (Offset (_("UTC-9"), -9, 0)); - _offsets.push_back (Offset (_("UTC-8"), -8, 0)); - _offsets.push_back (Offset (_("UTC-7"), -7, 0)); - _offsets.push_back (Offset (_("UTC-6"), -6, 0)); - _offsets.push_back (Offset (_("UTC-5"), -5, 0)); - _offsets.push_back (Offset (_("UTC-4:30"), -4, 30)); - _offsets.push_back (Offset (_("UTC-4"), -4, 0)); - _offsets.push_back (Offset (_("UTC-3:30"), -3, 30)); - _offsets.push_back (Offset (_("UTC-3"), -3, 0)); - _offsets.push_back (Offset (_("UTC-2"), -2, 0)); - _offsets.push_back (Offset (_("UTC-1"), -1, 0)); - _offsets.push_back (Offset (_("UTC") , 0, 0)); - _offsets.push_back (Offset (_("UTC+1"), 1, 0)); - _offsets.push_back (Offset (_("UTC+2"), 2, 0)); - _offsets.push_back (Offset (_("UTC+3"), 3, 0)); - _offsets.push_back (Offset (_("UTC+4"), 4, 0)); - _offsets.push_back (Offset (_("UTC+5"), 5, 0)); - _offsets.push_back (Offset (_("UTC+5:30"), 5, 30)); - _offsets.push_back (Offset (_("UTC+6"), 6, 0)); - _offsets.push_back (Offset (_("UTC+7"), 7, 0)); - _offsets.push_back (Offset (_("UTC+8"), 8, 0)); - _offsets.push_back (Offset (_("UTC+9"), 9, 0)); - _offsets.push_back (Offset (_("UTC+9:30"), 9, 30)); - _offsets.push_back (Offset (_("UTC+10"), 10, 0)); - _offsets.push_back (Offset (_("UTC+11"), 11, 0)); - _offsets.push_back (Offset (_("UTC+12"), 12, 0)); - /* Default to UTC */ - size_t sel = 13; + size_t sel = get_offsets (_offsets); for (size_t i = 0; i < _offsets.size(); ++i) { _utc_offset->Append (_offsets[i].name); if (_offsets[i].hour == utc_offset_hour && _offsets[i].minute == utc_offset_minute) { diff --git a/src/wx/cinema_dialog.h b/src/wx/cinema_dialog.h index 9cb0a65dc..d16b0ba9c 100644 --- a/src/wx/cinema_dialog.h +++ b/src/wx/cinema_dialog.h @@ -53,19 +53,5 @@ private: EditableList* _email_list; std::vector _emails; wxChoice* _utc_offset; - - struct Offset - { - Offset (wxString n, int h, int m) - : name (n) - , hour (h) - , minute (m) - {} - - wxString name; - int hour; - int minute; - }; - std::vector _offsets; }; diff --git a/src/wx/kdm_output_panel.cc b/src/wx/kdm_output_panel.cc index f37865b94..a345d0e96 100644 --- a/src/wx/kdm_output_panel.cc +++ b/src/wx/kdm_output_panel.cc @@ -53,6 +53,7 @@ KDMOutputPanel::KDMOutputPanel (wxWindow* parent, bool interop) , _forensic_mark_audio_up_to (12) { wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, 0); + table->AddGrowableCol (1); add_label_to_sizer (table, this, _("KDM type"), true); @@ -200,7 +201,7 @@ KDMOutputPanel::make ( bool cinemas_with_no_email = false; BOOST_FOREACH (list i, cinema_kdms) { - if (i.front()->cinema()->emails.empty ()) { + if (i.front()->emails().empty()) { cinemas_with_no_email = true; } } @@ -215,7 +216,7 @@ KDMOutputPanel::make ( if (proceed && Config::instance()->confirm_kdm_email ()) { list emails; BOOST_FOREACH (list const& i, cinema_kdms) { - BOOST_FOREACH (string j, i.front()->cinema()->emails) { + BOOST_FOREACH (string j, i.front()->emails()) { emails.push_back (j); } } diff --git a/src/wx/wscript b/src/wx/wscript index f78a8c617..22d9f0db6 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -52,12 +52,14 @@ sources = """ dcp_panel.cc dcpomatic_button.cc disk_warning_dialog.cc + dkdm_output_panel.cc drive_wipe_warning_dialog.cc email_dialog.cc image_sequence_dialog.cc isdcf_metadata_dialog.cc dcp_text_track_dialog.cc dir_picker_ctrl.cc + dkdm_dialog.cc dolby_doremi_certificate_panel.cc download_certificate_dialog.cc download_certificate_panel.cc @@ -110,6 +112,8 @@ sources = """ question_dialog.cc rating_dialog.cc qube_certificate_panel.cc + recipients_panel.cc + recipient_dialog.cc recreate_chain_dialog.cc repeat_dialog.cc report_problem_dialog.cc diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index 28f79431a..6eef0d147 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -530,3 +530,40 @@ display_progress (wxString title, wxString task) return ok; } + + +int +get_offsets (vector& offsets) +{ + offsets.push_back (Offset(_("UTC-11"), -11, 0)); + offsets.push_back (Offset(_("UTC-10"), -10, 0)); + offsets.push_back (Offset(_("UTC-9"), -9, 0)); + offsets.push_back (Offset(_("UTC-8"), -8, 0)); + offsets.push_back (Offset(_("UTC-7"), -7, 0)); + offsets.push_back (Offset(_("UTC-6"), -6, 0)); + offsets.push_back (Offset(_("UTC-5"), -5, 0)); + offsets.push_back (Offset(_("UTC-4:30"), -4, 30)); + offsets.push_back (Offset(_("UTC-4"), -4, 0)); + offsets.push_back (Offset(_("UTC-3:30"), -3, 30)); + offsets.push_back (Offset(_("UTC-3"), -3, 0)); + offsets.push_back (Offset(_("UTC-2"), -2, 0)); + offsets.push_back (Offset(_("UTC-1"), -1, 0)); + int utc = offsets.size(); + offsets.push_back (Offset(_("UTC") , 0, 0)); + offsets.push_back (Offset(_("UTC+1"), 1, 0)); + offsets.push_back (Offset(_("UTC+2"), 2, 0)); + offsets.push_back (Offset(_("UTC+3"), 3, 0)); + offsets.push_back (Offset(_("UTC+4"), 4, 0)); + offsets.push_back (Offset(_("UTC+5"), 5, 0)); + offsets.push_back (Offset(_("UTC+5:30"), 5, 30)); + offsets.push_back (Offset(_("UTC+6"), 6, 0)); + offsets.push_back (Offset(_("UTC+7"), 7, 0)); + offsets.push_back (Offset(_("UTC+8"), 8, 0)); + offsets.push_back (Offset(_("UTC+9"), 9, 0)); + offsets.push_back (Offset(_("UTC+9:30"), 9, 30)); + offsets.push_back (Offset(_("UTC+10"), 10, 0)); + offsets.push_back (Offset(_("UTC+11"), 11, 0)); + offsets.push_back (Offset(_("UTC+12"), 12, 0)); + + return utc; +} diff --git a/src/wx/wx_util.h b/src/wx/wx_util.h index af25ce0f5..8e0befba9 100644 --- a/src/wx/wx_util.h +++ b/src/wx/wx_util.h @@ -88,6 +88,23 @@ extern double calculate_mark_interval (double start); extern bool display_progress (wxString title, wxString task); extern bool report_errors_from_last_job (wxWindow* parent); + +struct Offset +{ + Offset (wxString n, int h, int m) + : name (n) + , hour (h) + , minute (m) + {} + + wxString name; + int hour; + int minute; +}; + +extern int get_offsets (std::vector& offsets); + + extern void checked_set (FilePickerCtrl* widget, boost::filesystem::path value); extern void checked_set (wxDirPickerCtrl* widget, boost::filesystem::path value); extern void checked_set (wxSpinCtrl* widget, int value); diff --git a/test/kdm_naming_test.cc b/test/kdm_naming_test.cc index d45e4a44e..35188d5e6 100644 --- a/test/kdm_naming_test.cc +++ b/test/kdm_naming_test.cc @@ -191,7 +191,6 @@ BOOST_AUTO_TEST_CASE (directory_kdm_naming_test, * boost::unit_test::depends_on( boost::algorithm::replace_all (until_time, ":", "-"); path const base = "build/test/directory_kdm_naming_test"; - list::const_iterator i = kdms.begin (); path dir_a = String::compose("Cinema_A_-_%s_-_my_great_film_-_%1_%2_-_%3_%4", from.date(), from_time, until.date(), until_time); BOOST_CHECK_MESSAGE (boost::filesystem::exists(base / dir_a), "Directory " << dir_a << " not found"); -- cgit v1.2.3