#endif
+using std::dynamic_pointer_cast;
using std::exception;
using std::list;
using std::make_shared;
using boost::bind;
using boost::optional;
using boost::ref;
-using std::dynamic_pointer_cast;
#if BOOST_VERSION >= 106100
using namespace boost::placeholders;
#endif
if (e.starts_too_early()) {
error_dialog(this, _("The KDM start period is before (or close to) the start of the signing certificate's validity period. Use a later start time for this KDM."));
} else {
- error_dialog(this, _("The KDM end period is after (or close to) the end of the signing certficates' validity period. Either use an earlier end time for this KDM or re-create your signing certificates in the DCP-o-matic preferences window."));
+ error_dialog(this, _("The KDM end period is after (or close to) the end of the signing certificates' validity period. Either use an earlier end time for this KDM or re-create your signing certificates in the DCP-o-matic preferences window."));
}
return;
} catch (dcp::NotEncryptedError& e) {
group = to->second->parent();
}
+ /* Check we're not adding a group to one of its children */
+ auto to_parent = group;
+ while (to_parent) {
+ if (from->second == to_parent) {
+ return;
+ }
+ to_parent = to_parent->parent();
+ }
+
DCPOMATIC_ASSERT (group);
DCPOMATIC_ASSERT (from->second->parent ());
dcp::DecryptedKDM dkdm(ekdm, chain->key().get());
auto new_dkdm = make_shared<DKDM>(ekdm);
+
+ if (Config::instance()->dkdms()->contains(new_dkdm->dkdm().id())) {
+ error_dialog(
+ this,
+ wxString::Format(_("DKDM %s is already in the DKDM list and will not be added again."), std_to_wx(new_dkdm->dkdm().id()))
+ );
+ return;
+ }
+
auto group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm());
if (!group) {
group = Config::instance()->dkdms ();
return;
}
- if (NagDialog::maybe_nag (
- this, Config::NAG_DELETE_DKDM,
- _("You are about to remove a DKDM. This will make it impossible to decrypt the DCP that the DKDM was made for, and it cannot be undone. "
- "Are you sure?"),
- true)) {
- return;
+ if (removed->contains_dkdm()) {
+ if (NagDialog::maybe_nag(
+ this, Config::NAG_DELETE_DKDM,
+ _("You are about to remove a DKDM. This will make it impossible to decrypt the DCP that the DKDM was made for, and it cannot be undone. "
+ "Are you sure?"),
+ true)) {
+ return;
+ }
}
_dkdm->Delete (dkdm_to_id (removed));