Allow specification of KDM annotation text (#296).
authorCarl Hetherington <cth@carlh.net>
Wed, 17 Jan 2024 23:58:51 +0000 (00:58 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 17 Jan 2024 23:58:51 +0000 (00:58 +0100)
src/tools/dcpomatic_kdm.cc
src/wx/kdm_dialog.cc
src/wx/kdm_dialog.h
src/wx/kdm_output_panel.cc
src/wx/kdm_output_panel.h

index 8e5e75da06d8bb08e39b9aa63ec108c4e519c2cd..c125428db0853ff13452fb2f23ec096843fae6f1 100644 (file)
@@ -382,12 +382,12 @@ private:
 
                        vector<KDMCertificatePeriod> period_checks;
 
-                       std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm = [decrypted, title](dcp::LocalTime begin, dcp::LocalTime end) {
+                       std::function<dcp::DecryptedKDM (dcp::LocalTime, dcp::LocalTime)> make_kdm = [this, decrypted, title](dcp::LocalTime begin, dcp::LocalTime end) {
                                /* Make an empty KDM */
                                dcp::DecryptedKDM kdm (
                                        begin,
                                        end,
-                                       decrypted.annotation_text().get_value_or(""),
+                                       _output->annotation_text(),
                                        title,
                                        dcp::LocalTime().as_string()
                                        );
@@ -487,7 +487,17 @@ private:
 
        void dkdm_selection_changed()
        {
-               _selected_dkdm = selected_dkdm();
+               if (_selected_dkdm = selected_dkdm()) {
+                       auto dkdm = std::dynamic_pointer_cast<DKDM>(_selected_dkdm);
+                       if (dkdm) {
+                               try {
+                                       dcp::DecryptedKDM decrypted(dkdm->dkdm(), Config::instance()->decryption_chain()->key().get());
+                                       if (decrypted.annotation_text()) {
+                                               _output->set_annotation_text(*decrypted.annotation_text());
+                                       }
+                               } catch (...) {}
+                       }
+               }
                setup_sensitivity();
        }
 
index c15156eee436e11b24eb02155f7f87691ec20703..c88a1ac409d2ea0f92fec70cffe515cc94dc668e 100644 (file)
@@ -37,6 +37,7 @@
 #include "lib/kdm_util.h"
 #include "lib/screen.h"
 #include <libcxml/cxml.h>
+#include <dcp/cpl.h>
 #include <dcp/exceptions.h>
 #include <dcp/warnings.h>
 LIBDCP_DISABLE_WARNINGS
@@ -127,8 +128,9 @@ KDMDialog::KDMDialog (wxWindow* parent, shared_ptr<const Film> film)
        _screens->ScreensChanged.connect (boost::bind (&KDMDialog::setup_sensitivity, this));
        _timing->TimingChanged.connect (boost::bind (&KDMDialog::setup_sensitivity, this));
        _make->Bind (wxEVT_BUTTON, boost::bind (&KDMDialog::make_clicked, this));
-       _cpl->Changed.connect(boost::bind(&KDMDialog::setup_sensitivity, this));
+       _cpl->Changed.connect(boost::bind(&KDMDialog::cpl_changed, this));
 
+       cpl_changed();
        setup_sensitivity ();
 
        SetSizer (overall_sizer);
@@ -137,6 +139,20 @@ KDMDialog::KDMDialog (wxWindow* parent, shared_ptr<const Film> film)
 }
 
 
+void
+KDMDialog::cpl_changed()
+{
+       try {
+               dcp::CPL cpl(_cpl->cpl());
+               if (auto text = cpl.annotation_text()) {
+                       _output->set_annotation_text(*text);
+               }
+       } catch (...) {}
+
+       setup_sensitivity();
+}
+
+
 void
 KDMDialog::setup_sensitivity ()
 {
index b475bde7098d184f68874eec8a972d636137d845..c1e9588fe66b6b36d85bb9ac8967295e47333942 100644 (file)
@@ -51,6 +51,7 @@ private:
        void setup_sensitivity ();
        void make_clicked ();
        bool confirm_overwrite (boost::filesystem::path path);
+       void cpl_changed();
 
        std::weak_ptr<const Film> _film;
        ScreensPanel* _screens;
index 37c797192eafba8ac81ce0166e854775cb12e08a..b4d94838ba18332f307466338f7789be636f2051 100644 (file)
@@ -79,6 +79,10 @@ KDMOutputPanel::KDMOutputPanel (wxWindow* parent)
        type->Add (advanced, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_X_GAP);
        table->Add (type, 1, wxTOP, DCPOMATIC_CHOICE_TOP_PAD);
 
+       add_label_to_sizer(table, this, _("Annotation text"), true, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL);
+       _annotation_text = new wxTextCtrl(this, wxID_ANY);
+       table->Add(_annotation_text, 1, wxEXPAND);
+
        add_label_to_sizer (table, this, _("Folder / ZIP name format"), true, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT);
        _container_name_format = new NameFormatEditor (this, Config::instance()->kdm_container_name_format(), dcp::NameFormat::Map(), dcp::NameFormat::Map(), "");
        table->Add (_container_name_format->panel(), 1, wxEXPAND);
@@ -357,3 +361,17 @@ KDMOutputPanel::method_selected() const
        return _write_to->GetValue() || _email->GetValue();
 }
 
+
+void
+KDMOutputPanel::set_annotation_text(string text)
+{
+       checked_set(_annotation_text, std::move(text));
+}
+
+
+string
+KDMOutputPanel::annotation_text() const
+{
+       return wx_to_std(_annotation_text->GetValue());
+}
+
index db898b44b0bc4202220ee8f1b77365fe16192632..3b82321c6c2aa58c8d2b64bc8753653868358bdd 100644 (file)
@@ -65,6 +65,9 @@ public:
 
        bool method_selected() const;
 
+       void set_annotation_text(std::string text);
+       std::string annotation_text() const;
+
        boost::signals2::signal<void ()> MethodChanged;
 
 private:
@@ -75,6 +78,7 @@ private:
        void add_email_addresses_clicked ();
 
        KDMChoice* _type;
+       wxTextCtrl* _annotation_text;
        NameFormatEditor* _container_name_format;
        NameFormatEditor* _filename_format;
        CheckBox* _write_to;