#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;
, SubtitleContent (f)
, _has_subtitles (false)
, _encrypted (false)
- , _directory (p)
, _kdm_valid (false)
{
read_directory (p);
{
_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"));
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 ());
}
{
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;
+}
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);
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;