#include "lib/util.h"
#include "lib/screen.h"
#include "lib/job_manager.h"
-#include "lib/screen_kdm.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"
#include <dcp/encrypted_kdm.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/exceptions.h>
+#include "lib/warnings.h"
+DCPOMATIC_DISABLE_WARNINGS
#include <wx/wx.h>
#include <wx/preferences.h>
#include <wx/splash.h>
#include <wx/filepicker.h>
+DCPOMATIC_ENABLE_WARNINGS
#ifdef __WXOSX__
#include <ApplicationServices/ApplicationServices.h>
#endif
-#include <boost/bind.hpp>
-#include <boost/foreach.hpp>
+#include <boost/bind/bind.hpp>
#ifdef check
#undef check
using std::vector;
using std::pair;
using std::map;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::bind;
using boost::optional;
using boost::ref;
-using boost::dynamic_pointer_cast;
+using std::dynamic_pointer_cast;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
using namespace dcpomatic;
enum {
if (!dkdm_base) {
return;
}
- shared_ptr<DKDM> dkdm = boost::dynamic_pointer_cast<DKDM> (dkdm_base);
- if (!dkdm) {
- return;
- }
- /* Decrypt the DKDM */
- dcp::DecryptedKDM decrypted (dkdm->dkdm(), Config::instance()->decryption_chain()->key().get());
+ list<KDMWithMetadataPtr> kdms;
+ string title;
- /* This is the signer for our new KDMs */
- shared_ptr<const dcp::CertificateChain> signer = Config::instance()->signer_chain ();
- if (!signer->valid ()) {
- throw InvalidSignerError ();
- }
+ shared_ptr<DKDM> dkdm = std::dynamic_pointer_cast<DKDM> (dkdm_base);
+ if (dkdm) {
- list<shared_ptr<ScreenKDM> > screen_kdms;
- BOOST_FOREACH (shared_ptr<Screen> i, _screens->screens()) {
+ /* Decrypt the DKDM */
+ dcp::DecryptedKDM decrypted (dkdm->dkdm(), Config::instance()->decryption_chain()->key().get());
+ title = decrypted.content_title_text ();
- if (!i->recipient) {
- continue;
+ /* This is the signer for our new KDMs */
+ shared_ptr<const dcp::CertificateChain> signer = Config::instance()->signer_chain ();
+ if (!signer->valid ()) {
+ throw InvalidSignerError ();
}
- /* Make an empty KDM */
- dcp::DecryptedKDM kdm (
- dcp::LocalTime (_timing->from(), i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute()),
- dcp::LocalTime (_timing->until(), i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute()),
- decrypted.annotation_text().get_value_or (""),
- 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);
+ for (auto i: _screens->screens()) {
+
+ if (!i->recipient) {
+ continue;
+ }
+
+ dcp::LocalTime begin(_timing->from(), i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute());
+ dcp::LocalTime end(_timing->until(), i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute());
+
+ /* Make an empty KDM */
+ dcp::DecryptedKDM kdm (
+ begin,
+ end,
+ decrypted.annotation_text().get_value_or (""),
+ decrypted.content_title_text(),
+ dcp::LocalTime().as_string()
+ );
+
+ /* Add keys from the DKDM */
+ for (auto const& j: decrypted.keys()) {
+ kdm.add_key (j);
+ }
+
+ dcp::EncryptedKDM const encrypted = kdm.encrypt(
+ signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(),
+ !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
+ );
+
+ dcp::NameFormat::Map name_values;
+ name_values['c'] = i->cinema->name;
+ name_values['s'] = i->name;
+ name_values['f'] = title;
+ name_values['b'] = begin.date() + " " + begin.time_of_day(true, false);
+ name_values['e'] = end.date() + " " + end.time_of_day(true, false);
+ name_values['i'] = encrypted.cpl_id ();
+
+ /* Encrypt */
+ kdms.push_back (
+ KDMWithMetadataPtr(
+ new KDMWithMetadata(name_values, i->cinema.get(), i->cinema->emails, encrypted)
+ )
+ );
}
+ }
- /* Encrypt */
- screen_kdms.push_back (
- shared_ptr<ScreenKDM>(
- new DCPScreenKDM(
- i,
- kdm.encrypt(
- signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(),
- !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
- )
- )
- )
- );
+ if (kdms.empty()) {
+ return;
}
pair<shared_ptr<Job>, int> result = _output->make (
- screen_kdms, decrypted.content_title_text(), _timing, bind (&DOMFrame::confirm_overwrite, this, _1)
+ kdms, title, bind (&DOMFrame::confirm_overwrite, this, _1)
);
if (result.first) {
{
wxFileDialog* d = new wxFileDialog (this, _("Select DKDM file"));
if (d->ShowModal() == wxID_OK) {
- shared_ptr<DKDMBase> new_dkdm;
+ shared_ptr<const dcp::CertificateChain> chain = Config::instance()->decryption_chain();
+ DCPOMATIC_ASSERT (chain->key());
+
try {
dcp::EncryptedKDM ekdm(dcp::file_to_string (wx_to_std (d->GetPath ()), MAX_KDM_SIZE));
-
/* Decrypt the DKDM to make sure that we can */
- shared_ptr<const dcp::CertificateChain> chain = Config::instance()->decryption_chain();
- DCPOMATIC_ASSERT (chain->key());
dcp::DecryptedKDM dkdm(ekdm, chain->key().get());
- new_dkdm.reset(new DKDM(ekdm));
+ shared_ptr<DKDMBase> new_dkdm(new DKDM(ekdm));
shared_ptr<DKDMGroup> group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm ());
if (!group) {
group = Config::instance()->dkdms ();
/* Add children */
shared_ptr<DKDMGroup> g = dynamic_pointer_cast<DKDMGroup> (base);
if (g) {
- BOOST_FOREACH (shared_ptr<DKDMBase> i, g->children()) {
+ for (auto i: g->children()) {
add_dkdm_view (i);
}
}
ScreensPanel* _screens;
KDMTimingPanel* _timing;
wxTreeCtrl* _dkdm;
- typedef std::map<wxTreeItemId, boost::shared_ptr<DKDMBase> > DKDMMap;
+ typedef std::map<wxTreeItemId, std::shared_ptr<DKDMBase> > DKDMMap;
DKDMMap _dkdm_id;
wxButton* _add_dkdm;
wxButton* _add_dkdm_folder;
unsetenv ("UBUNTU_MENUPROXY");
#endif
-#ifdef __WXOSX__
- ProcessSerialNumber serial;
- GetCurrentProcess (&serial);
- TransformProcessType (&serial, kProcessTransformToForegroundApplication);
+#ifdef DCPOMATIC_OSX
+ make_foreground_application ();
#endif
dcpomatic_setup_path_encoding ();