diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-03-07 10:18:31 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-03-07 10:18:31 +0000 |
| commit | e340b96b4a33725e70e3703b0c60ba8da95bca3b (patch) | |
| tree | bddbe1231a7417f872d19c9bf77e500db45bb0d0 /src/lib | |
| parent | 443a7d74ff2a49ad45a4fb44f92abd619bc0a0b0 (diff) | |
| parent | e4d7f575fab50b6d255821d6d6a8171c8e1f13f6 (diff) | |
Merge.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/cinema_kdms.cc | 54 | ||||
| -rw-r--r-- | src/lib/cinema_kdms.h | 17 | ||||
| -rw-r--r-- | src/lib/config.cc | 3 | ||||
| -rw-r--r-- | src/lib/config.h | 9 |
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; |
