Various joining fixes.
[dcpomatic.git] / src / lib / playlist.cc
index 1712dc8ff54dee392f5e865830aa91cea76c2cf1..37b2902189f2b32d61a94a57bbc0baa36c7f0a28 100644 (file)
@@ -26,8 +26,7 @@
 #include "video_content.h"
 #include "ffmpeg_decoder.h"
 #include "ffmpeg_content.h"
-#include "still_image_decoder.h"
-#include "still_image_content.h"
+#include "image_decoder.h"
 #include "content_factory.h"
 #include "job.h"
 #include "config.h"
@@ -82,14 +81,14 @@ Playlist::maybe_sequence_video ()
        _sequencing_video = true;
        
        ContentList cl = _content;
-       Time last = 0;
+       Time next = 0;
        for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) {
                if (!dynamic_pointer_cast<VideoContent> (*i)) {
                        continue;
                }
                
-               (*i)->set_position (last);
-               last = (*i)->end ();
+               (*i)->set_position (next);
+               next = (*i)->end() + 1;
        }
 
        /* This won't change order, so it does not need a sort */
@@ -114,11 +113,11 @@ Playlist::video_identifier () const
 
 /** @param node <Playlist> node */
 void
-Playlist::set_from_xml (shared_ptr<const Film> film, shared_ptr<const cxml::Node> node)
+Playlist::set_from_xml (shared_ptr<const Film> film, shared_ptr<const cxml::Node> node, int version)
 {
-       list<shared_ptr<cxml::Node> > c = node->node_children ("Content");
-       for (list<shared_ptr<cxml::Node> >::iterator i = c.begin(); i != c.end(); ++i) {
-               _content.push_back (content_factory (film, *i));
+       list<cxml::NodePtr> c = node->node_children ("Content");
+       for (list<cxml::NodePtr>::iterator i = c.begin(); i != c.end(); ++i) {
+               _content.push_back (content_factory (film, *i, version));
        }
 
        sort (_content.begin(), _content.end(), ContentSorter ());
@@ -260,7 +259,7 @@ Playlist::length () const
 {
        Time len = 0;
        for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
-               len = max (len, (*i)->end ());
+               len = max (len, (*i)->end() + 1);
        }
 
        return len;
@@ -390,3 +389,15 @@ Playlist::move_later (shared_ptr<Content> c)
        
        Changed ();
 }
+
+bool
+Playlist::content_paths_valid () const
+{
+       for (ContentList::const_iterator i = _content.begin(); i != _content.end(); ++i) {
+               if (!(*i)->path_valid ()) {
+                       return false;
+               }
+       }
+
+       return true;
+}