Add NamedChannel and use it to hide the never-used channels
[dcpomatic.git] / src / lib / types.cc
index ee36431cf8755d17a42ddb5d8215cd78eaf954a1..e7acf6992eec60d128be640525ba4b32680abc3a 100644 (file)
 #include "types.h"
 #include "compose.hpp"
 #include "dcpomatic_assert.h"
+#include "warnings.h"
 #include <dcp/raw_convert.h>
 #include <dcp/cpl.h>
 #include <dcp/dcp.h>
 #include <dcp/reel_mxf.h>
 #include <dcp/reel_asset.h>
+DCPOMATIC_DISABLE_WARNINGS
 #include <libxml++/libxml++.h>
+DCPOMATIC_ENABLE_WARNINGS
 #include <libcxml/cxml.h>
 #include <boost/foreach.hpp>
 
@@ -35,6 +38,7 @@
 using std::max;
 using std::min;
 using std::string;
+using std::list;
 using boost::shared_ptr;
 using dcp::raw_convert;
 
@@ -193,7 +197,15 @@ CPLSummary::CPLSummary (boost::filesystem::path p)
        : dcp_directory (p.leaf().string())
 {
        dcp::DCP dcp (p);
-       dcp.read ();
+
+       list<dcp::VerificationNote> notes;
+       dcp.read (&notes);
+       BOOST_FOREACH (dcp::VerificationNote i, notes) {
+               if (i.code() != dcp::VerificationNote::EXTERNAL_ASSET) {
+                       /* It's not just a warning about this DCP being a VF */
+                       throw dcp::ReadError(dcp::note_to_string(i));
+               }
+       }
 
        cpl_id = dcp.cpls().front()->id();
        cpl_annotation_text = dcp.cpls().front()->annotation_text();
@@ -201,11 +213,19 @@ CPLSummary::CPLSummary (boost::filesystem::path p)
 
        encrypted = false;
        BOOST_FOREACH (shared_ptr<dcp::CPL> j, dcp.cpls()) {
-               BOOST_FOREACH (shared_ptr<const dcp::ReelAsset> k, j->reel_assets()) {
-                       shared_ptr<const dcp::ReelMXF> mxf = boost::dynamic_pointer_cast<const dcp::ReelMXF> (k);
-                       if (mxf && mxf->key_id()) {
+               BOOST_FOREACH (shared_ptr<const dcp::ReelMXF> k, j->reel_mxfs()) {
+                       if (k->key_id()) {
                                encrypted = true;
                        }
                }
        }
+
+       last_write_time = boost::filesystem::last_write_time (p);
 }
+
+
+bool operator== (NamedChannel const& a, NamedChannel const& b)
+{
+       return a.name == b.name && a.index == b.index;
+}
+