summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-10-16 22:52:55 +0100
committerCarl Hetherington <cth@carlh.net>2013-10-16 22:52:55 +0100
commite45fe284b7c334d64c2fe105c0564c5015d3747f (patch)
treef98907d190b9d79376f7dc7a601e22c13c42b614 /src/lib
parent4ed8eafd541c2c5867795db56c440e444cc0aeff (diff)
Allow specification of DCP to build KDMs for (#235).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc61
-rw-r--r--src/lib/film.h4
-rw-r--r--src/lib/kdm.cc48
-rw-r--r--src/lib/kdm.h3
4 files changed, 70 insertions, 46 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 3cae2a02f..bb210350e 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -724,22 +724,30 @@ Film::j2c_path (int f, Eyes e, bool t) const
return file (p.string ());
}
-/** Make an educated guess as to whether we have a complete DCP
- * or not.
- * @return true if we do.
- */
-
-bool
-Film::have_dcp () const
+/** @return List of subdirectories (not full paths) containing DCPs that can be successfully libdcp::DCP::read() */
+list<boost::filesystem::path>
+Film::dcps () const
{
- try {
- libdcp::DCP dcp (dir (dcp_name()));
- dcp.read ();
- } catch (...) {
- return false;
- }
+ list<boost::filesystem::path> out;
+
+ boost::filesystem::path const dir = directory ();
+ for (boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator(dir); i != boost::filesystem::directory_iterator(); ++i) {
+ if (
+ boost::filesystem::is_directory (*i) &&
+ i->path().leaf() != "j2c" && i->path().leaf() != "video" && i->path().leaf() != "info" && i->path().leaf() != "analysis"
+ ) {
+
+ try {
+ libdcp::DCP dcp (*i);
+ dcp.read ();
+ out.push_back (i->path().leaf ());
+ } catch (...) {
- return true;
+ }
+ }
+ }
+
+ return out;
}
shared_ptr<Player>
@@ -910,32 +918,14 @@ Film::full_frame () const
libdcp::KDM
Film::make_kdm (
shared_ptr<libdcp::Certificate> target,
+ boost::filesystem::path dcp_dir,
boost::posix_time::ptime from,
boost::posix_time::ptime until
) const
{
shared_ptr<const Signer> signer = make_signer ();
- /* Find the DCP to make the KDM for */
- boost::filesystem::path const dir = this->directory ();
- list<boost::filesystem::path> dcps;
- for (boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator(dir); i != boost::filesystem::directory_iterator(); ++i) {
- if (
- boost::filesystem::is_directory (*i) &&
- i->path().leaf() != "j2c" && i->path().leaf() != "video" && i->path().leaf() != "info" && i->path().leaf() != "analysis"
- ) {
-
- dcps.push_back (i->path());
- }
- }
-
- if (dcps.empty()) {
- throw KDMError (_("Could not find DCP to make KDM for"));
- } else if (dcps.size() > 1) {
- throw KDMError (_("More than one possible DCP to make KDM for"));
- }
-
- libdcp::DCP dcp (dcps.front ());
+ libdcp::DCP dcp (dir (dcp_dir.string ()));
try {
dcp.read ();
@@ -955,6 +945,7 @@ Film::make_kdm (
list<libdcp::KDM>
Film::make_kdms (
list<shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
boost::posix_time::ptime from,
boost::posix_time::ptime until
) const
@@ -962,7 +953,7 @@ Film::make_kdms (
list<libdcp::KDM> kdms;
for (list<shared_ptr<Screen> >::iterator i = screens.begin(); i != screens.end(); ++i) {
- kdms.push_back (make_kdm ((*i)->certificate, from, until));
+ kdms.push_back (make_kdm ((*i)->certificate, dcp, from, until));
}
return kdms;
diff --git a/src/lib/film.h b/src/lib/film.h
index 821c4e2b2..eb9130de3 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -96,7 +96,7 @@ public:
libdcp::Size full_frame () const;
- bool have_dcp () const;
+ std::list<boost::filesystem::path> dcps () const;
boost::shared_ptr<Player> make_player () const;
boost::shared_ptr<Playlist> playlist () const;
@@ -119,12 +119,14 @@ public:
libdcp::KDM
make_kdm (
boost::shared_ptr<libdcp::Certificate> target,
+ boost::filesystem::path dcp,
boost::posix_time::ptime from,
boost::posix_time::ptime until
) const;
std::list<libdcp::KDM> make_kdms (
std::list<boost::shared_ptr<Screen> >,
+ boost::filesystem::path dcp,
boost::posix_time::ptime from,
boost::posix_time::ptime until
) const;
diff --git a/src/lib/kdm.cc b/src/lib/kdm.cc
index cebbfffd1..05c4cd0f8 100644
--- a/src/lib/kdm.cc
+++ b/src/lib/kdm.cc
@@ -98,9 +98,15 @@ operator== (ScreenKDM const & a, ScreenKDM const & b)
}
static list<ScreenKDM>
-make_screen_kdms (shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boost::posix_time::ptime from, boost::posix_time::ptime to)
+make_screen_kdms (
+ shared_ptr<Film> film,
+ list<shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime to
+ )
{
- list<libdcp::KDM> kdms = film->make_kdms (screens, from, to);
+ list<libdcp::KDM> kdms = film->make_kdms (screens, dcp, from, to);
list<ScreenKDM> screen_kdms;
@@ -116,9 +122,15 @@ make_screen_kdms (shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boos
}
static list<CinemaKDMs>
-make_cinema_kdms (shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boost::posix_time::ptime from, boost::posix_time::ptime to)
+make_cinema_kdms (
+ shared_ptr<Film> film,
+ list<shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime to
+ )
{
- list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, from, to);
+ list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, dcp, from, to);
list<CinemaKDMs> cinema_kdms;
while (!screen_kdms.empty ()) {
@@ -153,10 +165,15 @@ make_cinema_kdms (shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boos
void
write_kdm_files (
- shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boost::posix_time::ptime from, boost::posix_time::ptime to, boost::filesystem::path directory
+ shared_ptr<Film> film,
+ list<shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime to,
+ boost::filesystem::path directory
)
{
- list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, from, to);
+ list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, dcp, from, to);
/* Write KDMs to the specified directory */
for (list<ScreenKDM>::iterator i = screen_kdms.begin(); i != screen_kdms.end(); ++i) {
@@ -168,10 +185,15 @@ write_kdm_files (
void
write_kdm_zip_files (
- shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boost::posix_time::ptime from, boost::posix_time::ptime to, boost::filesystem::path directory
+ shared_ptr<Film> film,
+ list<shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime to,
+ boost::filesystem::path directory
)
{
- list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, from, to);
+ list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, dcp, from, to);
for (list<CinemaKDMs>::const_iterator i = cinema_kdms.begin(); i != cinema_kdms.end(); ++i) {
boost::filesystem::path path = directory;
@@ -181,9 +203,15 @@ write_kdm_zip_files (
}
void
-email_kdms (shared_ptr<Film> film, list<shared_ptr<Screen> > screens, boost::posix_time::ptime from, boost::posix_time::ptime to)
+email_kdms (
+ shared_ptr<Film> film,
+ list<shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime to
+ )
{
- list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, from, to);
+ list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, dcp, from, to);
for (list<CinemaKDMs>::const_iterator i = cinema_kdms.begin(); i != cinema_kdms.end(); ++i) {
diff --git a/src/lib/kdm.h b/src/lib/kdm.h
index f79656b93..5701a8bf8 100644
--- a/src/lib/kdm.h
+++ b/src/lib/kdm.h
@@ -26,6 +26,7 @@ class Film;
extern void write_kdm_files (
boost::shared_ptr<Film> film,
std::list<boost::shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
boost::posix_time::ptime from,
boost::posix_time::ptime to,
boost::filesystem::path directory
@@ -34,6 +35,7 @@ extern void write_kdm_files (
extern void write_kdm_zip_files (
boost::shared_ptr<Film> film,
std::list<boost::shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
boost::posix_time::ptime from,
boost::posix_time::ptime to,
boost::filesystem::path directory
@@ -42,6 +44,7 @@ extern void write_kdm_zip_files (
extern void email_kdms (
boost::shared_ptr<Film> film,
std::list<boost::shared_ptr<Screen> > screens,
+ boost::filesystem::path dcp,
boost::posix_time::ptime from,
boost::posix_time::ptime to
);