using std::copy;
using std::back_inserter;
using std::map;
+using std::exception;
using boost::shared_ptr;
using boost::weak_ptr;
using boost::dynamic_pointer_cast;
) {
try {
- dcp::DCP dcp (*i);
- dcp.read ();
- DCPOMATIC_ASSERT (dcp.cpls().front()->file());
- out.push_back (
- CPLSummary (
- i->path().leaf().string(),
- dcp.cpls().front()->id(),
- dcp.cpls().front()->annotation_text(),
- dcp.cpls().front()->file().get()
- )
- );
+ out.push_back (CPLSummary(*i));
} catch (...) {
}
/*
- Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "compose.hpp"
#include "dcpomatic_assert.h"
#include <dcp/raw_convert.h>
+#include <dcp/cpl.h>
+#include <dcp/dcp.h>
+#include <dcp/reel_mxf.h>
+#include <dcp/reel_asset.h>
#include <libxml++/libxml++.h>
#include <libcxml/cxml.h>
+#include <boost/foreach.hpp>
#include "i18n.h"
DCPOMATIC_ASSERT (false);
}
+
+CPLSummary::CPLSummary (boost::filesystem::path p)
+ : dcp_directory (p.leaf().string())
+{
+ dcp::DCP dcp (p);
+ dcp.read ();
+
+ cpl_id = dcp.cpls().front()->id();
+ cpl_annotation_text = dcp.cpls().front()->annotation_text();
+ cpl_file = dcp.cpls().front()->file().get();
+
+ 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()) {
+ encrypted = true;
+ }
+ }
+ }
+}
struct CPLSummary
{
- CPLSummary (std::string d, std::string i, std::string a, boost::filesystem::path f)
+ CPLSummary (boost::filesystem::path p);
+
+ CPLSummary (std::string d, std::string i, std::string a, boost::filesystem::path f, bool e)
: dcp_directory (d)
, cpl_id (i)
, cpl_annotation_text (a)
, cpl_file (f)
+ , encrypted (e)
{}
std::string dcp_directory;
std::string cpl_id;
std::string cpl_annotation_text;
boost::filesystem::path cpl_file;
+ /** true if this CPL has any encrypted assets */
+ bool encrypted;
};
extern bool operator== (Crop const & a, Crop const & b);
/*
- Copyright (C) 2015-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2015-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "static_text.h"
#include "dcpomatic_button.h"
#include <libcxml/cxml.h>
+#include <boost/foreach.hpp>
using std::vector;
{
_cpl->Clear ();
- for (vector<CPLSummary>::const_iterator i = _cpls.begin(); i != _cpls.end(); ++i) {
- _cpl->Append (std_to_wx (i->cpl_id));
+ BOOST_FOREACH (CPLSummary const & i, _cpls) {
+ _cpl->Append (std_to_wx(i.cpl_id));
if (_cpls.size() > 0) {
_cpl->SetSelection (0);
cxml::Document cpl_document ("CompositionPlaylist");
cpl_document.read_file (cpl_file);
+ bool encrypted = false;
+ BOOST_FOREACH (cxml::ConstNodePtr i, cpl_document.node_children("ReelList")) {
+ BOOST_FOREACH (cxml::ConstNodePtr j, i->node_children("Reel")) {
+ BOOST_FOREACH (cxml::ConstNodePtr k, j->node_children("AssetList")) {
+ BOOST_FOREACH (cxml::ConstNodePtr l, k->node_children()) {
+ if (!l->node_children("KeyId").empty()) {
+ encrypted = true;
+ }
+ }
+ }
+ }
+ }
+
+ if (!encrypted) {
+ /* XXX: this needs to be marked translatable after 2.14.0 */
+ error_dialog (this, wxT("This CPL contains no encrypted assets."));
+ return;
+ }
+
try {
_cpls.push_back (
CPLSummary (
dcp_dir.filename().string(),
cpl_document.string_child("Id").substr (9),
- cpl_document.string_child ("ContentTitleText"),
- cpl_file
+ cpl_document.string_child("ContentTitleText"),
+ cpl_file,
+ encrypted
)
);
} catch (cxml::Error) {
h = new StaticText (this, _("CPL"));
h->SetFont (subheading_font);
right->Add (h, 0, wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_Y_GAP * 2);
- _cpl = new KDMCPLPanel (this, film->cpls ());
+
+ vector<CPLSummary> cpls;
+ BOOST_FOREACH (CPLSummary const & i, film->cpls()) {
+ if (i.encrypted) {
+ cpls.push_back (i);
+ }
+ }
+
+ _cpl = new KDMCPLPanel (this, cpls);
right->Add (_cpl, 0, wxEXPAND);
/* Sub-heading: Output */