Fix equals() with image subtitles to not compare unique IDs.
[libdcp.git] / src / pkl.h
index 3b960ddf46b54917a06d24d4607bbff237aec454..3999631874601f24cfc9daf6b9bdbdec2999caa4 100644 (file)
--- a/src/pkl.h
+++ b/src/pkl.h
@@ -36,6 +36,7 @@
 
 #include "object.h"
 #include "types.h"
+#include "util.h"
 #include "certificate_chain.h"
 #include <libcxml/cxml.h>
 #include <boost/filesystem.hpp>
@@ -59,16 +60,25 @@ public:
                return _standard;
        }
 
+       boost::optional<std::string> hash (std::string id) const;
+       boost::optional<std::string> type (std::string id) const;
+
        void add_asset (std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type);
        void write (boost::filesystem::path file, boost::shared_ptr<const CertificateChain> signer) const;
 
+       /** @return the most recent disk file used to read or write this PKL, if there is one */
+       boost::optional<boost::filesystem::path> file () const {
+               return _file;
+       }
+
 private:
 
        class Asset : public Object
        {
        public:
                Asset (cxml::ConstNodePtr node)
-                       : annotation_text (node->optional_string_child("AnnotationText"))
+                       : Object (remove_urn_uuid(node->string_child("Id")))
+                       , annotation_text (node->optional_string_child("AnnotationText"))
                        , hash (node->string_child("Hash"))
                        , size (node->number_child<int64_t>("Size"))
                        , type (node->string_child("Type"))
@@ -94,6 +104,8 @@ private:
        std::string _issuer;
        std::string _creator;
        std::list<boost::shared_ptr<Asset> > _asset_list;
+       /** The most recent disk file used to read or write this PKL */
+       mutable boost::optional<boost::filesystem::path> _file;
 };
 
 }