X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fkdm.cc;h=00d2f053781246e9631d7785ba3739e56de46a9c;hb=a79d78d8bb6d51f6662f1f63b9f8fd19e1a0c5f1;hp=3503306e74060c181d93dfb2abd73e81a851c522;hpb=acb1ace5884337757102bc05074b6b37f04c49cd;p=dcpomatic.git diff --git a/src/lib/kdm.cc b/src/lib/kdm.cc index 3503306e7..00d2f0537 100644 --- a/src/lib/kdm.cc +++ b/src/lib/kdm.cc @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "kdm.h" #include "cinema.h" #include "exceptions.h" @@ -31,25 +31,32 @@ using std::list; using std::string; +using std::stringstream; using boost::shared_ptr; struct ScreenKDM { - ScreenKDM (shared_ptr s, libdcp::KDM k) + ScreenKDM (shared_ptr s, dcp::KDM k) : screen (s) , kdm (k) {} shared_ptr screen; - libdcp::KDM kdm; + dcp::KDM kdm; }; +static string +kdm_filename (shared_ptr film, ScreenKDM kdm) +{ + return tidy_for_filename (film->name()) + "_" + tidy_for_filename (kdm.screen->cinema->name) + "_" + tidy_for_filename (kdm.screen->name) + ".kdm.xml"; +} + struct CinemaKDMs { shared_ptr cinema; list screen_kdms; - void make_zip_file (boost::filesystem::path zip_file) const + void make_zip_file (shared_ptr film, boost::filesystem::path zip_file) const { int error; struct zip* zip = zip_open (zip_file.string().c_str(), ZIP_CREATE | ZIP_EXCL, &error); @@ -71,10 +78,7 @@ struct CinemaKDMs throw StringError ("could not create ZIP source"); } - string const name = tidy_for_filename (i->screen->cinema->name) + "_" + - tidy_for_filename (i->screen->name) + ".kdm.xml"; - - if (zip_add (zip, name.c_str(), source) == -1) { + if (zip_add (zip, kdm_filename (film, *i).c_str(), source) == -1) { throw StringError ("failed to add KDM to ZIP archive"); } } @@ -95,14 +99,20 @@ operator== (ScreenKDM const & a, ScreenKDM const & b) } static list -make_screen_kdms (shared_ptr film, list > screens, boost::posix_time::ptime from, boost::posix_time::ptime to) +make_screen_kdms ( + shared_ptr film, + list > screens, + boost::filesystem::path dcp, + boost::posix_time::ptime from, + boost::posix_time::ptime to + ) { - list kdms = film->make_kdms (screens, from, to); + list kdms = film->make_kdms (screens, dcp, from, to); list screen_kdms; list >::iterator i = screens.begin (); - list::iterator j = kdms.begin (); + list::iterator j = kdms.begin (); while (i != screens.end() && j != kdms.end ()) { screen_kdms.push_back (ScreenKDM (*i, *j)); ++i; @@ -113,9 +123,15 @@ make_screen_kdms (shared_ptr film, list > screens, boos } static list -make_cinema_kdms (shared_ptr film, list > screens, boost::posix_time::ptime from, boost::posix_time::ptime to) +make_cinema_kdms ( + shared_ptr film, + list > screens, + boost::filesystem::path dcp, + boost::posix_time::ptime from, + boost::posix_time::ptime to + ) { - list screen_kdms = make_screen_kdms (film, screens, from, to); + list screen_kdms = make_screen_kdms (film, screens, dcp, from, to); list cinema_kdms; while (!screen_kdms.empty ()) { @@ -150,43 +166,59 @@ make_cinema_kdms (shared_ptr film, list > screens, boos void write_kdm_files ( - shared_ptr film, list > screens, boost::posix_time::ptime from, boost::posix_time::ptime to, boost::filesystem::path directory + shared_ptr film, + list > screens, + boost::filesystem::path dcp, + boost::posix_time::ptime from, + boost::posix_time::ptime to, + boost::filesystem::path directory ) { - list screen_kdms = make_screen_kdms (film, screens, from, to); + list screen_kdms = make_screen_kdms (film, screens, dcp, from, to); /* Write KDMs to the specified directory */ for (list::iterator i = screen_kdms.begin(); i != screen_kdms.end(); ++i) { boost::filesystem::path out = directory; - out /= tidy_for_filename (i->screen->cinema->name) + "_" + tidy_for_filename (i->screen->name) + ".kdm.xml"; + out /= kdm_filename (film, *i); i->kdm.as_xml (out); } } void write_kdm_zip_files ( - shared_ptr film, list > screens, boost::posix_time::ptime from, boost::posix_time::ptime to, boost::filesystem::path directory + shared_ptr film, + list > screens, + boost::filesystem::path dcp, + boost::posix_time::ptime from, + boost::posix_time::ptime to, + boost::filesystem::path directory ) { - list cinema_kdms = make_cinema_kdms (film, screens, from, to); + list cinema_kdms = make_cinema_kdms (film, screens, dcp, from, to); for (list::const_iterator i = cinema_kdms.begin(); i != cinema_kdms.end(); ++i) { boost::filesystem::path path = directory; path /= tidy_for_filename (i->cinema->name) + ".zip"; - i->make_zip_file (path); + i->make_zip_file (film, path); } } void -email_kdms (shared_ptr film, list > screens, boost::posix_time::ptime from, boost::posix_time::ptime to) +email_kdms ( + shared_ptr film, + list > screens, + boost::filesystem::path dcp, + boost::posix_time::ptime from, + boost::posix_time::ptime to + ) { - list cinema_kdms = make_cinema_kdms (film, screens, from, to); + list cinema_kdms = make_cinema_kdms (film, screens, dcp, from, to); for (list::const_iterator i = cinema_kdms.begin(); i != cinema_kdms.end(); ++i) { boost::filesystem::path zip_file = boost::filesystem::temp_directory_path (); zip_file /= boost::filesystem::unique_path().string() + ".zip"; - i->make_zip_file (zip_file); + i->make_zip_file (film, zip_file); /* Send email */ @@ -195,14 +227,30 @@ email_kdms (shared_ptr film, list > screens, boost::pos quickmail_add_to (mail, i->cinema->email.c_str ()); string body = Config::instance()->kdm_email().c_str(); - boost::algorithm::replace_all (body, "$DCP_NAME", film->dcp_name ()); - + boost::algorithm::replace_all (body, "$CPL_NAME", film->dcp_name ()); + stringstream start; + start << from.date() << " " << from.time_of_day(); + boost::algorithm::replace_all (body, "$START_TIME", start.str ()); + stringstream end; + end << to.date() << " " << to.time_of_day(); + boost::algorithm::replace_all (body, "$END_TIME", end.str ()); + quickmail_set_body (mail, body.c_str()); - quickmail_add_attachment_file (mail, zip_file.string().c_str()); - char const* error = quickmail_send (mail, Config::instance()->mail_server().c_str(), 25, "", ""); + quickmail_add_attachment_file (mail, zip_file.string().c_str(), "application/zip"); + + int const port = Config::instance()->mail_user().empty() ? 25 : 587; + + char const* error = quickmail_send ( + mail, + Config::instance()->mail_server().c_str(), + port, + Config::instance()->mail_user().c_str(), + Config::instance()->mail_password().c_str() + ); + if (error) { quickmail_destroy (mail); - throw StringError (String::compose ("Failed to send KDM email (%1)", error)); + throw KDMError (String::compose ("Failed to send KDM email (%1)", error)); } quickmail_destroy (mail); }