Add option to auto-upload to the TMS (#794).
authorCarl Hetherington <cth@carlh.net>
Tue, 16 Feb 2016 11:24:33 +0000 (11:24 +0000)
committerCarl Hetherington <cth@carlh.net>
Tue, 16 Feb 2016 11:24:33 +0000 (11:24 +0000)
ChangeLog
src/lib/film.cc
src/lib/film.h
src/lib/transcode_job.cc
src/wx/dcp_panel.cc
src/wx/dcp_panel.h

index 2e2d193acdd8b692a93dfd48c7737701b5b23c93..79dc5997ee1729fa307ed2b34a49721c856450e1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2016-02-16  Carl Hetherington  <cth@carlh.net>
 
+       * Add option to auto-upload to TMS (#794).
+
        * Version 2.6.21 released.
 
 2016-02-15  Carl Hetherington  <cth@carlh.net>
index 9320cf5d2c8aaa9625cc4d4ca67695c80e07c64b..f4d983260b03daa69baf91f46dc8689a6f81d1cf 100644 (file)
@@ -132,6 +132,7 @@ Film::Film (boost::filesystem::path dir, bool log)
        , _audio_processor (0)
        , _reel_type (REELTYPE_SINGLE)
        , _reel_length (2000000000)
+       , _upload_after_make_dcp (false)
        , _state_version (current_state_version)
        , _dirty (false)
 {
@@ -356,6 +357,7 @@ Film::metadata () const
        }
        root->add_child("ReelType")->add_child_text (raw_convert<string> (_reel_type));
        root->add_child("ReelLength")->add_child_text (raw_convert<string> (_reel_length));
+       root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0");
        _playlist->as_xml (root->add_child ("Playlist"));
 
        return doc;
@@ -441,6 +443,7 @@ Film::read_metadata ()
 
        _reel_type = static_cast<ReelType> (f.optional_number_child<int>("ReelType").get_value_or (static_cast<int>(REELTYPE_SINGLE)));
        _reel_length = f.optional_number_child<int64_t>("ReelLength").get_value_or (2000000000);
+       _upload_after_make_dcp = f.optional_bool_child("UploadAfterMakeDCP").get_value_or (false);
 
        list<string> notes;
        /* This method is the only one that can return notes (so far) */
@@ -866,6 +869,13 @@ Film::set_reel_length (int64_t r)
        signal_changed (REEL_LENGTH);
 }
 
+void
+Film::set_upload_after_make_dcp (bool u)
+{
+       _upload_after_make_dcp = u;
+       signal_changed (UPLOAD_AFTER_MAKE_DCP);
+}
+
 void
 Film::signal_changed (Property p)
 {
index 2fb3e810b88739190fd0f3f071d2a9dbc29f74f2..a33c0238ec956666e85b039d0f91fd1765c54416 100644 (file)
@@ -181,7 +181,8 @@ public:
                INTEROP,
                AUDIO_PROCESSOR,
                REEL_TYPE,
-               REEL_LENGTH
+               REEL_LENGTH,
+               UPLOAD_AFTER_MAKE_DCP
        };
 
 
@@ -265,6 +266,10 @@ public:
                return _reel_length;
        }
 
+       bool upload_after_make_dcp () const {
+               return _upload_after_make_dcp;
+       }
+
        /* SET */
 
        void set_directory (boost::filesystem::path);
@@ -294,6 +299,7 @@ public:
        void set_audio_processor (AudioProcessor const * processor);
        void set_reel_type (ReelType);
        void set_reel_length (int64_t);
+       void set_upload_after_make_dcp (bool);
 
        /** Emitted when some property has of the Film has changed */
        mutable boost::signals2::signal<void (Property)> Changed;
@@ -358,6 +364,7 @@ private:
        ReelType _reel_type;
        /** Desired reel length in bytes, if _reel_type == REELTYPE_BY_LENGTH */
        int64_t _reel_length;
+       bool _upload_after_make_dcp;
 
        int _state_version;
 
index b442d8035a800cd6e8769dc845fba8d06774f675..a879e8c77d6331b67e6bcd0285a7bc4de1e4daeb 100644 (file)
@@ -22,6 +22,8 @@
  */
 
 #include "transcode_job.h"
+#include "upload_job.h"
+#include "job_manager.h"
 #include "film.h"
 #include "transcoder.h"
 #include "log.h"
@@ -86,6 +88,11 @@ TranscodeJob::run ()
                LOG_GENERAL (N_("Transcode job completed successfully: %1 fps"), fps);
                _transcoder.reset ();
 
