Allow changing colour conversion settings for multiple pieces of content at the same...
[dcpomatic.git] / src / lib / spl.cc
index ba99e30280944e8108f4668c361f7346e13b02c8..e8e86f89ce227b401c4ade2210e176bdd45dec1d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2018-2019 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 */
 
 #include "spl.h"
-#include "spl_entry.h"
-#include <dcp/cpl.h>
+#include "content_store.h"
+#include <libcxml/cxml.h>
+#include <dcp/raw_convert.h>
 #include <libxml++/libxml++.h>
 #include <boost/foreach.hpp>
+#include <iostream>
+
+using std::cout;
+using std::string;
+using boost::shared_ptr;
+using dcp::raw_convert;
 
 void
-SPL::as_xml (boost::filesystem::path file) const
+SPL::read (boost::filesystem::path path, ContentStore* store)
 {
-       xmlpp::Document doc;
-       xmlpp::Element* root = doc.create_root_node ("DCPPlaylist");
-       root->set_attribute ("Name", name);
+       _path = path;
 
-       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());
+       _spl.clear ();
+       _missing = false;
+       cxml::Document doc ("SPL");
+       doc.read_file (path);
+       _id = doc.string_child("Id");
+       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;
+               }
        }
 
-       doc.write_to_file_formatted(file.string());
+       _allowed_shows = doc.optional_number_child<int>("AllowedShows");
+}
+
+void
+SPL::write (boost::filesystem::path path) const
+{
+       _path = path;
+
+       xmlpp::Document doc;
+       xmlpp::Element* root = doc.create_root_node ("SPL");
+       root->add_child("Id")->add_child_text (_id);
+       BOOST_FOREACH (SPLEntry i, _spl) {
+               i.as_xml (root->add_child("Entry"));
+       }
+       if (_allowed_shows) {
+               root->add_child("AllowedShows")->add_child_text(raw_convert<string>(*_allowed_shows));
+       }
+       doc.write_to_file_formatted (path.string());
 }