- wxFileDialog* d = new wxFileDialog (this, _("Select DKDM file"));
- if (d->ShowModal() == wxID_OK) {
- 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