X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fspl.cc;h=3e5e957ff457792257e37c243add266e2feb4524;hb=ff639b3cf30afcc097bfd21d39c8d15f466cadd6;hp=d7c0944d7ee13a96a4a924cb9d9f72eee455663f;hpb=f598e06928af82fee1d2b25bc4cf25f560478ad4;p=dcpomatic.git diff --git a/src/lib/spl.cc b/src/lib/spl.cc index d7c0944d7..3e5e957ff 100644 --- a/src/lib/spl.cc +++ b/src/lib/spl.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2018 Carl Hetherington + Copyright (C) 2018-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,45 +18,53 @@ */ + +#include "content_store.h" #include "spl.h" -#include "spl_entry.h" -#include -#include +#include +#include +#include +LIBDCP_DISABLE_WARNINGS #include -#include +LIBDCP_ENABLE_WARNINGS +#include + -using boost::shared_ptr; +using std::cout; +using std::string; +using std::shared_ptr; +using dcp::raw_convert; -SPL::SPL (boost::filesystem::path file) + +void +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 j, dcp.cpls()) { - if (j->id() == i->string_attribute("CPL")) { - playlist.push_back (SPLEntry(j, dir)); - } + _spl.clear (); + _missing = false; + cxml::Document doc ("SPL"); + doc.read_file (path); + _id = doc.string_child("Id"); + _name = doc.string_child("Name"); + for (auto i: doc.node_children("Entry")) { + auto c = store->get(i->string_child("Digest")); + if (c) { + add (SPLEntry(c)); + } else { + _missing = true; } } } + 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()); + auto root = doc.create_root_node ("SPL"); + root->add_child("Id")->add_child_text (_id); + root->add_child("Name")->add_child_text (_name); + for (auto i: _spl) { + i.as_xml (root->add_child("Entry")); } - - doc.write_to_file_formatted(file.string()); + doc.write_to_file_formatted (path.string()); }