X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdkdm_wrapper.cc;h=f5eb435f6d0fc06989478a70a21f306b2bb1dd11;hb=bcf99dcfcf498d459e60be72aabcf34193fbe4c5;hp=809739e06fd471d14a564fbc1de468d6a1f93f59;hpb=ba049fdab4a47023d6d5ee8b5ff9bbb710afbabb;p=dcpomatic.git diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc index 809739e06..f5eb435f6 100644 --- a/src/lib/dkdm_wrapper.cc +++ b/src/lib/dkdm_wrapper.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2017 Carl Hetherington + Copyright (C) 2017-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,78 +18,116 @@ */ + #include "compose.hpp" #include "dkdm_wrapper.h" #include "dcpomatic_assert.h" +#include +LIBDCP_DISABLE_WARNINGS #include -#include +LIBDCP_ENABLE_WARNINGS + using std::string; using std::list; -using boost::shared_ptr; -using boost::dynamic_pointer_cast; +using std::shared_ptr; +using std::make_shared; +using std::dynamic_pointer_cast; + shared_ptr DKDMBase::read (cxml::ConstNodePtr node) { if (node->name() == "DKDM") { - return shared_ptr (new DKDM (dcp::EncryptedKDM (node->content ()))); + return make_shared(dcp::EncryptedKDM(node->content())); } else if (node->name() == "DKDMGroup") { - shared_ptr group (new DKDMGroup (node->string_attribute ("Name"))); - BOOST_FOREACH (cxml::ConstNodePtr i, node->node_children()) { - shared_ptr c = read (i); - if (c) { + auto group = make_shared(node->string_attribute("Name")); + for (auto i: node->node_children()) { + if (auto c = read(i)) { group->add (c); } } return group; } - return shared_ptr (); + return {}; } + string DKDM::name () const { return String::compose ("%1 (%2)", _dkdm.content_title_text(), _dkdm.cpl_id()); } + void DKDM::as_xml (xmlpp::Element* node) const { node->add_child("DKDM")->add_child_text (_dkdm.as_xml ()); } + void DKDMGroup::as_xml (xmlpp::Element* node) const { - xmlpp::Element* f = node->add_child("DKDMGroup"); + auto f = node->add_child("DKDMGroup"); f->set_attribute ("Name", _name); - BOOST_FOREACH (shared_ptr i, _children) { + for (auto i: _children) { i->as_xml (f); } } + void -DKDMGroup::add (shared_ptr child) +DKDMGroup::add (shared_ptr child, shared_ptr previous) { DCPOMATIC_ASSERT (child); - _children.push_back (child); - child->set_parent (dynamic_pointer_cast (shared_from_this ())); + if (previous) { + auto i = find (_children.begin(), _children.end(), previous); + if (i != _children.end()) { + ++i; + } + _children.insert (i, child); + } else { + _children.push_back (child); + } + child->set_parent (dynamic_pointer_cast(shared_from_this())); } + void DKDMGroup::remove (shared_ptr child) { - for (list >::iterator i = _children.begin(); i != _children.end(); ++i) { + for (auto i = _children.begin(); i != _children.end(); ++i) { if (*i == child) { _children.erase (i); - child->set_parent (shared_ptr ()); + child->set_parent (shared_ptr()); return; } - shared_ptr g = dynamic_pointer_cast (*i); + auto g = dynamic_pointer_cast (*i); if (g) { g->remove (child); } } } + + +bool +DKDMGroup::contains(string dkdm_id) const +{ + for (auto child: _children) { + if (auto child_group = dynamic_pointer_cast(child)) { + if (child_group->contains(dkdm_id)) { + return true; + } + } else if (auto child_dkdm = dynamic_pointer_cast(child)) { + if (child_dkdm->dkdm().id() == dkdm_id) { + return true; + } + } + } + + return false; +} +