uint32_t discovered = 0;
for (vector<VSTInfo *>::iterator x = finfos->begin(); x != finfos->end(); ++x) {
VSTInfo* finfo = *x;
- char buf[32];
if (!finfo->canProcessReplacing) {
warning << string_compose (_("VST plugin %1 does not support processReplacing, and cannot be used in %2 at this time"),
continue;
}
- PluginInfoPtr info (new WindowsVSTPluginInfo);
+ PluginInfoPtr info (new WindowsVSTPluginInfo (finfo));
+ info->path = path;
/* what a joke freeware VST is */
-
if (!strcasecmp ("The Unnamed plugin", finfo->name)) {
info->name = PBD::basename_nosuffix (path);
- } else {
- info->name = finfo->name;
}
-
- snprintf (buf, sizeof (buf), "%d", finfo->UniqueID);
- info->unique_id = buf;
- info->category = finfo->Category;
- info->path = path;
- info->creator = finfo->creator;
- info->index = 0;
- info->n_inputs.set_audio (finfo->numInputs);
- info->n_outputs.set_audio (finfo->numOutputs);
- info->n_inputs.set_midi ((finfo->wantMidi&1) ? 1 : 0);
- info->n_outputs.set_midi ((finfo->wantMidi&2) ? 1 : 0);
- info->type = ARDOUR::Windows_VST;
-
/* if we don't have any tags for this plugin, make some up. */
set_tags (info->type, info->unique_id, info->category, info->name, FromPlug);
uint32_t discovered = 0;
for (vector<VSTInfo *>::iterator x = finfos->begin(); x != finfos->end(); ++x) {
VSTInfo* finfo = *x;
- char buf[32];
if (!finfo->canProcessReplacing) {
warning << string_compose (_("Mac VST plugin %1 does not support processReplacing, and so cannot be used in %2 at this time"),
continue;
}
- PluginInfoPtr info (new MacVSTPluginInfo);
-
- info->name = finfo->name;
-
- snprintf (buf, sizeof (buf), "%d", finfo->UniqueID);
- info->unique_id = buf;
- info->category = finfo->Category;
+ PluginInfoPtr info (new MacVSTPluginInfo (finfo));
info->path = path;
- info->creator = finfo->creator;
- info->index = 0;
- info->n_inputs.set_audio (finfo->numInputs);
- info->n_outputs.set_audio (finfo->numOutputs);
- info->n_inputs.set_midi ((finfo->wantMidi&1) ? 1 : 0);
- info->n_outputs.set_midi ((finfo->wantMidi&2) ? 1 : 0);
- info->type = ARDOUR::MacVST;
/* if we don't have any tags for this plugin, make some up. */
set_tags (info->type, info->unique_id, info->category, info->name, FromPlug);
uint32_t discovered = 0;
for (vector<VSTInfo *>::iterator x = finfos->begin(); x != finfos->end(); ++x) {
VSTInfo* finfo = *x;
- char buf[32];
if (!finfo->canProcessReplacing) {
warning << string_compose (_("linuxVST plugin %1 does not support processReplacing, and so cannot be used in %2 at this time"),
continue;
}
- PluginInfoPtr info(new LXVSTPluginInfo);
+ PluginInfoPtr info(new LXVSTPluginInfo (finfo));
+ info->path = path;
if (!strcasecmp ("The Unnamed plugin", finfo->name)) {
info->name = PBD::basename_nosuffix (path);
- } else {
- info->name = finfo->name;
}
-
- snprintf (buf, sizeof (buf), "%d", finfo->UniqueID);
- info->unique_id = buf;
- info->category = finfo->Category;
- info->path = path;
- info->creator = finfo->creator;
- info->index = 0;
- info->n_inputs.set_audio (finfo->numInputs);
- info->n_outputs.set_audio (finfo->numOutputs);
- info->n_inputs.set_midi ((finfo->wantMidi&1) ? 1 : 0);
- info->n_outputs.set_midi ((finfo->wantMidi&2) ? 1 : 0);
- info->type = ARDOUR::LXVST;
-
set_tags (info->type, info->unique_id, info->category, info->name, FromPlug);
/* Make sure we don't find the same plugin in more than one place along
return dir;
}
+bool
+PluginManager::load_plugin_order_file (XMLNode &n) const
+{
+ std::string path = Glib::build_filename (user_plugin_metadata_dir(), "plugin_order");
+
+ info << string_compose (_("Loading plugin order file %1"), path) << endmsg;
+ if (!Glib::file_test (path, Glib::FILE_TEST_EXISTS)) {
+ return false;
+ }
+
+ XMLTree tree;
+ if (tree.read (path)) {
+ n = *(tree.root());
+ return true;
+ } else {
+ error << string_compose (_("Cannot parse Plugin Order info from %1"), path) << endmsg;
+ return false;
+ }
+}
+
+
+void
+PluginManager::save_plugin_order_file (XMLNode &elem) const
+{
+ std::string path = Glib::build_filename (user_plugin_metadata_dir(), "plugin_order");
+
+ info << string_compose (_("Saving plugin order file %1"), path) << endmsg;
+
+ XMLTree tree;
+ tree.set_root (&elem);
+ if (!tree.write (path)) {
+ error << string_compose (_("Could not save Plugin Order info to %1"), path) << endmsg;
+ }
+ tree.set_root (0); //note: must disconnect the elem from XMLTree, or it will try to delete memory it didn't allocate
+}
+
+
void
PluginManager::save_tags ()
{
node->set_property (X_("id"), (*i).unique_id);
node->set_property (X_("tags"), (*i).tags);
node->set_property (X_("name"), (*i).name);
- node->set_property (X_("user-set"), "1");
+ if ( (*i).tagtype >= FromUserFile ) {
+ node->set_property (X_("user-set"), "1");
+ }
root->add_child_nocopy (*node);
}