Supporter.
[dcpomatic.git] / src / wx / kdm_output_panel.cc
index f9078eac45729a9f249d62996bda5738b61078e3..6cd1af2681e5ba137a1df9e17351387954c68768 100644 (file)
@@ -155,6 +155,54 @@ KDMOutputPanel::make (
        list<ScreenKDM> screen_kdms, string name, KDMTimingPanel* timing, function<bool (boost::filesystem::path)> confirm_overwrite, shared_ptr<Log> log
        )
 {
+       list<CinemaKDMs> const cinema_kdms = CinemaKDMs::collect (screen_kdms);
+
+       /* Decide whether to proceed */
+
+       bool proceed = true;
+
+       if (_email->GetValue ()) {
+
+               if (Config::instance()->mail_server().empty ()) {
+                       proceed = false;
+                       error_dialog (this, _("You must set up a mail server in Preferences before you can send emails."));
+               }
+
+               bool cinemas_with_no_email = false;
+               BOOST_FOREACH (CinemaKDMs i, cinema_kdms) {
+                       if (i.cinema->emails.empty ()) {
+                               cinemas_with_no_email = true;
+                       }
+               }
+
+               if (proceed && cinemas_with_no_email && !confirm_dialog (
+                           this,
+                           _("You have selected some cinemas that have no configured email address.  Do you want to continue?")
+                           )) {
+                       proceed = false;
+               }
+
+               if (proceed && Config::instance()->confirm_kdm_email ()) {
+                       list<string> emails;
+                       BOOST_FOREACH (CinemaKDMs i, cinema_kdms) {
+                               BOOST_FOREACH (string j, i.cinema->emails) {
+                                       emails.push_back (j);
+                               }
+                       }
+
+                       if (!emails.empty ()) {
+                               ConfirmKDMEmailDialog* d = new ConfirmKDMEmailDialog (this, emails);
+                               if (d->ShowModal() == wxID_CANCEL) {
+                                       proceed = false;
+                               }
+                       }
+               }
+       }
+
+       if (!proceed) {
+               return make_pair (shared_ptr<Job>(), 0);
+       }
+
        Config::instance()->set_kdm_filename_format (_filename_format->get ());
 
        int written = 0;
@@ -163,8 +211,8 @@ KDMOutputPanel::make (
        try {
                dcp::NameFormat::Map name_values;
                name_values['f'] = name;
-               name_values['b'] = dcp::LocalTime(timing->from()).date() + " " + dcp::LocalTime(timing->from()).time_of_day();
-               name_values['e'] = dcp::LocalTime(timing->until()).date() + " " + dcp::LocalTime(timing->until()).time_of_day();
+               name_values['b'] = dcp::LocalTime(timing->from()).date() + " " + dcp::LocalTime(timing->from()).time_of_day(false, false);
+               name_values['e'] = dcp::LocalTime(timing->until()).date() + " " + dcp::LocalTime(timing->until()).time_of_day(false, false);
 
                if (_write_to->GetValue()) {
                        if (_write_flat->GetValue()) {
@@ -197,37 +245,18 @@ KDMOutputPanel::make (
                }
 
                if (_email->GetValue ()) {
-
-                       list<CinemaKDMs> const cinema_kdms = CinemaKDMs::collect (screen_kdms);
-
-                       bool ok = true;
-
-                       if (Config::instance()->confirm_kdm_email ()) {
-                               list<string> emails;
-                               BOOST_FOREACH (CinemaKDMs i, cinema_kdms) {
-                                       BOOST_FOREACH (string j, i.cinema->emails) {
-                                               emails.push_back (j);
-                                       }
-                               }
-
-                               ConfirmKDMEmailDialog* d = new ConfirmKDMEmailDialog (this, emails);
-                               if (d->ShowModal() == wxID_CANCEL) {
-                                       ok = false;
-                               }
-                       }
-
-                       if (ok) {
-                               job.reset (
-                                       new SendKDMEmailJob (
-                                               cinema_kdms,
-                                               _filename_format->get(),
-                                               name_values,
-                                               name,
-                                               log
-                                               )
-                                       );
-                       }
+                       job.reset (
+                               new SendKDMEmailJob (
+                                       cinema_kdms,
+                                       _container_name_format->get(),
+                                       _filename_format->get(),
+                                       name_values,
+                                       name,
+                                       log
+                                       )
+                               );
                }
+
        } catch (dcp::NotEncryptedError& e) {
                error_dialog (this, _("CPL's content is not encrypted."));
        } catch (exception& e) {