From 40e5ad4e7265f30287a8ca3b34957a2abf91bba9 Mon Sep 17 00:00:00 2001 From: Nikolaus Gullotta Date: Thu, 11 Apr 2019 15:14:55 -0500 Subject: [PATCH] sanitize node is smarter about just removing 'important' nodes due to conflicts with mixbus's version of route.cc - now we try to simply remove the parts that overwrite them --- libs/ardour/mixer_snapshot.cc | 46 +++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/libs/ardour/mixer_snapshot.cc b/libs/ardour/mixer_snapshot.cc index e3b0387252..3ff82c47cb 100644 --- a/libs/ardour/mixer_snapshot.cc +++ b/libs/ardour/mixer_snapshot.cc @@ -493,26 +493,58 @@ void MixerSnapshot::load_from_session(string path) XMLNode& MixerSnapshot::sanitize_node(XMLNode& node) { + vector procs {"PRE"}; #ifndef MIXBUS - vector procs {"PRE", "EQ", "Comp", "POST"}; + procs.push_back("EQ"); + procs.push_back("Comp"); + procs.push_back("POST"); +#endif + const string node_name = "Processor"; const string prop_name = "name"; for(vector::const_iterator it = procs.begin(); it != procs.end(); it++) { + cout << (*it) << endl; node.remove_node_and_delete(node_name, prop_name, (*it)); } -#else - if(!get_recall_eq()) { - node.remove_node_and_delete("Processor", "name", "EQ"); - } +#ifdef MIXBUS - if(!get_recall_comp()) { - node.remove_node_and_delete("Processor", "name", "Comp"); + XMLNodeList nlist; + XMLNodeConstIterator niter; + XMLNode* child; + + nlist = node.children(); + + for (niter = nlist.begin(); niter != nlist.end(); ++niter) { + if(get_recall_eq() && get_recall_comp()) { + break; + } + + child = *niter; + + if (child->name() == "Processor") { + XMLProperty const * name_prop = (*niter)->property(X_("name")); + if(name_prop && name_prop->value() == "EQ") { + if(!get_recall_eq()) { + child->remove_nodes_and_delete("Automation"); + child->remove_nodes_and_delete("ladspa"); + child->remove_nodes_and_delete("Controllable"); + } + } + if(name_prop && name_prop->value() == "Comp") { + if(!get_recall_comp()) { + child->remove_nodes_and_delete("Automation"); + child->remove_nodes_and_delete("ladspa"); + child->remove_nodes_and_delete("Controllable"); + } + } + } } #endif if(!get_recall_io()) { + cout << "removing IO node" << endl; node.remove_node_and_delete("IO", "direction", "Input"); node.remove_node_and_delete("IO", "direction", "Output"); }