X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fexport_profile_manager.cc;h=ac17ec7310f51d7d483f665097e9142d05c7e23b;hb=22dc575e4cbc35a5d486d6f448332fb721865d57;hp=88432bcedc5b7ba95a7de60de3ebb1b3157fd414;hpb=f2b007195cd75b195e38a4cd7757debac73e7792;p=ardour.git diff --git a/libs/ardour/export_profile_manager.cc b/libs/ardour/export_profile_manager.cc index 88432bcedc..ac17ec7310 100644 --- a/libs/ardour/export_profile_manager.cc +++ b/libs/ardour/export_profile_manager.cc @@ -29,13 +29,14 @@ #include #include -#include #include #include #include #include #include +#include #include +#include #include #include "i18n.h" @@ -45,143 +46,6 @@ using namespace PBD; namespace ARDOUR { -ExportProfileManager::Preset::Preset (string filename, Session & s) : - _id (0), session (s), global (filename), local (0) -{ - XMLNode * root; - if ((root = global.root())) { - XMLProperty * prop; - if ((prop = root->property ("id"))) { - set_id ((uint32_t) atoi (prop->value())); - } - if ((prop = root->property ("name"))) { - set_name (prop->value()); - } - - XMLNode * instant_xml = get_instant_xml (); - if (instant_xml) { - XMLNode * instant_copy = new XMLNode (*instant_xml); - set_local_state (*instant_copy); - } - } -} - -ExportProfileManager::Preset::~Preset () -{ - if (local) { - delete local; - } -} - -void -ExportProfileManager::Preset::set_name (string name) -{ - _name = name; - - XMLNode * node; - if ((node = global.root())) { - node->add_property ("name", name); - } - if (local) { - local->add_property ("name", name); - } -} - -void -ExportProfileManager::Preset::set_id (uint32_t id) -{ - _id = id; - - XMLNode * node; - if ((node = global.root())) { - node->add_property ("id", id); - } - if (local) { - local->add_property ("id", id); - } -} - -void -ExportProfileManager::Preset::set_global_state (XMLNode & state) -{ - delete global.root (); - global.set_root (&state); - - set_id (_id); - set_name (_name); -} - -void -ExportProfileManager::Preset::set_local_state (XMLNode & state) -{ - delete local; - local = &state; - - set_id (_id); - set_name (_name); -} - -void -ExportProfileManager::Preset::save () const -{ - save_instant_xml (); - if (global.root()) { - global.write (); - } -} - -void -ExportProfileManager::Preset::remove_local () const -{ - remove_instant_xml (); -} - -XMLNode * -ExportProfileManager::Preset::get_instant_xml () const -{ - XMLNode * instant_xml; - - if ((instant_xml = session.instant_xml ("ExportPresets"))) { - XMLNodeList children = instant_xml->children ("ExportPreset"); - for (XMLNodeList::iterator it = children.begin(); it != children.end(); ++it) { - XMLProperty * prop; - if ((prop = (*it)->property ("id")) && _id == (uint32_t) atoi (prop->value())) { - return *it; - } - } - } - - return 0; -} - -void -ExportProfileManager::Preset::save_instant_xml () const -{ - if (!local) { return; } - - /* First remove old, then add new */ - - remove_instant_xml (); - - XMLNode * instant_xml; - if ((instant_xml = session.instant_xml ("ExportPresets"))) { - instant_xml->add_child_copy (*local); - } else { - instant_xml = new XMLNode ("ExportPresets"); - instant_xml->add_child_copy (*local); - session.add_instant_xml (*instant_xml, false); - } -} - -void -ExportProfileManager::Preset::remove_instant_xml () const -{ - XMLNode * instant_xml; - if ((instant_xml = session.instant_xml ("ExportPresets"))) { - instant_xml->remove_nodes_and_delete ("id", to_string (_id, std::dec)); - } -} - ExportProfileManager::ExportProfileManager (Session & s) : handler (s.get_export_handler()), session (s), @@ -257,31 +121,35 @@ ExportProfileManager::prepare_for_export () } } -void +bool ExportProfileManager::load_preset (PresetPtr preset) { + bool ok = true; + current_preset = preset; - if (!preset) { return; } + if (!preset) { return false; } XMLNode const * state; if ((state = preset->get_local_state())) { set_local_state (*state); - } + } else { ok = false; } if ((state = preset->get_global_state())) { - set_global_state (*state); - } + if (!set_global_state (*state)) { + ok = false; + } + } else { ok = false; } + + return ok; } void ExportProfileManager::load_presets () { - preset_id_counter = 0; - - vector found = find_file ("*.preset"); + vector found = find_file (string_compose (X_("*%1"),export_preset_suffix)); for (vector::iterator it = found.begin(); it != found.end(); ++it) { - preset_id_counter = std::max (preset_id_counter, load_preset_from_disk (*it)); + load_preset_from_disk (*it); } } @@ -289,11 +157,9 @@ ExportProfileManager::PresetPtr ExportProfileManager::save_preset (string const & name) { if (!current_preset) { - ++preset_id_counter; - string filename = export_config_dir.to_string() + "/" + to_string (preset_id_counter, std::dec) + ".preset"; - current_preset.reset (new Preset (filename, session)); + string filename = export_config_dir.to_string() + "/" + name + export_preset_suffix; + current_preset.reset (new ExportPreset (filename, session)); preset_list.push_back (current_preset); - current_preset->set_id (preset_id_counter); } XMLNode * global_preset = new XMLNode ("ExportPreset"); @@ -333,39 +199,36 @@ ExportProfileManager::remove_preset () current_preset.reset(); } -uint32_t +void ExportProfileManager::load_preset_from_disk (PBD::sys::path const & path) { - PresetPtr preset (new Preset (path.to_string(), session)); + PresetPtr preset (new ExportPreset (path.to_string(), session)); preset_list.push_back (preset); /* Handle id to filename mapping */ FilePair pair (preset->id(), path); preset_file_map.insert (pair); - - return preset->id(); } -void +bool ExportProfileManager::set_state (XMLNode const & root) { - set_global_state (root); - set_local_state (root); + return set_global_state (root) && set_local_state (root); } -void +bool ExportProfileManager::set_global_state (XMLNode const & root) { - init_formats (root.children ("ExportFormat")); - init_filenames (root.children ("ExportFilename")); + return init_filenames (root.children ("ExportFilename")) && + init_formats (root.children ("ExportFormat")); } -void +bool ExportProfileManager::set_local_state (XMLNode const & root) { - init_timespans (root.children ("ExportTimespan"));; - init_channel_configs (root.children ("ExportChannelConfiguration")); + return init_timespans (root.children ("ExportTimespan")) && + init_channel_configs (root.children ("ExportChannelConfiguration")); } void @@ -383,7 +246,7 @@ ExportProfileManager::serialize_global_profile (XMLNode & root) } for (FilenameStateList::iterator it = filenames.begin(); it != filenames.end(); ++it) { - root.add_child_nocopy (serialize_filename (*it)); + root.add_child_nocopy ((*it)->filename->get_state()); } } @@ -395,7 +258,7 @@ ExportProfileManager::serialize_local_profile (XMLNode & root) } for (ChannelConfigStateList::iterator it = channel_configs.begin(); it != channel_configs.end(); ++it) { - root.add_child_nocopy (serialize_channel_config (*it)); + root.add_child_nocopy ((*it)->config->get_state()); } } @@ -427,7 +290,7 @@ ExportProfileManager::set_selection_range (nframes_t start, nframes_t end) } } -void +bool ExportProfileManager::init_timespans (XMLNodeList nodes) { timespans.clear (); @@ -438,12 +301,14 @@ ExportProfileManager::init_timespans (XMLNodeList nodes) TimespanStatePtr timespan (new TimespanState (session_range, selection_range, ranges)); timespans.push_back (timespan); - return; + return false; } for (XMLNodeList::const_iterator it = nodes.begin(); it != nodes.end(); ++it) { timespans.push_back (deserialize_timespan (**it)); } + + return true; } ExportProfileManager::TimespanStatePtr @@ -526,7 +391,7 @@ ExportProfileManager::update_ranges () { } } -void +bool ExportProfileManager::init_channel_configs (XMLNodeList nodes) { channel_configs.clear(); @@ -534,70 +399,16 @@ ExportProfileManager::init_channel_configs (XMLNodeList nodes) if (nodes.empty()) { ChannelConfigStatePtr config (new ChannelConfigState (handler->add_channel_config())); channel_configs.push_back (config); - return; + return false; } for (XMLNodeList::const_iterator it = nodes.begin(); it != nodes.end(); ++it) { - channel_configs.push_back (deserialize_channel_config (**it)); - } -} - -ExportProfileManager::ChannelConfigStatePtr -ExportProfileManager::deserialize_channel_config (XMLNode & root) -{ - - ChannelConfigStatePtr state (new ChannelConfigState (handler->add_channel_config())); - XMLProperty const * prop; - - if ((prop = root.property ("split"))) { - state->config->set_split(!prop->value().compare ("true")); - } - - XMLNodeList channels = root.children ("Channel"); - for (XMLNodeList::iterator it = channels.begin(); it != channels.end(); ++it) { - boost::shared_ptr channel (new ExportChannel ()); - - XMLNodeList ports = (*it)->children ("Port"); - for (XMLNodeList::iterator p_it = ports.begin(); p_it != ports.end(); ++p_it) { - if ((prop = (*p_it)->property ("name"))) { - channel->add_port (dynamic_cast (session.engine().get_port_by_name (prop->value()))); - } - } - - state->config->register_channel (channel); - } - - return state; -} - -XMLNode & -ExportProfileManager::serialize_channel_config (ChannelConfigStatePtr state) -{ - XMLNode * root = new XMLNode ("ExportChannelConfiguration"); - XMLNode * channel; - XMLNode * port_node; - - root->add_property ("split", state->config->get_split() ? "true" : "false"); - root->add_property ("channels", to_string (state->config->get_n_chans(), std::dec)); - - uint32_t i = 1; - ExportChannelConfiguration::ChannelList const & chan_list = state->config->get_channels(); - for (ExportChannelConfiguration::ChannelList::const_iterator c_it = chan_list.begin(); c_it != chan_list.end(); ++c_it) { - channel = root->add_child ("Channel"); - if (!channel) { continue; } - - channel->add_property ("number", to_string (i, std::dec)); - - for (ExportChannel::const_iterator p_it = (*c_it)->begin(); p_it != (*c_it)->end(); ++p_it) { - if ((port_node = channel->add_child ("Port"))) { - port_node->add_property ("name", (*p_it)->name()); - } - } - - ++i; + ChannelConfigStatePtr config (new ChannelConfigState (handler->add_channel_config())); + config->config->set_state (**it); + channel_configs.push_back (config); } - return *root; + return true; } ExportProfileManager::FormatStatePtr @@ -630,7 +441,7 @@ ExportProfileManager::save_format_to_disk (FormatPtr format) /* Get filename for file */ Glib::ustring new_name = format->name(); - new_name += ".format"; + new_name += export_format_suffix; sys::path new_path (export_config_dir); new_path /= new_name; @@ -703,21 +514,24 @@ ExportProfileManager::get_new_format (FormatPtr original) return format; } -void +bool ExportProfileManager::init_formats (XMLNodeList nodes) { + bool ok = true; formats.clear(); if (nodes.empty()) { FormatStatePtr format (new FormatState (format_list, FormatPtr ())); formats.push_back (format); - return; + return false; } for (XMLNodeList::const_iterator it = nodes.begin(); it != nodes.end(); ++it) { FormatStatePtr format; if ((format = deserialize_format (**it))) { formats.push_back (format); + } else { + ok = false; } } @@ -725,16 +539,18 @@ ExportProfileManager::init_formats (XMLNodeList nodes) FormatStatePtr format (new FormatState (format_list, FormatPtr ())); formats.push_back (format); } + + return ok; } ExportProfileManager::FormatStatePtr ExportProfileManager::deserialize_format (XMLNode & root) { XMLProperty * prop; - uint32_t id = 0; + UUID id; if ((prop = root.property ("id"))) { - id = atoi (prop->value()); + id = prop->value(); } for (FormatList::iterator it = format_list->begin(); it != format_list->end(); ++it) { @@ -751,7 +567,7 @@ ExportProfileManager::serialize_format (FormatStatePtr state) { XMLNode * root = new XMLNode ("ExportFormat"); - string id = state->format ? to_string (state->format->id(), std::dec) : "0"; + string id = state->format ? state->format->id().to_s() : ""; root->add_property ("id", id); return *root; @@ -760,7 +576,7 @@ ExportProfileManager::serialize_format (FormatStatePtr state) void ExportProfileManager::load_formats () { - vector found = find_file ("*.format"); + vector found = find_file (string_compose ("*%1", export_format_suffix)); for (vector::iterator it = found.begin(); it != found.end(); ++it) { load_format_from_disk (*it); @@ -801,7 +617,7 @@ ExportProfileManager::remove_filename_state (FilenameStatePtr state) } } -void +bool ExportProfileManager::init_filenames (XMLNodeList nodes) { filenames.clear (); @@ -809,26 +625,16 @@ ExportProfileManager::init_filenames (XMLNodeList nodes) if (nodes.empty()) { FilenameStatePtr filename (new FilenameState (handler->add_filename())); filenames.push_back (filename); - return; + return false; } for (XMLNodeList::const_iterator it = nodes.begin(); it != nodes.end(); ++it) { - filenames.push_back (deserialize_filename (**it)); + FilenamePtr filename = handler->add_filename(); + filename->set_state (**it); + filenames.push_back (FilenameStatePtr (new FilenameState (filename))); } -} - -ExportProfileManager::FilenameStatePtr -ExportProfileManager::deserialize_filename (XMLNode & root) -{ - FilenamePtr filename = handler->add_filename(); - filename->set_state (root); - return FilenameStatePtr (new FilenameState (filename)); -} - -XMLNode & -ExportProfileManager::serialize_filename (FilenameStatePtr state) -{ - return state->filename->get_state(); + + return true; } boost::shared_ptr