Merge master.
[dcpomatic.git] / src / lib / content.cc
index 7db349617ec031964648b19f0c3387a332b12b55..1fb4681a251b2810c662426912114f6a2af181e7 100644 (file)
@@ -83,9 +83,9 @@ Content::Content (shared_ptr<const Film> f, shared_ptr<const cxml::Node> node)
                _paths.push_back ((*i)->content ());
        }
        _digest = node->string_child ("Digest");
-       _position = node->number_child<DCPTime> ("Position");
-       _trim_start = node->number_child<DCPTime> ("TrimStart");
-       _trim_end = node->number_child<DCPTime> ("TrimEnd");
+       _position = DCPTime (node->number_child<double> ("Position"));
+       _trim_start = DCPTime (node->number_child<double> ("TrimStart"));
+       _trim_end = DCPTime (node->number_child<double> ("TrimEnd"));
 }
 
 Content::Content (shared_ptr<const Film> f, vector<shared_ptr<Content> > c)
@@ -96,11 +96,11 @@ Content::Content (shared_ptr<const Film> f, vector<shared_ptr<Content> > c)
        , _change_signals_frequent (false)
 {
        for (size_t i = 0; i < c.size(); ++i) {
-               if (i > 0 && c[i]->trim_start ()) {
+               if (i > 0 && c[i]->trim_start() > DCPTime()) {
                        throw JoinError (_("Only the first piece of content to be joined can have a start trim."));
                }
 
-               if (i < (c.size() - 1) && c[i]->trim_end ()) {
+               if (i < (c.size() - 1) && c[i]->trim_end () > DCPTime()) {
                        throw JoinError (_("Only the last piece of content to be joined can have an end trim."));
                }
 
@@ -119,9 +119,9 @@ Content::as_xml (xmlpp::Node* node) const
                node->add_child("Path")->add_child_text (i->string ());
        }
        node->add_child("Digest")->add_child_text (_digest);
-       node->add_child("Position")->add_child_text (lexical_cast<string> (_position));
-       node->add_child("TrimStart")->add_child_text (lexical_cast<string> (_trim_start));
-       node->add_child("TrimEnd")->add_child_text (lexical_cast<string> (_trim_end));
+       node->add_child("Position")->add_child_text (lexical_cast<string> (_position.get ()));
+       node->add_child("TrimStart")->add_child_text (lexical_cast<string> (_trim_start.get ()));
+       node->add_child("TrimEnd")->add_child_text (lexical_cast<string> (_trim_end.get ()));
 }
 
 void
@@ -150,6 +150,10 @@ Content::set_position (DCPTime p)
 {
        {
                boost::mutex::scoped_lock lm (_mutex);
+               if (p == _position) {
+                       return;
+               }
+               
                _position = p;
        }
 
@@ -191,13 +195,16 @@ Content::clone () const
        xmlpp::Document doc;
        xmlpp::Node* node = doc.create_root_node ("Content");
        as_xml (node);
-       return content_factory (film, cxml::NodePtr (new cxml::Node (node)), Film::state_version);
+
+       /* notes is unused here (we assume) */
+       list<string> notes;
+       return content_factory (film, cxml::NodePtr (new cxml::Node (node)), Film::current_state_version, notes);
 }
 
 string
 Content::technical_summary () const
 {
-       return String::compose ("%1 %2 %3", path_summary(), digest(), position());
+       return String::compose ("%1 %2 %3", path_summary(), digest(), position().seconds());
 }
 
 DCPTime
@@ -206,15 +213,6 @@ Content::length_after_trim () const
        return full_length() - trim_start() - trim_end();
 }
 
-/** @param t A time relative to the start of this content (not the position).
- *  @return true if this time is trimmed by our trim settings.
- */
-bool
-Content::trimmed (DCPTime t) const
-{
-       return (t < trim_start() || t > (full_length() - trim_end ()));
-}
-
 /** @return string which includes everything about how this content affects
  *  its playlist.
  */
@@ -224,15 +222,15 @@ Content::identifier () const
        stringstream s;
        
        s << Content::digest()
-         << "_" << position()
-         << "_" << trim_start()
-         << "_" << trim_end();
+         << "_" << position().get()
+         << "_" << trim_start().get()
+         << "_" << trim_end().get();
 
        return s.str ();
 }
 
 bool
-Content::path_valid () const
+Content::paths_valid () const
 {
        for (vector<boost::filesystem::path>::const_iterator i = _paths.begin(); i != _paths.end(); ++i) {
                if (!boost::filesystem::exists (*i)) {