summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-02-04 09:30:06 +0000
committerCarl Hetherington <cth@carlh.net>2015-02-04 09:30:06 +0000
commit079b097c0d227bc899fe7af19dd904813e09f635 (patch)
tree1c4958fec7339139d89cb3a2dbed60d29ec3026d /src
parent0acdcc34f5d582474d586f75d5be627155ad9e08 (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.cc21
-rw-r--r--src/lib/dcp_content.h6
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;