Merge master.
authorCarl Hetherington <cth@carlh.net>
Mon, 23 Jun 2014 00:02:24 +0000 (01:02 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 23 Jun 2014 00:02:24 +0000 (01:02 +0100)
1  2 
ChangeLog
src/lib/config.cc
src/lib/config.h
src/lib/kdm.cc
src/wx/config_dialog.cc

diff --combined ChangeLog
index 2782b563e9eaf5a9178f257c7871fb8a46265932,818daeec2a92997e9a1c0ca8ccb20bdaab6be210..e8978daec22e180af55e5241064a234c25ee5c15
+++ b/ChangeLog
@@@ -1,7 -1,15 +1,19 @@@
 +2014-03-07  Carl Hetherington  <cth@carlh.net>
 +
 +      * Add subtitle view.
 +
+ 2014-06-23  Carl Hetherington  <cth@carlh.net>
+       * Add option to CC a KDM email, and add
+       $SCREENS and $CINEMA_NAME as variables
+       in the email.
+ 2014-06-22  Carl Hetherington  <cth@carlh.net>
+       * Reset-to-default button for KDM email text.
+       * Version 1.69.35 released.
  2014-06-22  Carl Hetherington  <cth@carlh.net>
  
        * Fix large memory leak with image sources.
diff --combined src/lib/config.cc
index a0211386baf224d248543f13848f9fb3aaac58a4,8e6dffee73f51d08a42098bd47adecd539922529..bb1fcd21173655a276055bf0becdcc67527396b5
@@@ -23,8 -23,8 +23,8 @@@
  #include <glib.h>
  #include <boost/filesystem.hpp>
  #include <boost/algorithm/string.hpp>
 -#include <libdcp/colour_matrix.h>
 -#include <libdcp/raw_convert.h>
 +#include <dcp/colour_matrix.h>
 +#include <dcp/raw_convert.h>
  #include <libcxml/cxml.h>
  #include "config.h"
  #include "server.h"
@@@ -50,7 -50,7 +50,7 @@@ using boost::shared_ptr
  using boost::optional;
  using boost::algorithm::is_any_of;
  using boost::algorithm::split;
 -using libdcp::raw_convert;
 +using dcp::raw_convert;
  
  Config* Config::_instance = 0;
  
@@@ -67,9 -67,6 +67,6 @@@ Config::Config (
        , _default_dcp_content_type (DCPContentType::from_isdcf_name ("TST"))
        , _default_j2k_bandwidth (100000000)
        , _default_audio_delay (0)
-       , _kdm_email (
-               _("Dear Projectionist\n\nPlease find attached KDMs for $CPL_NAME.\n\nThe KDMs are valid from $START_TIME until $END_TIME.\n\nBest regards,\nDCP-o-matic")
-               )
        , _check_for_updates (false)
        , _check_for_test_updates (false)
        , _maximum_j2k_bandwidth (250000000)
        _allowed_dcp_frame_rates.push_back (50);
        _allowed_dcp_frame_rates.push_back (60);
  
 -      _colour_conversions.push_back (PresetColourConversion (_("sRGB"), 2.4, true, libdcp::colour_matrix::srgb_to_xyz, 2.6));
 -      _colour_conversions.push_back (PresetColourConversion (_("sRGB non-linearised"), 2.4, false, libdcp::colour_matrix::srgb_to_xyz, 2.6));
 -      _colour_conversions.push_back (PresetColourConversion (_("Rec. 709"), 2.2, false, libdcp::colour_matrix::rec709_to_xyz, 2.6));
 +      _colour_conversions.push_back (PresetColourConversion (_("sRGB"), 2.4, true, dcp::colour_matrix::srgb_to_xyz, 2.6));
 +      _colour_conversions.push_back (PresetColourConversion (_("sRGB non-linearised"), 2.4, false, dcp::colour_matrix::srgb_to_xyz, 2.6));
 +      _colour_conversions.push_back (PresetColourConversion (_("Rec. 709"), 2.2, false, dcp::colour_matrix::rec709_to_xyz, 2.6));
+       reset_kdm_email ();
  }
  
  void
@@@ -171,7 -170,7 +170,7 @@@ Config::read (
                /* Loading version 0 (before Rec. 709 was added as a preset).
                   Add it in.
                */
 -              _colour_conversions.push_back (PresetColourConversion (_("Rec. 709"), 2.2, false, libdcp::colour_matrix::rec709_to_xyz, 2.6));
 +              _colour_conversions.push_back (PresetColourConversion (_("Rec. 709"), 2.2, false, dcp::colour_matrix::rec709_to_xyz, 2.6));
        }
  
        list<cxml::NodePtr> cin = f.node_children ("Cinema");
        _mail_user = f.optional_string_child("MailUser").get_value_or ("");
        _mail_password = f.optional_string_child("MailPassword").get_value_or ("");
        _kdm_from = f.string_child ("KDMFrom");
+       _kdm_cc = f.optional_string_child ("KDMCC").get_value_or ("");
        _kdm_email = f.string_child ("KDMEmail");
  
        _check_for_updates = f.optional_bool_child("CheckForUpdates").get_value_or (false);
@@@ -367,6 -367,7 +367,7 @@@ Config::write () cons
        root->add_child("MailUser")->add_child_text (_mail_user);
        root->add_child("MailPassword")->add_child_text (_mail_password);
        root->add_child("KDMFrom")->add_child_text (_kdm_from);
+       root->add_child("KDMCC")->add_child_text (_kdm_cc);
        root->add_child("KDMEmail")->add_child_text (_kdm_email);
  
        root->add_child("CheckForUpdates")->add_child_text (_check_for_updates ? "1" : "0");
@@@ -408,3 -409,16 +409,16 @@@ Config::changed (
        write ();
        Changed ();
  }
+ void
+ Config::reset_kdm_email ()
+ {
+       _kdm_email = _(
+               "Dear Projectionist\n\n"
+               "Please find attached KDMs for $CPL_NAME.\n\n"
+               "Cinema: $CINEMA_NAME\n"
+               "Screen(s): $SCREENS\n\n"
+               "The KDMs are valid from $START_TIME until $END_TIME.\n\n"
+               "Best regards,\nDCP-o-matic"
+               );
+ }
diff --combined src/lib/config.h
index d82f520469c258f64b80b27d640a507f0503a962,ebcf7e83dd98fa524f839c341e2e4873094c4eac..d9f104c7dec1a9c33cb29b0310ffc6c386367be4
  #include <boost/shared_ptr.hpp>
  #include <boost/signals2.hpp>
  #include <boost/filesystem.hpp>
 -#include <libdcp/metadata.h>
 +#include <dcp/metadata.h>
  #include "isdcf_metadata.h"
  #include "colour_conversion.h"
 -#include "server.h"
  
  class ServerDescription;
  class Scaler;
@@@ -140,7 -141,7 +140,7 @@@ public
                return _default_dcp_content_type;
        }
  
 -      libdcp::XMLMetadata dcp_metadata () const {
 +      dcp::XMLMetadata dcp_metadata () const {
                return _dcp_metadata;
        }
  
                return _kdm_from;
        }
  
