*/
-#include "quickmail.h"
#include "exceptions.h"
#include "cinema_kdms.h"
#include "cinema.h"
#include "screen.h"
#include "config.h"
#include "util.h"
+#include "emailer.h"
#include "compose.hpp"
+#include "log.h"
#include <zip.h>
#include <boost/foreach.hpp>
+#include "i18n.h"
+
using std::list;
+using std::cout;
using std::string;
using boost::shared_ptr;
-/** @param filename_first_part First part of name of KDM files inside the zip file
- * (perhaps the name of the film).
- */
void
-CinemaKDMs::make_zip_file (string filename_first_part, boost::filesystem::path zip_file) const
+CinemaKDMs::make_zip_file (string film_name, boost::filesystem::path zip_file) const
{
int error;
struct zip* zip = zip_open (zip_file.string().c_str(), ZIP_CREATE | ZIP_EXCL, &error);
throw StringError ("could not create ZIP source");
}
- if (zip_add (zip, i.filename(filename_first_part).c_str(), source) == -1) {
+ if (zip_add (zip, i.filename(film_name).c_str(), source) == -1) {
throw StringError ("failed to add KDM to ZIP archive");
}
}
}
void
-CinemaKDMs::write_zip_files (string filename_first_part, list<CinemaKDMs> cinema_kdms, boost::filesystem::path directory)
+CinemaKDMs::write_zip_files (string film_name, list<CinemaKDMs> cinema_kdms, boost::filesystem::path directory)
{
BOOST_FOREACH (CinemaKDMs const & i, cinema_kdms) {
boost::filesystem::path path = directory;
path /= tidy_for_filename (i.cinema->name) + ".zip";
- i.make_zip_file (filename_first_part, path);
+ i.make_zip_file (film_name, path);
}
}
+/** @param log Log to write email session transcript to, or 0 */
/* XXX: should probably get from/to from the KDMs themselves */
void
-CinemaKDMs::email (string filename_first_part, string cpl_name, list<CinemaKDMs> cinema_kdms, dcp::LocalTime from, dcp::LocalTime to)
+CinemaKDMs::email (
+ string film_name, string cpl_name, list<CinemaKDMs> cinema_kdms, dcp::LocalTime from, dcp::LocalTime to, shared_ptr<Job> job, shared_ptr<Log> log
+ )
{
+ Config* config = Config::instance ();
+
BOOST_FOREACH (CinemaKDMs const & i, cinema_kdms) {
boost::filesystem::path zip_file = boost::filesystem::temp_directory_path ();
zip_file /= boost::filesystem::unique_path().string() + ".zip";
- i.make_zip_file (filename_first_part, zip_file);
-
- /* Send email */
-
- quickmail_initialize ();
+ i.make_zip_file (film_name, zip_file);
+ string subject = config->kdm_subject();
SafeStringStream start;
start << from.date() << " " << from.time_of_day();
SafeStringStream end;
end << to.date() << " " << to.time_of_day();
-
- string subject = Config::instance()->kdm_subject();
boost::algorithm::replace_all (subject, "$CPL_NAME", cpl_name);
boost::algorithm::replace_all (subject, "$START_TIME", start.str ());
boost::algorithm::replace_all (subject, "$END_TIME", end.str ());
boost::algorithm::replace_all (subject, "$CINEMA_NAME", i.cinema->name);
- quickmail mail = quickmail_create (Config::instance()->kdm_from().c_str(), subject.c_str ());
- quickmail_add_to (mail, i.cinema->email.c_str ());
- if (!Config::instance()->kdm_cc().empty ()) {
- quickmail_add_cc (mail, Config::instance()->kdm_cc().c_str ());
- }
- if (!Config::instance()->kdm_bcc().empty ()) {
- quickmail_add_bcc (mail, Config::instance()->kdm_bcc().c_str ());
- }
-
- string body = Config::instance()->kdm_email().c_str();
+ string body = config->kdm_email().c_str();
boost::algorithm::replace_all (body, "$CPL_NAME", cpl_name);
boost::algorithm::replace_all (body, "$START_TIME", start.str ());
boost::algorithm::replace_all (body, "$END_TIME", end.str ());
}
boost::algorithm::replace_all (body, "$SCREENS", screens.str().substr (0, screens.str().length() - 2));
- quickmail_set_body (mail, body.c_str());
- quickmail_add_attachment_file (mail, zip_file.string().c_str(), "application/zip");
-
- char const* error = quickmail_send (
- mail,
- Config::instance()->mail_server().c_str(),
- Config::instance()->mail_port(),
- Config::instance()->mail_user().c_str(),
- Config::instance()->mail_password().c_str()
- );
-
- if (error) {
- quickmail_destroy (mail);
- throw KDMError (
- String::compose (
- "Failed to send KDM email to %1 (%2)",
- Config::instance()->mail_server(),
- error
- )
- );
+ Emailer email (config->kdm_from(), i.cinema->email, subject, body);
+
+ if (!config->kdm_cc().empty ()) {
+ email.add_cc (config->kdm_cc ());
+ }
+ if (!config->kdm_bcc().empty ()) {
+ email.add_bcc (config->kdm_bcc ());
+ }
+
+ string const name = tidy_for_filename(i.cinema->name) + "_" + tidy_for_filename(film_name) + ".zip";
+ email.add_attachment (zip_file, name, "application/zip");
+ email.send (job);
+
+ if (log) {
+ log->log (email.notes(), LogEntry::TYPE_DEBUG_EMAIL);
}
- quickmail_destroy (mail);
}
}