From 5cd49a43b0c453f714bb654d0f23b726b39dadec Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 7 Oct 2015 14:48:55 +0100 Subject: [PATCH] Connect dcpomatic_kdm to backend. --- src/lib/send_kdm_email_job.cc | 43 +++++++---------------- src/lib/send_kdm_email_job.h | 18 +++++----- src/tools/dcpomatic.cc | 12 +++++-- src/tools/dcpomatic_kdm.cc | 64 +++++++++++++++++++++++++++++++---- 4 files changed, 90 insertions(+), 47 deletions(-) diff --git a/src/lib/send_kdm_email_job.cc b/src/lib/send_kdm_email_job.cc index 9ac596692..43c399c25 100644 --- a/src/lib/send_kdm_email_job.cc +++ b/src/lib/send_kdm_email_job.cc @@ -21,6 +21,7 @@ #include "compose.hpp" #include "film.h" #include "cinema_kdms.h" +#include #include "i18n.h" @@ -29,19 +30,18 @@ using std::list; using boost::shared_ptr; SendKDMEmailJob::SendKDMEmailJob ( - shared_ptr film, - list > screens, - boost::filesystem::path cpl, + string film_name, + string cpl_name, boost::posix_time::ptime from, boost::posix_time::ptime to, - dcp::Formulation formulation + list cinema_kdms ) - : Job (film) - , _screens (screens) - , _cpl (cpl) + : Job (shared_ptr()) + , _film_name (film_name) + , _cpl_name (cpl_name) , _from (from) , _to (to) - , _formulation (formulation) + , _cinema_kdms (cinema_kdms) { } @@ -49,7 +49,7 @@ SendKDMEmailJob::SendKDMEmailJob ( string SendKDMEmailJob::name () const { - return String::compose (_("Email KDMs for %1"), _film->name()); + return String::compose (_("Email KDMs for %1"), _film_name); } string @@ -61,25 +61,8 @@ SendKDMEmailJob::json_name () const void SendKDMEmailJob::run () { - try { - - set_progress_unknown (); - - CinemaKDMs::email ( - _film->name(), - _film->dcp_name(), - CinemaKDMs::collect (_film->make_kdms (_screens, _cpl, _from, _to, _formulation)), - _from, - _to - ); - - set_progress (1); - set_state (FINISHED_OK); - - } catch (std::exception& e) { - - set_progress (1); - set_state (FINISHED_ERROR); - throw; - } + set_progress_unknown (); + CinemaKDMs::email (_film_name, _cpl_name, _cinema_kdms, _from, _to); + set_progress (1); + set_state (FINISHED_OK); } diff --git a/src/lib/send_kdm_email_job.h b/src/lib/send_kdm_email_job.h index c401ea136..13e2fb11d 100644 --- a/src/lib/send_kdm_email_job.h +++ b/src/lib/send_kdm_email_job.h @@ -22,17 +22,17 @@ #include class Screen; +class CinemaKDMs; class SendKDMEmailJob : public Job { public: SendKDMEmailJob ( - boost::shared_ptr, - std::list >, - boost::filesystem::path, - boost::posix_time::ptime, - boost::posix_time::ptime, - dcp::Formulation + std::string film_name, + std::string cpl_name, + boost::posix_time::ptime from, + boost::posix_time::ptime to, + std::list cinema_kdms ); std::string name () const; @@ -40,9 +40,9 @@ public: void run (); private: - std::list > _screens; - boost::filesystem::path _cpl; + std::string _film_name; + std::string _cpl_name; boost::posix_time::ptime _from; boost::posix_time::ptime _to; - dcp::Formulation _formulation; + std::list _cinema_kdms; }; diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index c646942cb..9330b1b60 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -53,6 +53,7 @@ #include "lib/cross.h" #include "lib/content_factory.h" #include "lib/compose.hpp" +#include "lib/cinema_kdms.h" #include #include #include @@ -445,15 +446,22 @@ private: } try { + list screen_kdms = _film->make_kdms (d->screens(), d->cpl(), d->from(), d->until(), d->formulation()); if (d->write_to ()) { ScreenKDM::write_files ( _film->name(), - _film->make_kdms (d->screens(), d->cpl(), d->from(), d->until(), d->formulation()), + screen_kdms, d->directory() ); } else { JobManager::instance()->add ( - shared_ptr (new SendKDMEmailJob (_film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation ())) + shared_ptr (new SendKDMEmailJob ( + _film->name(), + _film->dcp_name(), + d->from(), + d->until(), + CinemaKDMs::collect (screen_kdms) + )) ); } } catch (dcp::NotEncryptedError& e) { diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 21be65dc4..b08213612 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -27,18 +27,27 @@ #include "wx/kdm_output_panel.h" #include "lib/config.h" #include "lib/util.h" +#include "lib/screen.h" +#include "lib/job_manager.h" +#include "lib/screen_kdm.h" +#include "lib/exceptions.h" +#include "lib/cinema_kdms.h" +#include "lib/send_kdm_email_job.h" #include #include +#include #include #include #include #include +#include #ifdef check #undef check #endif using std::exception; +using std::list; using boost::shared_ptr; using boost::bind; @@ -126,6 +135,8 @@ public: _screens->ScreensChanged.connect (boost::bind (&DOMFrame::setup_sensitivity, this)); _dkdm->Bind (wxEVT_COMMAND_FILEPICKER_CHANGED, bind (&DOMFrame::dkdm_changed, this)); _create->Bind (wxEVT_COMMAND_BUTTON_CLICKED, bind (&DOMFrame::create_kdms, this)); + + setup_sensitivity (); } private: @@ -212,19 +223,60 @@ private: _issue_date->SetLabel (wxT("")); _issue_date->Enable (false); } + + setup_sensitivity (); } void create_kdms () { -#if 0 try { + /* Decrypt the DKDM */ + dcp::EncryptedKDM encrypted (dcp::file_to_string (wx_to_std (_dkdm->GetPath()))); + dcp::DecryptedKDM decrypted (encrypted, Config::instance()->decryption_chain()->key().get()); + + /* This is the signer for our new KDMs */ + shared_ptr signer = Config::instance()->signer_chain (); + if (!signer->valid ()) { + throw InvalidSignerError (); + } + + list screen_kdms; + BOOST_FOREACH (shared_ptr i, _screens->screens()) { + + if (!i->certificate) { + continue; + } + + /* Make an empty KDM */ + dcp::DecryptedKDM kdm ( + _timing->from(), _timing->until(), decrypted.annotation_text(), decrypted.content_title_text(), dcp::LocalTime().as_string() + ); + + /* Add keys from the DKDM */ + BOOST_FOREACH (dcp::DecryptedKDMKey const & j, decrypted.keys()) { + kdm.add_key (j); + } + + /* Encrypt */ + screen_kdms.push_back (ScreenKDM (i, kdm.encrypt (signer, i->certificate.get(), _output->formulation()))); + } + if (_output->write_to()) { - write_kdm_files ( - _film, d->screens (), d->cpl(), _timing->from(), _timing->until(), _output->formulation(), _output->directory() + ScreenKDM::write_files (decrypted.content_title_text(), screen_kdms, _output->directory()); + /* XXX: proper plural form support in wxWidgets? */ + wxString s = screen_kdms.size() == 1 ? _("%d KDM written to %s") : _("%d KDMs written to %s"); + message_dialog ( + this, + wxString::Format (s, int(screen_kdms.size()), std_to_wx(_output->directory().string()).data()) ); } else { JobManager::instance()->add ( - shared_ptr (new SendKDMEmailJob (_film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation ())) + shared_ptr (new SendKDMEmailJob ( + decrypted.annotation_text(), + decrypted.content_title_text(), + _timing->from(), _timing->until(), + CinemaKDMs::collect (screen_kdms) + )) ); } } catch (dcp::NotEncryptedError& e) { @@ -234,14 +286,13 @@ private: } catch (...) { error_dialog (this, _("An unknown exception occurred.")); } -#endif } void setup_sensitivity () { _screens->setup_sensitivity (); _output->setup_sensitivity (); - _create->Enable (!_screens->screens().empty()); + _create->Enable (!_screens->screens().empty() && !_dkdm->GetPath().IsEmpty()); } wxPreferencesEditor* _config_dialog; @@ -257,6 +308,7 @@ private: wxStaticText* _issue_date; wxButton* _create; KDMOutputPanel* _output; + JobManagerView* _jobs; }; /** @class App -- 2.30.2