#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 "lib/dkdm_wrapper.h"
#include "lib/cross.h"
-#ifdef DCPOMATIC_VARIANT_SWAROOP
-#include "lib/decrypted_ecinema_kdm.h"
-#endif
#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
using boost::optional;
using boost::ref;
using boost::dynamic_pointer_cast;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
using namespace dcpomatic;
enum {
return;
}
- list<shared_ptr<ScreenKDM> > screen_kdms;
+ list<KDMWithMetadataPtr> kdms;
string title;
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- shared_ptr<ECinemaDKDM> ecinema_dkdm = boost::dynamic_pointer_cast<ECinemaDKDM> (dkdm_base);
- if (ecinema_dkdm) {
- DecryptedECinemaKDM decrypted (ecinema_dkdm->dkdm(), Config::instance()->decryption_chain()->key().get());
- title = decrypted.name ();
-
- BOOST_FOREACH (shared_ptr<Screen> i, _screens->screens()) {
-
- if (!i->recipient) {
- continue;
- }
-
- DecryptedECinemaKDM kdm (
- decrypted.id(),
- decrypted.name(),
- decrypted.key(),
- 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())
- );
-
- /* Encrypt */
- screen_kdms.push_back (
- shared_ptr<ScreenKDM>(
- new ECinemaScreenKDM(i, kdm.encrypt(i->recipient.get()))
- )
- );
- }
- }
-#endif
-
shared_ptr<DKDM> dkdm = boost::dynamic_pointer_cast<DKDM> (dkdm_base);
if (dkdm) {
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 (
- 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()),
+ begin,
+ end,
decrypted.annotation_text().get_value_or (""),
decrypted.content_title_text(),
dcp::LocalTime().as_string()
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 */
- 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
- )
- )
+ kdms.push_back (
+ KDMWithMetadataPtr(
+ new KDMWithMetadata(name_values, i->cinema.get(), i->cinema->emails, encrypted)
)
);
}
}
- if (screen_kdms.empty()) {
+ if (kdms.empty()) {
return;
}
pair<shared_ptr<Job>, int> result = _output->make (
- screen_kdms, title, _timing, bind (&DOMFrame::confirm_overwrite, this, _1)
+ kdms, title, bind (&DOMFrame::confirm_overwrite, this, _1)
);
if (result.first) {
shared_ptr<const dcp::CertificateChain> chain = Config::instance()->decryption_chain();
DCPOMATIC_ASSERT (chain->key());
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- try {
- cxml::Document test_doc;
- string const xml_string = dcp::file_to_string (wx_to_std(d->GetPath()), MAX_KDM_SIZE);
- test_doc.read_string (xml_string);
- if (test_doc.root_name() == "ECinemaSecurityMessage") {
- EncryptedECinemaKDM ekdm(xml_string);
- /* Decrypt the DKDM to make sure that we can */
- DecryptedECinemaKDM dkdm(ekdm, chain->key().get());
-
- shared_ptr<DKDMBase> new_dkdm(new ECinemaDKDM(ekdm));
- shared_ptr<DKDMGroup> group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm());
- if (!group) {
- group = Config::instance()->dkdms();
- }
- add_dkdm_model (new_dkdm, group);
- add_dkdm_view (new_dkdm);
- d->Destroy ();
- return;
- }
- } catch (KDMError& e) {
- error_dialog (
- this, "Could not read file as a KDM. Perhaps it is badly formatted, created with the wrong certificate, or not a KDM at all.",
- std_to_wx(e.what())
- );
- d->Destroy ();
- return;
- } catch (dcp::MiscError& e) {
- error_dialog (
- this,
- _("Could not read file as a KDM. It is much too large. Make sure you are loading a DKDM (XML) file."),
- std_to_wx(e.what())
- );
- d->Destroy ();
- return;
- }
-#endif
-
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 */
unsetenv ("UBUNTU_MENUPROXY");
#endif
-#ifdef __WXOSX__
- ProcessSerialNumber serial;
- GetCurrentProcess (&serial);
- TransformProcessType (&serial, kProcessTransformToForegroundApplication);
+#ifdef DCPOMATIC_OSX
+ make_foreground_application ();
#endif
dcpomatic_setup_path_encoding ();