+ 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