Ignore missing asset errors.
[libdcp.git] / src / cpl.h
index 9e7d5aae16371bec9799c7594b9b92c51400bd54..75b9d701c7ee5ae6cf14bf238cf3c2a520cca274 100644 (file)
--- a/src/cpl.h
+++ b/src/cpl.h
 #include "certificates.h"
 #include "key.h"
 #include "asset.h"
+#include "metadata.h"
 #include <libxml++/libxml++.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/optional.hpp>
 #include <boost/filesystem.hpp>
 #include <list>
@@ -39,7 +39,7 @@ class Reel;
 class XMLMetadata;
 class MXFMetadata;
 class Signer;
-class KDM;
+class DecryptedKDM;
        
 /** @class CPL
  *  @brief A Composition Playlist.
@@ -50,19 +50,34 @@ public:
        CPL (std::string annotation_text, ContentKind content_kind);
        CPL (boost::filesystem::path file);
 
-       std::string pkl_type () const {
-               return "text/xml";
-       }
+       bool equals (
+               CPL const & other,
+               EqualityOptions options,
+               boost::function<void (NoteType, std::string)> note
+               ) const;
 
        void add (boost::shared_ptr<Reel> reel);
+       void add (DecryptedKDM const &);
 
+       /** @return contents of the &lt;AnnotationText&gt; node */
        std::string annotation_text () const {
                return _annotation_text;
        }
        
+       /** @return contents of the &lt;ContentTitleText&gt; node */
        std::string content_title_text () const {
                return _content_title_text;
        }
+
+       /** @return contents of the &lt;Id&gt; node within &lt;ContentVersion&gt; */
+       void set_content_version_id (std::string id) {
+               _content_version_id = id;
+       }
+
+       /** @return contents of the &lt;LabelText&gt; node within &lt;ContentVersion&gt; */
+       void set_content_version_label_text (std::string text) {
+               _content_version_label_text = text;
+       }
        
        /** @return the type of the content, used by media servers
         *  to categorise things (e.g. feature, trailer, etc.)
@@ -71,39 +86,46 @@ public:
                return _content_kind;
        }
 
+       /** @return the reels in this CPL */
        std::list<boost::shared_ptr<Reel> > reels () const {
                return _reels;
        }
 
-       std::list<boost::shared_ptr<const Content> > assets () const;
+       /** @return the Content in this CPL across all its reels
+        *  (Content is picture, sound and subtitles)
+        */
+       std::list<boost::shared_ptr<const Content> > content () const;
 
        bool encrypted () const;
 
        void set_mxf_keys (Key);
+       void set_metadata (XMLMetadata m) {
+               _metadata = m;
+       }
 
-       bool equals (CPL const & other, EqualityOptions options, boost::function<void (NoteType, std::string)> note) const;
-       
-       void write_xml (boost::filesystem::path file, Standard standard, XMLMetadata, boost::shared_ptr<const Signer>) const;
-       void write_to_assetmap (xmlpp::Node *) const;
+       void write_xml (
+               boost::filesystem::path file,
+               Standard standard,
+               boost::shared_ptr<const Signer>
+               ) const;
+
+       void resolve_refs (std::list<boost::shared_ptr<Object> >);
+
+protected:
+       /** @return type string for PKLs for this asset */
+       std::string pkl_type (Standard standard) const;
 
-       void add (KDM const &);
-       
 private:
-       
-       std::string _annotation_text;
-       std::string _issue_date;
-       std::string _creator;
-       std::string _content_title_text;
-       ContentKind _content_kind;
-       std::string _content_version_id;
-       std::string _content_version_label_text;
-       /** reels */
+       std::string _annotation_text;               ///< &lt;AnnotationText&gt;
+       /** &lt;Issuer&gt;, &lt;Creator&gt; and &lt;IssueDate&gt;.  These are grouped
+        *  because they occur together in a few places.
+        */
+       XMLMetadata _metadata;
+       std::string _content_title_text;            ///< &lt;ContentTitleText&gt;
+       ContentKind _content_kind;                  ///< &lt;ContentKind&gt;
+       std::string _content_version_id;            ///< &lt;Id&gt; in &lt;ContentVersion&gt;
+       std::string _content_version_label_text;    ///< &lt;LabelText&gt; in &lt;ContentVersion&gt;
        std::list<boost::shared_ptr<Reel> > _reels;
-
-       /** a SHA1 digest of our XML */
-       mutable std::string _digest;
-       /** length in bytes of the XML that we last wrote to disk */
-       mutable int64_t _length;
 };
 
 }