+       std::string kdm_cc () const {
+               return _kdm_cc;
+       }
+       
        std::string kdm_email () const {
                return _kdm_email;
        }
                changed ();
        }
  
 -      void set_dcp_metadata (libdcp::XMLMetadata m) {
 +      void set_dcp_metadata (dcp::XMLMetadata m) {
                _dcp_metadata = m;
                changed ();
        }
                changed ();
        }
  
+       void set_kdm_cc (std::string f) {
+               _kdm_cc = f;
+               changed ();
+       }
+       
        void set_kdm_email (std::string e) {
                _kdm_email = e;
                changed ();
        }
  
+       void reset_kdm_email ();
        void set_check_for_updates (bool c) {
                _check_for_updates = c;
                changed ();
@@@ -394,7 -406,7 +405,7 @@@ private
        int _default_still_length;
        Ratio const * _default_container;
        DCPContentType const * _default_dcp_content_type;
 -      libdcp::XMLMetadata _dcp_metadata;
 +      dcp::XMLMetadata _dcp_metadata;
        int _default_j2k_bandwidth;
        int _default_audio_delay;
        std::vector<PresetColourConversion> _colour_conversions;
        std::string _mail_user;
        std::string _mail_password;
        std::string _kdm_from;
+       std::string _kdm_cc;
        std::string _kdm_email;
        /** true to check for updates on startup */
        bool _check_for_updates;
diff --combined src/lib/kdm.cc
index c08750961e2c7c77245191e8e99f2b97daf5d875,5efea089c1053661d8ad86b6724889886bc58d30..5754fd469f3be91f44a00590932ef36a98280d7d
@@@ -21,7 -21,7 +21,7 @@@
  #include <boost/shared_ptr.hpp>
  #include <quickmail.h>
  #include <zip.h>
 -#include <libdcp/kdm.h>
 +#include <dcp/encrypted_kdm.h>
  #include "kdm.h"
  #include "cinema.h"
  #include "exceptions.h"
  using std::list;
  using std::string;
  using std::stringstream;
+ using std::cout;
  using boost::shared_ptr;
  
  struct ScreenKDM
  {
 -      ScreenKDM (shared_ptr<Screen> s, libdcp::KDM k)
 +      ScreenKDM (shared_ptr<Screen> s, dcp::EncryptedKDM k)
                : screen (s)
                , kdm (k)
        {}
        
        shared_ptr<Screen> screen;
 -      libdcp::KDM kdm;
 +      dcp::EncryptedKDM kdm;
  };
  
  static string
@@@ -103,16 -104,16 +104,16 @@@ make_screen_kdms 
        shared_ptr<const Film> film,
        list<shared_ptr<Screen> > screens,
        boost::filesystem::path cpl,
 -      boost::posix_time::ptime from,
 -      boost::posix_time::ptime to
 +      dcp::LocalTime from,
 +      dcp::LocalTime to
        )
  {
 -      list<libdcp::KDM> kdms = film->make_kdms (screens, cpl, from, to);
 +      list<dcp::EncryptedKDM> kdms = film->make_kdms (screens, cpl, from, to);
           
        list<ScreenKDM> screen_kdms;
        
        list<shared_ptr<Screen> >::iterator i = screens.begin ();
 -      list<libdcp::KDM>::iterator j = kdms.begin ();
 +      list<dcp::EncryptedKDM>::iterator j = kdms.begin ();
        while (i != screens.end() && j != kdms.end ()) {
                screen_kdms.push_back (ScreenKDM (*i, *j));
                ++i;
@@@ -127,8 -128,8 +128,8 @@@ make_cinema_kdms 
        shared_ptr<const Film> film,
        list<shared_ptr<Screen> > screens,
        boost::filesystem::path cpl,
 -      boost::posix_time::ptime from,
 -      boost::posix_time::ptime to
 +      dcp::LocalTime from,
 +      dcp::LocalTime to
        )
  {
        list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, cpl, from, to);
@@@ -172,8 -173,8 +173,8 @@@ write_kdm_files 
        shared_ptr<const Film> film,
        list<shared_ptr<Screen> > screens,
        boost::filesystem::path cpl,
 -      boost::posix_time::ptime from,
 -      boost::posix_time::ptime to,
 +      dcp::LocalTime from,
 +      dcp::LocalTime to,
        boost::filesystem::path directory
        )
  {
@@@ -192,8 -193,8 +193,8 @@@ write_kdm_zip_files 
        shared_ptr<const Film> film,
        list<shared_ptr<Screen> > screens,
        boost::filesystem::path cpl,
 -      boost::posix_time::ptime from,
 -      boost::posix_time::ptime to,
 +      dcp::LocalTime from,
 +      dcp::LocalTime to,
        boost::filesystem::path directory
        )
  {
@@@ -211,8 -212,8 +212,8 @@@ email_kdms 
        shared_ptr<const Film> film,
        list<shared_ptr<Screen> > screens,
        boost::filesystem::path cpl,
 -      boost::posix_time::ptime from,
 -      boost::posix_time::ptime to
 +      dcp::LocalTime from,
 +      dcp::LocalTime to
        )
  {
        list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, cpl, from, to);
                quickmail_initialize ();
                quickmail mail = quickmail_create (Config::instance()->kdm_from().c_str(), "KDM delivery");
                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 ());