+               if (_film->upload_after_make_dcp ()) {
+                       shared_ptr<Job> job (new UploadJob (_film));
+                       JobManager::instance()->add (job);
+               }
+
        } catch (...) {
                _transcoder.reset ();
                throw;
index 3f4327cf8ffb837a8ddad07c6d1440bdc1d859d1..c46dcba18e4333e5acb6e12061db9a3660aa9deb 100644 (file)
@@ -153,17 +153,22 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
        grid->Add (_standard, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
        ++r;
 
-       _name->Bind              (wxEVT_COMMAND_TEXT_UPDATED,       boost::bind (&DCPPanel::name_changed, this));
-       _use_isdcf_name->Bind    (wxEVT_COMMAND_CHECKBOX_CLICKED,   boost::bind (&DCPPanel::use_isdcf_name_toggled, this));
-       _edit_isdcf_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED,     boost::bind (&DCPPanel::edit_isdcf_button_clicked, this));
-       _copy_isdcf_name_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&DCPPanel::copy_isdcf_name_button_clicked, this));
-       _dcp_content_type->Bind  (wxEVT_COMMAND_CHOICE_SELECTED,    boost::bind (&DCPPanel::dcp_content_type_changed, this));
-       _signed->Bind            (wxEVT_COMMAND_CHECKBOX_CLICKED,   boost::bind (&DCPPanel::signed_toggled, this));
-       _encrypted->Bind         (wxEVT_COMMAND_CHECKBOX_CLICKED,   boost::bind (&DCPPanel::encrypted_toggled, this));
-       _edit_key->Bind          (wxEVT_COMMAND_BUTTON_CLICKED,     boost::bind (&DCPPanel::edit_key_clicked, this));
-       _reel_type->Bind         (wxEVT_COMMAND_CHOICE_SELECTED,    boost::bind (&DCPPanel::reel_type_changed, this));
-       _reel_length->Bind       (wxEVT_COMMAND_SPINCTRL_UPDATED,   boost::bind (&DCPPanel::reel_length_changed, this));
-       _standard->Bind          (wxEVT_COMMAND_CHOICE_SELECTED,    boost::bind (&DCPPanel::standard_changed, this));
+       _upload_after_make_dcp = new wxCheckBox (_panel, wxID_ANY, _("Upload DCP to TMS after it is made"));
+       grid->Add (_upload_after_make_dcp, wxGBPosition (r, 0), wxGBSpan (1, 2));
+       ++r;
+
+       _name->Bind                  (wxEVT_COMMAND_TEXT_UPDATED,     boost::bind (&DCPPanel::name_changed, this));
+       _use_isdcf_name->Bind        (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&DCPPanel::use_isdcf_name_toggled, this));
+       _edit_isdcf_button->Bind     (wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&DCPPanel::edit_isdcf_button_clicked, this));
+       _copy_isdcf_name_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&DCPPanel::copy_isdcf_name_button_clicked, this));
+       _dcp_content_type->Bind      (wxEVT_COMMAND_CHOICE_SELECTED,  boost::bind (&DCPPanel::dcp_content_type_changed, this));
+       _signed->Bind                (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&DCPPanel::signed_toggled, this));
+       _encrypted->Bind             (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&DCPPanel::encrypted_toggled, this));
+       _edit_key->Bind              (wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&DCPPanel::edit_key_clicked, this));
+       _reel_type->Bind             (wxEVT_COMMAND_CHOICE_SELECTED,  boost::bind (&DCPPanel::reel_type_changed, this));
+       _reel_length->Bind           (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&DCPPanel::reel_length_changed, this));
+       _standard->Bind              (wxEVT_COMMAND_CHOICE_SELECTED,  boost::bind (&DCPPanel::standard_changed, this));
+       _upload_after_make_dcp->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&DCPPanel::upload_after_make_dcp_changed, this));
 
        vector<DCPContentType const *> const ct = DCPContentType::all ();
        for (vector<DCPContentType const *>::const_iterator i = ct.begin(); i != ct.end(); ++i) {
@@ -288,6 +293,16 @@ DCPPanel::standard_changed ()
        _film->set_interop (_standard->GetSelection() == 1);
 }
 
+void
+DCPPanel::upload_after_make_dcp_changed ()
+{
+       if (!_film) {
+               return;
+       }
+
+       _film->set_upload_after_make_dcp (_upload_after_make_dcp->GetValue ());
+}
+
 void
 DCPPanel::film_changed (int p)
 {
@@ -394,6 +409,9 @@ DCPPanel::film_changed (int p)
        case Film::REEL_LENGTH:
                checked_set (_reel_length, _film->reel_length() / 1000000000LL);
                break;
+       case Film::UPLOAD_AFTER_MAKE_DCP:
+               checked_set (_upload_after_make_dcp, _film->upload_after_make_dcp ());
+               break;
        default:
                break;
        }
@@ -491,6 +509,7 @@ DCPPanel::set_film (shared_ptr<Film> film)
        film_changed (Film::AUDIO_PROCESSOR);
        film_changed (Film::REEL_TYPE);
        film_changed (Film::REEL_LENGTH);
+       film_changed (Film::UPLOAD_AFTER_MAKE_DCP);
 }
 
 void
@@ -513,6 +532,7 @@ DCPPanel::set_general_sensitivity (bool s)
        _edit_key->Enable (s && _film && _film->encrypted ());
        _reel_type->Enable (s);
        _reel_length->Enable (s && _film && _film->reel_type() == REELTYPE_BY_LENGTH);
+       _upload_after_make_dcp->Enable (s);
        _frame_rate_choice->Enable (s);
        _frame_rate_spin->Enable (s);
        _audio_channels->Enable (s);
index da93e752a473abb1ef6c91d17d9b1cc23e9333fe..510a18744ba0eb9a485a8a8912a78029806be29c 100644 (file)
@@ -73,6 +73,7 @@ private:
        void show_audio_clicked ();
        void reel_type_changed ();
        void reel_length_changed ();
+       void upload_after_make_dcp_changed ();
 
        void setup_frame_rate_widget ();
        void setup_container ();
@@ -116,6 +117,7 @@ private:
        wxButton* _edit_key;
        wxChoice* _reel_type;
        wxSpinCtrl* _reel_length;
+       wxCheckBox* _upload_after_make_dcp;
 
        AudioDialog* _audio_dialog;