diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-02-04 09:30:06 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-02-04 09:30:06 +0000 |
| commit | 079b097c0d227bc899fe7af19dd904813e09f635 (patch) | |
| tree | 1c4958fec7339139d89cb3a2dbed60d29ec3026d /src | |
| parent | 0acdcc34f5d582474d586f75d5be627155ad9e08 (diff) | |
Don't store _directory in DCPContent, work it out from the paths instead.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/dcp_content.cc | 21 | ||||
| -rw-r--r-- | src/lib/dcp_content.h | 6 |
2 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index d1a658001..3f3cb1b94 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -25,11 +25,13 @@ #include "compose.hpp" #include <dcp/dcp.h> #include <dcp/exceptions.h> +#include <iterator> #include "i18n.h" using std::string; using std::cout; +using std::distance; using boost::shared_ptr; using boost::optional; @@ -42,7 +44,6 @@ DCPContent::DCPContent (shared_ptr<const Film> f, boost::filesystem::path p) , SubtitleContent (f) , _has_subtitles (false) , _encrypted (false) - , _directory (p) , _kdm_valid (false) { read_directory (p); @@ -56,7 +57,6 @@ DCPContent::DCPContent (shared_ptr<const Film> f, cxml::ConstNodePtr node, int v { _name = node->string_child ("Name"); _has_subtitles = node->bool_child ("HasSubtitles"); - _directory = node->string_child ("Directory"); _encrypted = node->bool_child ("Encrypted"); if (node->optional_node_child ("KDM")) { _kdm = dcp::EncryptedKDM (node->string_child ("KDM")); @@ -128,7 +128,6 @@ DCPContent::as_xml (xmlpp::Node* node) const node->add_child("Name")->add_child_text (_name); node->add_child("HasSubtitles")->add_child_text (_has_subtitles ? "1" : "0"); node->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0"); - node->add_child("Directory")->add_child_text (_directory.string ()); if (_kdm) { node->add_child("KDM")->add_child_text (_kdm->as_xml ()); } @@ -160,3 +159,19 @@ DCPContent::can_be_played () const { return !_encrypted || _kdm_valid; } + +boost::filesystem::path +DCPContent::directory () const +{ + optional<size_t> smallest; + boost::filesystem::path dir; + for (size_t i = 0; i < number_of_paths(); ++i) { + boost::filesystem::path const p = path (i).parent_path (); + size_t const d = distance (p.begin(), p.end()); + if (!smallest || d < smallest.get ()) { + dir = p; + } + } + + return dir; +} diff --git a/src/lib/dcp_content.h b/src/lib/dcp_content.h index aa53d76a9..9365a6e2c 100644 --- a/src/lib/dcp_content.h +++ b/src/lib/dcp_content.h @@ -64,10 +64,7 @@ public: return _has_subtitles; } - boost::filesystem::path directory () const { - boost::mutex::scoped_lock lm (_mutex); - return _directory; - } + boost::filesystem::path directory () const; bool encrypted () const { boost::mutex::scoped_lock lm (_mutex); @@ -89,7 +86,6 @@ private: bool _has_subtitles; /** true if our DCP is encrypted */ bool _encrypted; - boost::filesystem::path _directory; boost::optional<dcp::EncryptedKDM> _kdm; /** true if _kdm successfully decrypts the first frame of our DCP */ bool _kdm_valid; |
