Separate Controls into standard/swaroop.
[dcpomatic.git] / src / lib / spl.cc
index d7c0944d7ee13a96a4a924cb9d9f72eee455663f..74538aa990d9007e9728100cded052043d6a3804 100644 (file)
 */
 
 #include "spl.h"
-#include "spl_entry.h"
-#include <dcp/cpl.h>
-#include <dcp/dcp.h>
+#include "content_store.h"
+#include <libcxml/cxml.h>
 #include <libxml++/libxml++.h>
 #include <boost/foreach.hpp>
+#include <iostream>
 
+using std::cout;
 using boost::shared_ptr;
 
-SPL::SPL (boost::filesystem::path file)
+bool
+SPL::read (boost::filesystem::path path, ContentStore* store)
 {
-       cxml::Document f ("DCPPlaylist");
-       f.read_file (file);
-
-       name = f.string_attribute ("Name");
-       BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("DCP")) {
-               boost::filesystem::path dir(i->content());
-               dcp::DCP dcp (dir);
-               dcp.read ();
-               BOOST_FOREACH (shared_ptr<dcp::CPL> j, dcp.cpls()) {
-                       if (j->id() == i->string_attribute("CPL")) {
-                               playlist.push_back (SPLEntry(j, dir));
-                       }
+       _spl.clear ();
+       cxml::Document doc ("SPL");
+       doc.read_file (path);
+       bool missing = false;
+       BOOST_FOREACH (cxml::ConstNodePtr i, doc.node_children("Entry")) {
+               shared_ptr<Content> c = store->get(i->string_child("Digest"));
+               if (c) {
+                       add (SPLEntry(c, i));
+               } else {
+                       missing = true;
                }
        }
+
+       _name = path.filename().string();
+       return missing;
 }
 
 void
-SPL::as_xml (boost::filesystem::path file) const
+SPL::write (boost::filesystem::path path) const
 {
        xmlpp::Document doc;
-       xmlpp::Element* root = doc.create_root_node ("DCPPlaylist");
-       root->set_attribute ("Name", name);
-
-       BOOST_FOREACH (SPLEntry i, playlist) {
-               xmlpp::Element* d = root->add_child ("DCP");
-               d->set_attribute ("CPL", i.cpl->id());
-               d->add_child_text (i.directory.string());
+       xmlpp::Element* root = doc.create_root_node ("SPL");
+       BOOST_FOREACH (SPLEntry i, _spl) {
+               i.as_xml (root->add_child("Entry"));
        }
-
-       doc.write_to_file_formatted(file.string());
+       doc.write_to_file_formatted (path.string());
 }