+               }
                string body = Config::instance()->kdm_email().c_str();
                boost::algorithm::replace_all (body, "$CPL_NAME", film->dcp_name ());
                stringstream start;
                stringstream end;
                end << to.date() << " " << to.time_of_day();
                boost::algorithm::replace_all (body, "$END_TIME", end.str ());
+               boost::algorithm::replace_all (body, "$CINEMA_NAME", i->cinema->name);
+               stringstream screens;
+               for (list<ScreenKDM>::const_iterator j = i->screen_kdms.begin(); j != i->screen_kdms.end(); ++j) {
+                       screens << j->screen->name << ", ";
+               }
+               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");
diff --combined src/wx/config_dialog.cc
index 94ab0597b4239b463ce4f79bfb1925a7ebc3c939,086e1be4ec7e85ab8ef8f0888780cea4aec0f6f6..b25b470c1334ff920b95672eb6cdb2e8c66371f1
  #include <wx/preferences.h>
  #include <wx/filepicker.h>
  #include <wx/spinctrl.h>
 -#include <libdcp/colour_matrix.h>
 +#include <dcp/colour_matrix.h>
  #include "lib/config.h"
  #include "lib/ratio.h"
  #include "lib/scaler.h"
  #include "lib/filter.h"
  #include "lib/dcp_content_type.h"
  #include "lib/colour_conversion.h"
 +#include "lib/log.h"
  #include "config_dialog.h"
  #include "wx_util.h"
  #include "editable_list.h"
