summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-02-16 11:24:33 +0000
committerCarl Hetherington <cth@carlh.net>2016-02-16 11:24:33 +0000
commit7feda7e97b67917d240585a09ed6c50d4605a83d (patch)
tree9e96af8220a0c221c3da5e3b9a1f942bd89a7321 /src
parentd4467a8a07fa3411ce2fabc80e533e322a4fb796 (diff)
Add option to auto-upload to the TMS (#794).
Diffstat (limited to 'src')
-rw-r--r--src/lib/film.cc10
-rw-r--r--src/lib/film.h9
-rw-r--r--src/lib/transcode_job.cc7
-rw-r--r--src/wx/dcp_panel.cc42
-rw-r--r--src/wx/dcp_panel.h2
5 files changed, 58 insertions, 12 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 9320cf5d2..f4d983260 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -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) */
@@ -867,6 +870,13 @@ Film::set_reel_length (int64_t r)
}
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)
{
_dirty = true;
diff --git a/src/lib/film.h b/src/lib/film.h
index 2fb3e810b..a33c0238e 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -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;
diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc
index b442d8035..a879e8c77 100644
--- a/src/lib/transcode_job.cc
+++ b/src/lib/transcode_job.cc
@@ -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;
diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc
index 3f4327cf8..c46dcba18 100644
--- a/src/wx/dcp_panel.cc
+++ b/src/wx/dcp_panel.cc
@@ -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) {
@@ -289,6 +294,16 @@ DCPPanel::standard_changed ()
}
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)
{
switch (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);
diff --git a/src/wx/dcp_panel.h b/src/wx/dcp_panel.h
index da93e752a..510a18744 100644
--- a/src/wx/dcp_panel.h
+++ b/src/wx/dcp_panel.h
@@ -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;