Ignore empty KDM email addresses (#818).
authorCarl Hetherington <cth@carlh.net>
Sun, 13 Mar 2016 02:48:32 +0000 (02:48 +0000)
committerCarl Hetherington <cth@carlh.net>
Sun, 13 Mar 2016 02:48:32 +0000 (02:48 +0000)
ChangeLog
src/lib/util.cc
src/lib/util.h
src/tools/dcpomatic_kdm.cc
src/wx/cinema_dialog.cc
src/wx/config_dialog.cc
src/wx/editable_list.cc [new file with mode: 0644]
src/wx/editable_list.h
src/wx/screen_dialog.cc
src/wx/wscript

index 0aa5b155adb6c2757b14a30c14214e3d22a6264e..0b6c9c4321c9df8bd1fe4689af37c63fd1ade0d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2016-03-13  Carl Hetherington  <cth@carlh.net>
 
+       * Ignore empty email addresses for KDMs (#818).
+
        * Fix crash when using non-English decimal separators
        in the audio gain calculator dialogue (#824).
 
index 61c9dac068479ca179f6d2935609e77a6e2bfc19..6f366257cf7556648d6401f20a00262d604fc319 100644 (file)
@@ -636,3 +636,9 @@ relaxed_string_to_float (string s)
                return lexical_cast<float> (s);
        }
 }
+
+bool
+string_not_empty (string s)
+{
+       return !s.empty ();
+}
index 640933f00e573c9e08ccfa155fdf933de721b069..142b21e963938c182e030f3f51647d39a2f0e2aa 100644 (file)
@@ -75,5 +75,6 @@ extern std::map<std::string, std::string> split_get_request (std::string url);
 extern std::string video_asset_filename (boost::shared_ptr<dcp::PictureAsset> asset);
 extern std::string audio_asset_filename (boost::shared_ptr<dcp::SoundAsset> asset);
 extern float relaxed_string_to_float (std::string);
+extern bool string_not_empty (std::string);
 
 #endif
index b98ec84a9aa939cf165c84bd1283afc8aad10e56..6c3103da2219d5f6b9831aeb4fdceddad6be8a67 100644 (file)
@@ -146,7 +146,7 @@ public:
                vector<string> columns;
                columns.push_back (wx_to_std (_("CPL")));
                _dkdm = new EditableList<dcp::EncryptedKDM, KDMFileDialogWrapper> (
-                       overall_panel, columns, bind (&DOMFrame::dkdms, this), bind (&DOMFrame::set_dkdms, this, _1), bind (&column, _1), false
+                       overall_panel, columns, bind (&DOMFrame::dkdms, this), bind (&DOMFrame::set_dkdms, this, _1), bind (&always_valid), bind (&column, _1), false
                        );
                vertical->Add (_dkdm, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_Y_GAP);
 
index 6fb4acc6b5f8465851731fa7b997f9a94828acfc..c0b7b5242837947da86d3c682b36d331abc66a1b 100644 (file)
@@ -20,6 +20,7 @@
 #include "cinema_dialog.h"
 #include "wx_util.h"
 #include "lib/dcpomatic_assert.h"
+#include "lib/util.h"
 #include <boost/foreach.hpp>
 
 using std::string;
@@ -63,7 +64,7 @@ CinemaDialog::CinemaDialog (wxWindow* parent, string title, string name, list<st
        vector<string> columns;
        columns.push_back (wx_to_std (_("Address")));
        _email_list = new EditableList<string, EmailDialog> (
-               this, columns, bind (&CinemaDialog::get_emails, this), bind (&CinemaDialog::set_emails, this, _1), bind (&column, _1)
+               this, columns, bind (&CinemaDialog::get_emails, this), bind (&CinemaDialog::set_emails, this, _1), bind (&string_not_empty, _1), bind (&column, _1)
                );
 
        sizer->Add (_email_list, wxGBPosition (r, 0), wxGBSpan (1, 2), wxEXPAND);
index 7e70326dcaa874eba764371acddde8307fef06b3..50d806f35ea7955868fe8d22c05e85ccccad0dc1 100644 (file)
@@ -639,6 +639,7 @@ private:
                        columns,
                        boost::bind (&Config::servers, Config::instance()),
                        boost::bind (&Config::set_servers, Config::instance(), _1),
+                       boost::bind (&always_valid),
                        boost::bind (&EncodingServersPage::server_column, this, _1)
                        );
 
@@ -1251,7 +1252,12 @@ private:
                columns.push_back (wx_to_std (_("Address")));
                add_label_to_sizer (table, _panel, _("CC addresses"), true);
                _kdm_cc = new EditableList<string, EmailDialog> (
-                       _panel, columns, bind (&Config::kdm_cc, Config::instance()), bind (&Config::set_kdm_cc, Config::instance(), _1), bind (&column, _1)
+                       _panel,
+                       columns,
+                       bind (&Config::kdm_cc, Config::instance()),
+                       bind (&Config::set_kdm_cc, Config::instance(), _1),
+                       bind (&string_not_empty, _1),
+                       bind (&column, _1)
                        );
                table->Add (_kdm_cc, 1, wxEXPAND | wxALL);
 
diff --git a/src/wx/editable_list.cc b/src/wx/editable_list.cc
new file mode 100644 (file)
index 0000000..28017e0
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+    Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+bool
+always_valid ()
+{
+       return true;
+}
index 47eb254e97f779c11f6538f2d9906cd6760ebc76..b756a408b9207f3b3b73b246f4e236f27809d40b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -26,6 +26,8 @@
 #include <boost/function.hpp>
 #include <vector>
 
+bool always_valid ();
+
 /** @param T type of things being edited.
  *  @param S dialog to edit a thing.
  */
@@ -38,6 +40,7 @@ public:
                std::vector<std::string> columns,
                boost::function<std::vector<T> ()> get,
                boost::function<void (std::vector<T>)> set,
+               boost::function<bool (T)> valid,
                boost::function<std::string (T, int)> column,
                bool can_edit = true,
                bool title = true
@@ -45,6 +48,7 @@ public:
                : wxPanel (parent)
                , _get (get)
                , _set (set)
+               , _valid (valid)
                , _columns (columns.size ())
                , _column (column)
                , _edit (0)
@@ -158,10 +162,13 @@ private:
                S* dialog = new S (this);
 
                if (dialog->ShowModal() == wxID_OK) {
-                       add_to_control (dialog->get ());
-                       std::vector<T> all = _get ();
-                       all.push_back (dialog->get ());
-                       _set (all);
+                       T const v = dialog->get ();
+                       if (_valid (v)) {
+                               add_to_control (v);
+                               std::vector<T> all = _get ();
+                               all.push_back (v);
+                               _set (all);
+                       }
                }
 
                dialog->Destroy ();
@@ -180,7 +187,12 @@ private:
                S* dialog = new S (this);
                dialog->set (all[item]);
                if (dialog->ShowModal() == wxID_OK) {
-                       all[item] = dialog->get ();
+                       T const v = dialog->get ();
+                       if (!_valid (v)) {
+                               return;
+                       }
+
+                       all[item] = v;
                }
                dialog->Destroy ();
 
@@ -217,6 +229,7 @@ private:
 
        boost::function <std::vector<T> ()> _get;
        boost::function <void (std::vector<T>)> _set;
+       boost::function <bool (T)> _valid;
        int _columns;
        boost::function<std::string (T, int)> _column;
 
index 705a7ff585cd7ce518d6a55c200e40d0f0656b7d..f640cdbc27262b8e60cb389a64748cb90f327ff2 100644 (file)
@@ -92,7 +92,13 @@ ScreenDialog::ScreenDialog (wxWindow* parent, string title, string name, optiona
        vector<string> columns;
        columns.push_back (wx_to_std (_("Thumbprint")));
        _trusted_device_list = new EditableList<dcp::Certificate, CertificateFileDialogWrapper> (
-               this, columns, bind (&ScreenDialog::trusted_devices, this), bind (&ScreenDialog::set_trusted_devices, this, _1), bind (&column, _1), false
+               this,
+               columns,
+               bind (&ScreenDialog::trusted_devices, this),
+               bind (&ScreenDialog::set_trusted_devices, this, _1),
+               bind (&always_valid),
+               bind (&column, _1),
+               false
                );
 
        _sizer->Add (_trusted_device_list, wxGBPosition (r, 0), wxGBSpan (1, 3), wxEXPAND);
index e2533568270c35939f5ba4bdb9d549019edd30dc..19ff17d4e6707f77300f365c5572bf60b7b30f20 100644 (file)
@@ -39,6 +39,7 @@ sources = """
           content_properties_dialog.cc
           content_sub_panel.cc
           dcp_panel.cc
+          editable_list.cc
           email_dialog.cc
           image_sequence_dialog.cc
           image_subtitle_colour_dialog.cc