Rudimentary post-processing of exported files.
Export format contains a string to be passed to system() after expanding %1, %2, & %3 via string_compose() to the full path & filename, containing directory, and basename respectively. No error-checking or any niceties like that - real programmers will of course always type the command correctly, and know to watch Ardour's standard output for the results...
This commit is contained in:
parent
8b9a1fae6a
commit
2a93f7a25e
@ -52,6 +52,7 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) :
|
||||
silence_end_clock ("silence_end", true, "", true, false, true),
|
||||
|
||||
upload_checkbox(_("Upload to Soundcloud")),
|
||||
command_label(_("Command to run post-export (%1=full path & filename, %2=directory, %3=basename):")),
|
||||
|
||||
format_table (3, 4),
|
||||
compatibility_label (_("Compatibility"), Gtk::ALIGN_LEFT),
|
||||
@ -116,6 +117,9 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) :
|
||||
silence_table.attach (silence_end_clock, 2, 3, 2, 3);
|
||||
|
||||
get_vbox()->pack_start (upload_checkbox, false, false);
|
||||
get_vbox()->pack_start (command_label, false, false);
|
||||
get_vbox()->pack_start (command_entry, false, false);
|
||||
|
||||
/* Format table */
|
||||
|
||||
init_format_table();
|
||||
@ -146,6 +150,7 @@ ExportFormatDialog::ExportFormatDialog (FormatPtr format, bool new_dialog) :
|
||||
with_cue.signal_toggled().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_with_cue));
|
||||
with_toc.signal_toggled().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_with_toc));
|
||||
upload_checkbox.signal_toggled().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_upload));
|
||||
command_entry.signal_changed().connect (sigc::mem_fun (*this, &ExportFormatDialog::update_command));
|
||||
|
||||
cue_toc_vbox.pack_start (with_cue, false, false);
|
||||
cue_toc_vbox.pack_start (with_toc, false, false);
|
||||
@ -301,6 +306,7 @@ ExportFormatDialog::load_state (FormatPtr spec)
|
||||
|
||||
tag_checkbox.set_active (spec->tag());
|
||||
upload_checkbox.set_active (spec->upload());
|
||||
command_entry.set_text (spec->command());
|
||||
}
|
||||
|
||||
void
|
||||
@ -728,6 +734,13 @@ ExportFormatDialog::update_upload ()
|
||||
manager.select_upload (upload_checkbox.get_active());
|
||||
}
|
||||
|
||||
void
|
||||
ExportFormatDialog::update_command ()
|
||||
{
|
||||
manager.set_command (command_entry.get_text());
|
||||
}
|
||||
|
||||
void
|
||||
ExportFormatDialog::update_description()
|
||||
{
|
||||
std::string text = ": " + format->description(false);
|
||||
|
@ -178,6 +178,8 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
|
||||
/* Upload */
|
||||
|
||||
Gtk::CheckButton upload_checkbox;
|
||||
Gtk::Label command_label;
|
||||
Gtk::Entry command_entry;
|
||||
|
||||
/* Format table */
|
||||
|
||||
@ -312,6 +314,7 @@ class ExportFormatDialog : public ArdourDialog, public PBD::ScopedConnectionList
|
||||
void update_with_toc ();
|
||||
void update_with_cue ();
|
||||
void update_upload ();
|
||||
void update_command ();
|
||||
|
||||
Gtk::TreeView sample_format_view;
|
||||
Gtk::TreeView dither_type_view;
|
||||
|
@ -101,6 +101,7 @@ class ExportFormatManager : public PBD::ScopedConnectionList
|
||||
void select_with_cue (bool);
|
||||
void select_with_toc (bool);
|
||||
void select_upload (bool);
|
||||
void set_command (std::string);
|
||||
void select_src_quality (ExportFormatBase::SRCQuality value);
|
||||
void select_trim_beginning (bool value);
|
||||
void select_silence_beginning (AnyTime const & time);
|
||||
|
@ -96,6 +96,7 @@ class ExportFormatSpecification : public ExportFormatBase {
|
||||
void set_with_cue (bool yn) { _with_cue = yn; }
|
||||
void set_with_toc (bool yn) { _with_toc = yn; }
|
||||
void set_upload (bool yn) { _upload = yn; }
|
||||
void set_command (std::string command) { _command = command; }
|
||||
|
||||
void set_silence_beginning (AnyTime const & value) { _silence_beginning = value; }
|
||||
void set_silence_end (AnyTime const & value) { _silence_end = value; }
|
||||
@ -126,6 +127,7 @@ class ExportFormatSpecification : public ExportFormatBase {
|
||||
bool with_toc() const { return _with_toc; }
|
||||
bool with_cue() const { return _with_cue; }
|
||||
bool upload() const { return _upload; }
|
||||
std::string command() const { return _command; }
|
||||
|
||||
bool tag () const { return _tag && supports_tagging; }
|
||||
|
||||
@ -176,6 +178,7 @@ class ExportFormatSpecification : public ExportFormatBase {
|
||||
bool _with_toc;
|
||||
bool _with_cue;
|
||||
bool _upload;
|
||||
std::string _command;
|
||||
|
||||
/* serialization helpers */
|
||||
|
||||
|
@ -300,6 +300,14 @@ ExportFormatManager::select_upload (bool value)
|
||||
check_for_description_change ();
|
||||
}
|
||||
|
||||
void
|
||||
ExportFormatManager::set_command (std::string command)
|
||||
{
|
||||
current_selection->set_command (command);
|
||||
check_for_description_change ();
|
||||
}
|
||||
|
||||
void
|
||||
ExportFormatManager::select_trim_beginning (bool value)
|
||||
{
|
||||
current_selection->set_trim_beginning (value);
|
||||
|
@ -171,6 +171,7 @@ ExportFormatSpecification::ExportFormatSpecification (Session & s)
|
||||
, _with_toc (false)
|
||||
, _with_cue (false)
|
||||
, _upload (false)
|
||||
, _command ("")
|
||||
{
|
||||
format_ids.insert (F_None);
|
||||
endiannesses.insert (E_FileDefault);
|
||||
@ -246,6 +247,7 @@ ExportFormatSpecification::get_state ()
|
||||
root->add_property ("with-cue", _with_cue ? "true" : "false");
|
||||
root->add_property ("with-toc", _with_toc ? "true" : "false");
|
||||
root->add_property ("upload", _upload ? "true" : "false");
|
||||
root->add_property ("command", _command);
|
||||
|
||||
node = root->add_child ("Encoding");
|
||||
node->add_property ("id", enum_2_string (format_id()));
|
||||
@ -329,6 +331,12 @@ ExportFormatSpecification::set_state (const XMLNode & root)
|
||||
_upload = false;
|
||||
}
|
||||
|
||||
if ((prop = root.property ("command"))) {
|
||||
_command = prop->value();
|
||||
} else {
|
||||
_command = "";
|
||||
}
|
||||
|
||||
/* Encoding and SRC */
|
||||
|
||||
if ((child = root.child ("Encoding"))) {
|
||||
@ -601,6 +609,11 @@ ExportFormatSpecification::description (bool include_name)
|
||||
if (_upload) {
|
||||
components.push_back ("Upload");
|
||||
}
|
||||
|
||||
if (!_command.empty()) {
|
||||
components.push_back ("+");
|
||||
}
|
||||
|
||||
string desc;
|
||||
if (include_name) {
|
||||
desc = _name + ": ";
|
||||
|
@ -293,6 +293,16 @@ ExportHandler::finish_timespan ()
|
||||
export_cd_marker_file (current_timespan, fmt, filepath, CDMarkerTOC);
|
||||
}
|
||||
|
||||
if (!fmt->command().empty()) {
|
||||
std::string command = string_compose(fmt->command(),
|
||||
filepath,
|
||||
Glib::path_get_dirname(filepath),
|
||||
PBD::basename_nosuffix(filepath)
|
||||
);
|
||||
std::cerr << "running command: " << command << "..." << std::endl;
|
||||
system(command.c_str());
|
||||
}
|
||||
|
||||
if (fmt->upload()) {
|
||||
SoundcloudUploader *soundcloud_uploader = new SoundcloudUploader;
|
||||
std::string token = soundcloud_uploader->Get_Auth_Token(upload_username, upload_password);
|
||||
|
Loading…
Reference in New Issue
Block a user