@@@ -396,14 -395,14 +396,14 @@@ private
  
        void issuer_changed ()
        {
 -              libdcp::XMLMetadata m = Config::instance()->dcp_metadata ();
 +              dcp::XMLMetadata m = Config::instance()->dcp_metadata ();
                m.issuer = wx_to_std (_issuer->GetValue ());
                Config::instance()->set_dcp_metadata (m);
        }
        
        void creator_changed ()
        {
 -              libdcp::XMLMetadata m = Config::instance()->dcp_metadata ();
 +              dcp::XMLMetadata m = Config::instance()->dcp_metadata ();
                m.creator = wx_to_std (_creator->GetValue ());
                Config::instance()->set_dcp_metadata (m);
        }
@@@ -650,7 -649,7 +650,7 @@@ public
  
                wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
                table->AddGrowableCol (1, 1);
-               s->Add (table, 1, wxTOP | wxLEFT | wxRIGHT | wxEXPAND, _border);
+               s->Add (table, 1, wxEXPAND | wxALL, _border);
  
                add_label_to_sizer (table, panel, _("Outgoing mail server"), true);
                _mail_server = new wxTextCtrl (panel, wxID_ANY);
                add_label_to_sizer (table, panel, _("From address"), true);
                _kdm_from = new wxTextCtrl (panel, wxID_ANY);
                table->Add (_kdm_from, 1, wxEXPAND | wxALL);
+               add_label_to_sizer (table, panel, _("CC address"), true);
+               _kdm_cc = new wxTextCtrl (panel, wxID_ANY);
+               table->Add (_kdm_cc, 1, wxEXPAND | wxALL);
                
                _kdm_email = new wxTextCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (480, 128), wxTE_MULTILINE);
-               s->Add (_kdm_email, 1.5, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, _border);
+               s->Add (_kdm_email, 1.5, wxEXPAND | wxALL, _border);
+               _reset_kdm_email = new wxButton (panel, wxID_ANY, _("Reset to default text"));
+               s->Add (_reset_kdm_email, 0, wxEXPAND | wxALL, _border);
  
                Config* config = Config::instance ();
                _mail_server->SetValue (std_to_wx (config->mail_server ()));
                _mail_password->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::mail_password_changed, this));
                _kdm_from->SetValue (std_to_wx (config->kdm_from ()));
                _kdm_from->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_from_changed, this));
+               _kdm_cc->SetValue (std_to_wx (config->kdm_cc ()));
+               _kdm_cc->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_cc_changed, this));
                _kdm_email->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_email_changed, this));
                _kdm_email->SetValue (wx_to_std (Config::instance()->kdm_email ()));
+               _reset_kdm_email->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMEmailPage::reset_kdm_email, this));
  
                return panel;
        }
@@@ -714,16 -723,29 +724,29 @@@ private
                Config::instance()->set_kdm_from (wx_to_std (_kdm_from->GetValue ()));
        }
  
+       void kdm_cc_changed ()
+       {
+               Config::instance()->set_kdm_cc (wx_to_std (_kdm_cc->GetValue ()));
+       }
+       
        void kdm_email_changed ()
        {
                Config::instance()->set_kdm_email (wx_to_std (_kdm_email->GetValue ()));
        }
  
+       void reset_kdm_email ()
+       {
+               Config::instance()->reset_kdm_email ();
+               _kdm_email->SetValue (wx_to_std (Config::instance()->kdm_email ()));
+       }
        wxTextCtrl* _mail_server;
        wxTextCtrl* _mail_user;
        wxTextCtrl* _mail_password;
        wxTextCtrl* _kdm_from;
+       wxTextCtrl* _kdm_cc;
        wxTextCtrl* _kdm_email;
+       wxButton* _reset_kdm_email;
  };
  
  class AdvancedPage : public wxStockPreferencesPage, public Page