std::shared_ptr
[dcpomatic.git] / src / tools / dcpomatic_kdm.cc
index 7920f7e5756b9994c7147fd5c45bccc1fb87cd9d..874573ce282582d0cc82fcf118f901d12d9f942e 100644 (file)
 #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
-#include <boost/bind.hpp>
+#include <boost/bind/bind.hpp>
 #include <boost/foreach.hpp>
 
 #ifdef check
@@ -71,11 +71,14 @@ using std::string;
 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 {
@@ -305,47 +308,7 @@ private:
                        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;
-                                       }
-
-                                       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());
-
-                                       DecryptedECinemaKDM kdm (
-                                               decrypted.id(),
-                                               decrypted.name(),
-                                               decrypted.key(),
-                                               begin,
-                                               end
-                                               );
-
-                                       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);
-
-                                       /* Encrypt */
-                                       kdms.push_back (
-                                               KDMWithMetadataPtr(
-                                                       new ECinemaKDMWithMetadata(name_values, i->cinema, kdm.encrypt(i->recipient.get()))
-                                                       )
-                                               );
-                               }
-                       }
-#endif
-
-                       shared_ptr<DKDM> dkdm = boost::dynamic_pointer_cast<DKDM> (dkdm_base);
+                       shared_ptr<DKDM> dkdm = std::dynamic_pointer_cast<DKDM> (dkdm_base);
                        if (dkdm) {
 
                                /* Decrypt the DKDM */
@@ -381,24 +344,23 @@ private:
                                                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 DCPKDMWithMetadata(
-                                                               name_values,
-                                                               i->cinema,
-                                                               kdm.encrypt(
-                                                                       signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(),
-                                                                       !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
-                                                                       )
-                                                               )
+                                                       new KDMWithMetadata(name_values, i->cinema.get(), i->cinema->emails, encrypted)
                                                        )
                                                );
                                }
@@ -488,44 +450,6 @@ private:
                        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 */
@@ -672,7 +596,7 @@ private:
        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;
@@ -718,10 +642,8 @@ private:
                        unsetenv ("UBUNTU_MENUPROXY");
 #endif
 
-#ifdef __WXOSX__
-                       ProcessSerialNumber serial;
-                       GetCurrentProcess (&serial);
-                       TransformProcessType (&serial, kProcessTransformToForegroundApplication);
+#ifdef DCPOMATIC_OSX
+                       make_foreground_application ();
 #endif
 
                        dcpomatic_setup_path_encoding ();