summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-03-07 10:18:31 +0000
committerCarl Hetherington <cth@carlh.net>2017-03-07 10:18:31 +0000
commite340b96b4a33725e70e3703b0c60ba8da95bca3b (patch)
treebddbe1231a7417f872d19c9bf77e500db45bb0d0 /src/lib
parent443a7d74ff2a49ad45a4fb44f92abd619bc0a0b0 (diff)
parente4d7f575fab50b6d255821d6d6a8171c8e1f13f6 (diff)
Merge.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/cinema_kdms.cc54
-rw-r--r--src/lib/cinema_kdms.h17
-rw-r--r--src/lib/config.cc3
-rw-r--r--src/lib/config.h9
4 files changed, 75 insertions, 8 deletions
diff --git a/src/lib/cinema_kdms.cc b/src/lib/cinema_kdms.cc
index e82a987e8..8cac65f41 100644
--- a/src/lib/cinema_kdms.cc
+++ b/src/lib/cinema_kdms.cc
@@ -37,6 +37,7 @@ using std::cout;
using std::string;
using std::runtime_error;
using boost::shared_ptr;
+using boost::function;
void
CinemaKDMs::make_zip_file (boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values) const
@@ -113,24 +114,67 @@ CinemaKDMs::collect (list<ScreenKDM> screen_kdms)
return cinema_kdms;
}
+/** Write one directory per cinema into another directory */
+int
+CinemaKDMs::write_directories (
+ list<CinemaKDMs> cinema_kdms,
+ boost::filesystem::path directory,
+ dcp::NameFormat container_name_format,
+ dcp::NameFormat filename_format,
+ dcp::NameFormat::Map name_values,
+ function<bool (boost::filesystem::path)> confirm_overwrite
+ )
+{
+ /* No specific screen */
+ name_values['s'] = "";
+
+ int written = 0;
+
+ BOOST_FOREACH (CinemaKDMs const & i, cinema_kdms) {
+ boost::filesystem::path path = directory;
+ name_values['c'] = i.cinema->name;
+ path /= container_name_format.get(name_values, "");
+ if (!boost::filesystem::exists (path) || confirm_overwrite (path)) {
+ boost::filesystem::create_directories (path);
+ ScreenKDM::write_files (i.screen_kdms, path, filename_format, name_values, confirm_overwrite);
+ }
+ written += i.screen_kdms.size();
+ }
+
+ return written;
+}
+
/** Write one ZIP file per cinema into a directory */
-void
+int
CinemaKDMs::write_zip_files (
list<CinemaKDMs> cinema_kdms,
boost::filesystem::path directory,
- dcp::NameFormat name_format,
- dcp::NameFormat::Map name_values
+ dcp::NameFormat container_name_format,
+ dcp::NameFormat filename_format,
+ dcp::NameFormat::Map name_values,
+ function<bool (boost::filesystem::path)> confirm_overwrite
)
{
/* No specific screen */
name_values['s'] = "";
+ int written = 0;
+
BOOST_FOREACH (CinemaKDMs const & i, cinema_kdms) {
boost::filesystem::path path = directory;
name_values['c'] = i.cinema->name;
- path /= name_format.get(name_values, ".zip");
- i.make_zip_file (path, name_format, name_values);
+ path /= container_name_format.get(name_values, ".zip");
+ if (!boost::filesystem::exists (path) || confirm_overwrite (path)) {
+ if (boost::filesystem::exists (path)) {
+ /* Creating a new zip file over an existing one is an error */
+ boost::filesystem::remove (path);
+ }
+ i.make_zip_file (path, filename_format, name_values);
+ written += i.screen_kdms.size();
+ }
}
+
+ return written;
}
/** Email one ZIP file per cinema to the cinema.
diff --git a/src/lib/cinema_kdms.h b/src/lib/cinema_kdms.h
index e29fa5cbd..98cb84541 100644
--- a/src/lib/cinema_kdms.h
+++ b/src/lib/cinema_kdms.h
@@ -31,11 +31,22 @@ public:
static std::list<CinemaKDMs> collect (std::list<ScreenKDM> kdms);
- static void write_zip_files (
+ static int write_directories (
std::list<CinemaKDMs> cinema_kdms,
boost::filesystem::path directory,
- dcp::NameFormat name_format,
- dcp::NameFormat::Map name_values
+ dcp::NameFormat container_name_format,
+ dcp::NameFormat filename_format,
+ dcp::NameFormat::Map name_values,
+ boost::function<bool (boost::filesystem::path)> confirm_overwrite
+ );
+
+ static int write_zip_files (
+ std::list<CinemaKDMs> cinema_kdms,
+ boost::filesystem::path directory,
+ dcp::NameFormat container_name_format,
+ dcp::NameFormat filename_format,
+ dcp::NameFormat::Map name_values,
+ boost::function<bool (boost::filesystem::path)> confirm_overwrite
);
static void email (
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 6a08125cf..f41d40e09 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -111,6 +111,7 @@ Config::set_defaults ()
_cinemas_file = path ("cinemas.xml");
_show_hints_before_make_dcp = true;
_confirm_kdm_email = true;
+ _kdm_container_name_format = dcp::NameFormat ("KDM %f %c");
_kdm_filename_format = dcp::NameFormat ("KDM %f %c %s");
_dcp_metadata_filename_format = dcp::NameFormat ("%t");
_dcp_asset_filename_format = dcp::NameFormat ("%t");
@@ -302,6 +303,7 @@ try
_cinemas_file = f.optional_string_child("CinemasFile").get_value_or (path ("cinemas.xml").string ());
_show_hints_before_make_dcp = f.optional_bool_child("ShowHintsBeforeMakeDCP").get_value_or (true);
_confirm_kdm_email = f.optional_bool_child("ConfirmKDMEmail").get_value_or (true);
+ _kdm_container_name_format = dcp::NameFormat (f.optional_string_child("KDMContainerNameFormat").get_value_or ("KDM %f %c"));
_kdm_filename_format = dcp::NameFormat (f.optional_string_child("KDMFilenameFormat").get_value_or ("KDM %f %c %s"));
_dcp_metadata_filename_format = dcp::NameFormat (f.optional_string_child("DCPMetadataFilenameFormat").get_value_or ("%t"));
_dcp_asset_filename_format = dcp::NameFormat (f.optional_string_child("DCPAssetFilenameFormat").get_value_or ("%t"));
@@ -469,6 +471,7 @@ Config::write_config () const
root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0");
root->add_child("ConfirmKDMEmail")->add_child_text (_confirm_kdm_email ? "1" : "0");
root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ());
+ root->add_child("KDMContainerNameFormat")->add_child_text (_kdm_container_name_format.specification ());
root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ());
root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ());
diff --git a/src/lib/config.h b/src/lib/config.h
index 1bdbcb96e..c02b12eb5 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -286,6 +286,10 @@ public:
return _confirm_kdm_email;
}
+ dcp::NameFormat kdm_container_name_format () const {
+ return _kdm_container_name_format;
+ }
+
dcp::NameFormat kdm_filename_format () const {
return _kdm_filename_format;
}
@@ -513,6 +517,10 @@ public:
maybe_set (_confirm_kdm_email, s);
}
+ void set_kdm_container_name_format (dcp::NameFormat n) {
+ maybe_set (_kdm_container_name_format, n);
+ }
+
void set_kdm_filename_format (dcp::NameFormat n) {
maybe_set (_kdm_filename_format, n);
}
@@ -650,6 +658,7 @@ private:
bool _show_hints_before_make_dcp;
bool _confirm_kdm_email;
dcp::NameFormat _kdm_filename_format;
+ dcp::NameFormat _kdm_container_name_format;
dcp::NameFormat _dcp_metadata_filename_format;
dcp::NameFormat _dcp_asset_filename_format;