major fixes to automation editing
[ardour.git] / libs / ardour / audio_library.cc
index 7f421e86c817dc4074aa19cdbfed9e29bc98a55d..3aa6d05be1fea88bc087318d349829c1583e8ab8 100644 (file)
@@ -46,6 +46,8 @@ using namespace PBD;
 
 static char* SOUNDFILE = "http://ardour.org/ontology/Soundfile";
 
+string AudioLibrary::state_node_name = "AudioLibrary";
+
 AudioLibrary::AudioLibrary ()
 {
 //     sfdb_paths.push_back("/Users/taybin/sounds");
@@ -74,8 +76,6 @@ AudioLibrary::AudioLibrary ()
        } 
 
        lrdf_free_statements(matches);
-
-       scan_paths();
 }
 
 AudioLibrary::~AudioLibrary ()
@@ -356,6 +356,8 @@ void
 AudioLibrary::set_paths (vector<string> paths)
 {
        sfdb_paths = paths;
+       
+       scan_paths ();
 }
 
 vector<string> 
@@ -429,5 +431,50 @@ AudioLibrary::safe_file_extension(string file)
         file.rfind(".maud")== string::npos &&
         file.rfind(".vwe") == string::npos &&
         file.rfind(".paf") == string::npos &&
+#ifdef HAVE_COREAUDIO
+       file.rfind(".mp3") == string::npos &&
+       file.rfind(".aac") == string::npos &&
+       file.rfind(".mp4") == string::npos &&
+#endif // HAVE_COREAUDIO
         file.rfind(".voc") == string::npos);
 }
+
+XMLNode&
+AudioLibrary::get_state ()
+{
+       XMLNode* root = new XMLNode(X_("AudioLibrary"));
+       
+       for (vector<string>::iterator i = sfdb_paths.begin(); i != sfdb_paths.end(); ++i) {
+               XMLNode* node = new XMLNode(X_("Path"));
+               node->add_property("value", *i);
+               root->add_child_nocopy(*node);
+       }
+       
+       return *root;
+}
+
+int
+AudioLibrary::set_state (const XMLNode& node)
+{
+       if (node.name() != X_("AudioLibrary")) {
+               fatal << "programming error: AudioLibrary: incorrect XML node sent to set_state()" << endmsg;
+               return -1;
+       }
+       
+       XMLNodeList nodes = node.children(X_("Path"));
+       
+       vector<string> paths;
+       XMLProperty* prop;
+       XMLNode* child;
+       for (XMLNodeConstIterator iter = nodes.begin(); iter != nodes.end(); ++iter) {
+               child = *iter;
+               
+               if ((prop = child->property(X_("value"))) != 0) {
+                       paths.push_back(prop->value());
+               }
+       }
+       
+       set_paths (paths);
+       
+       return 0;
+}