diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-05-30 18:11:55 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-05-30 18:11:55 +0200 |
| commit | bcf99dcfcf498d459e60be72aabcf34193fbe4c5 (patch) | |
| tree | c493bac57f6c1dbed7da69d17b6db70e807bb540 | |
| parent | debc0ef69468530ba482c8ed0fc6a1ac1f26b26e (diff) | |
Don't add DKDMs twice (#2545).
| -rw-r--r-- | src/lib/dkdm_wrapper.cc | 20 | ||||
| -rw-r--r-- | src/lib/dkdm_wrapper.h | 2 | ||||
| -rw-r--r-- | src/tools/dcpomatic_kdm.cc | 9 |
3 files changed, 31 insertions, 0 deletions
diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc index 532bbb314..f5eb435f6 100644 --- a/src/lib/dkdm_wrapper.cc +++ b/src/lib/dkdm_wrapper.cc @@ -111,3 +111,23 @@ DKDMGroup::remove (shared_ptr<DKDMBase> child) } } } + + +bool +DKDMGroup::contains(string dkdm_id) const +{ + for (auto child: _children) { + if (auto child_group = dynamic_pointer_cast<DKDMGroup>(child)) { + if (child_group->contains(dkdm_id)) { + return true; + } + } else if (auto child_dkdm = dynamic_pointer_cast<DKDM>(child)) { + if (child_dkdm->dkdm().id() == dkdm_id) { + return true; + } + } + } + + return false; +} + diff --git a/src/lib/dkdm_wrapper.h b/src/lib/dkdm_wrapper.h index 7227fdc86..d15f017c5 100644 --- a/src/lib/dkdm_wrapper.h +++ b/src/lib/dkdm_wrapper.h @@ -93,6 +93,8 @@ public: void add (std::shared_ptr<DKDMBase> child, std::shared_ptr<DKDM> previous = std::shared_ptr<DKDM>()); void remove (std::shared_ptr<DKDMBase> child); + bool contains(std::string dkdm_id) const; + private: std::string _name; std::list<std::shared_ptr<DKDMBase>> _children; diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 12fa614cc..350494378 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -568,6 +568,15 @@ private: 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 (); |
