X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fexport_filename.cc;h=945af25dee12b2adcb73e27d5415c4b1539b5181;hb=949a45b748546c125e69d794b0f73565f376ab60;hp=51e32a4ca9aca2d48439ccad8d449c6d6a12d14a;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/export_filename.cc b/libs/ardour/export_filename.cc index 51e32a4ca9..945af25dee 100644 --- a/libs/ardour/export_filename.cc +++ b/libs/ardour/export_filename.cc @@ -18,23 +18,29 @@ */ -#include "ardour/export_filename.h" +#include + +#include +#include #include "pbd/xml++.h" #include "pbd/convert.h" #include "pbd/enumwriter.h" +#include "ardour/libardour_visibility.h" #include "ardour/session.h" #include "ardour/session_directory.h" -#include "ardour/export_timespan.h" +#include "ardour/export_filename.h" #include "ardour/export_format_specification.h" #include "ardour/export_channel_configuration.h" -#include "ardour/export_failed.h" +#include "ardour/export_timespan.h" +#include "ardour/utils.h" #include "i18n.h" using namespace PBD; using namespace Glib; +using std::string; namespace ARDOUR { @@ -44,22 +50,30 @@ ExportFilename::ExportFilename (Session & session) : include_session (false), include_revision (false), include_channel_config (false), + include_format_name (false), include_channel (false), include_timespan (true), // Include timespan name always include_time (false), include_date (false), session (session), - revision (1) + revision (1), + date_format (D_None), + time_format (T_None) { time_t rawtime; std::time (&rawtime); time_struct = localtime (&rawtime); - folder = session.session_directory().export_path().to_string(); + folder = session.session_directory().export_path(); - XMLNode * instant_node = session.instant_xml ("ExportFilename"); - if (instant_node) { - set_state (*instant_node); + XMLNode * extra_node = session.extra_xml ("ExportFilename"); + /* Legacy sessions used Session instant.xml for this */ + if (!extra_node) { + session.instant_xml ("ExportFilename"); + } + + if (extra_node) { + set_state (*extra_node); } } @@ -80,9 +94,9 @@ ExportFilename::get_state () add_field (node, "time", include_time, enum_2_string (time_format)); add_field (node, "date", include_date, enum_2_string (date_format)); - XMLNode * instant_node = new XMLNode ("ExportRevision"); - instant_node->add_property ("revision", to_string (revision, std::dec)); - session.add_instant_xml (*instant_node); + XMLNode * extra_node = new XMLNode ("ExportRevision"); + extra_node->add_property ("revision", to_string (revision, std::dec)); + session.add_extra_xml (*extra_node); return *node; } @@ -100,15 +114,24 @@ ExportFilename::set_state (const XMLNode & node) folder = ""; if ((prop = child->property ("relative"))) { - if (!prop->value().compare ("true")) { - folder = session.session_directory().root_path().to_string(); + if (string_is_affirmative (prop->value())) { + folder = session.session_directory().root_path(); } } if ((prop = child->property ("path"))) { - folder += prop->value(); + std::string tmp; + tmp = Glib::build_filename (folder, prop->value()); + if (!Glib::file_test (tmp, Glib::FILE_TEST_EXISTS)) { + warning << string_compose (_("Existing export folder for this session (%1) does not exist - ignored"), tmp) << endmsg; + } else { + folder = tmp; + } + } + + if (folder.empty()) { + folder = session.session_directory().export_path(); } - pair = get_field (node, "label"); include_label = pair.first; @@ -128,22 +151,25 @@ ExportFilename::set_state (const XMLNode & node) include_date = pair.first; date_format = (DateFormat) string_2_enum (pair.second, date_format); - XMLNode * instant_node = session.instant_xml ("ExportRevision"); - if (instant_node && (prop = instant_node->property ("revision"))) { + XMLNode * extra_node = session.extra_xml ("ExportRevision"); + /* Legacy sessions used Session instant.xml for this */ + if (!extra_node) { + extra_node = session.instant_xml ("ExportRevision"); + } + + if (extra_node && (prop = extra_node->property ("revision"))) { revision = atoi (prop->value()); } return 0; } -ustring -ExportFilename::get_path (FormatPtr format) const +string +ExportFilename::get_path (ExportFormatSpecPtr format) const { - ustring path = folder; + string path; bool filename_empty = true; - path += "/"; - if (include_session) { path += filename_empty ? "" : "_"; path += session.name(); @@ -194,13 +220,21 @@ ExportFilename::get_path (FormatPtr format) const filename_empty = false; } + if (include_format_name) { + path += filename_empty ? "" : "_"; + path += format->name(); + filename_empty = false; + } + path += "."; path += format->extension (); - return path; + path = legalize_for_universal_path (path); + + return Glib::build_filename (folder, path); } -ustring +string ExportFilename::get_time_format_str (TimeFormat format) const { switch ( format ) { @@ -218,7 +252,7 @@ ExportFilename::get_time_format_str (TimeFormat format) const } } -ustring +string ExportFilename::get_date_format_str (DateFormat format) const { switch (format) { @@ -267,32 +301,32 @@ ExportFilename::set_date_format (DateFormat format) } void -ExportFilename::set_label (ustring value) +ExportFilename::set_label (string value) { label = value; include_label = !value.compare (""); } bool -ExportFilename::set_folder (ustring path) +ExportFilename::set_folder (string path) { // TODO check folder existence folder = path; return true; } -ustring -ExportFilename::get_formatted_time (ustring const & format) const +string +ExportFilename::get_formatted_time (string const & format) const { char buffer [80]; strftime (buffer, 80, format.c_str(), time_struct); - ustring return_value (buffer); + string return_value (buffer); return return_value; } void -ExportFilename::add_field (XMLNode * node, ustring const & name, bool enabled, ustring const & value) +ExportFilename::add_field (XMLNode * node, string const & name, bool enabled, string const & value) { XMLNode * child = node->add_child ("Field"); @@ -309,7 +343,7 @@ ExportFilename::add_field (XMLNode * node, ustring const & name, bool enabled, u } ExportFilename::FieldPair -ExportFilename::get_field (XMLNode const & node, ustring const & name) +ExportFilename::get_field (XMLNode const & node, string const & name) { FieldPair pair; pair.first = false; @@ -344,10 +378,10 @@ ExportFilename::analyse_folder () { FieldPair pair; - ustring session_dir = session.session_directory().root_path().to_string(); - ustring::size_type session_dir_len = session_dir.length(); + string session_dir = session.session_directory().root_path(); + string::size_type session_dir_len = session_dir.length(); - ustring folder_beginning = folder.substr (0, session_dir_len); + string folder_beginning = folder.substr (0, session_dir_len); if (!folder_beginning.compare (session_dir)) { pair.first = true;