From 0d44dc6ac59f67f5e64c62092abfb7b8fe61643f Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 03:38:11 +0000 Subject: [PATCH] Proposed fix for 856 Recursive VST Effect Enhancement Request --- plugins/VstEffect/VstSubPluginFeatures.cpp | 33 ++++++++++++++++++---- plugins/VstEffect/VstSubPluginFeatures.h | 7 ++++- plugins/vst_base/VstPlugin.cpp | 7 ++--- src/core/RemotePlugin.cpp | 2 +- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index 8e0c623c305..2a0e625dc3b 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -31,6 +31,7 @@ #include "ConfigManager.h" + VstSubPluginFeatures::VstSubPluginFeatures( Plugin::PluginTypes _type ) : SubPluginFeatures( _type ) { @@ -52,16 +53,38 @@ void VstSubPluginFeatures::fillDescriptionWidget( QWidget * _parent, void VstSubPluginFeatures::listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const { - QStringList dlls = QDir( ConfigManager::inst()->vstDir() ). - entryList( QStringList() << "*.dll", - QDir::Files, QDir::Name ); + QStringList *dlls = new QStringList(); + const QString path = QString(""); + addPluginsFromDir(dlls, path ); // TODO: eval m_type - for( QStringList::ConstIterator it = dlls.begin(); - it != dlls.end(); ++it ) + for( QStringList::ConstIterator it = dlls->begin(); + it != dlls->end(); ++it ) { EffectKey::AttributeMap am; am["file"] = *it; _kl.push_back( Key( _desc, QFileInfo( *it ).baseName(), am ) ); } + delete dlls; +} + +void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString path) const +{ + QStringList dirs = QDir ( ConfigManager::inst()->vstDir() + path ). + entryList( QStringList() << "*" , + QDir::Dirs, QDir::Name ); + for(int i = 0; i < dirs.size(); i++) + { + if(dirs.at( i )[0] != '.' ) + { + addPluginsFromDir( filenames, path+QDir::separator() + dirs.at( i ) ); + } + } + QStringList dlls = QDir( ConfigManager::inst()->vstDir() + path ). + entryList( QStringList() << "*.dll", + QDir::Files, QDir::Name ); + for(int i = 0; i < dlls.size(); i++) + { + filenames->append(path + QDir::separator() + dlls.at( i )); + } } diff --git a/plugins/VstEffect/VstSubPluginFeatures.h b/plugins/VstEffect/VstSubPluginFeatures.h index 51fdc05cdcb..db2adcfabd6 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.h +++ b/plugins/VstEffect/VstSubPluginFeatures.h @@ -40,8 +40,13 @@ class VstSubPluginFeatures : public Plugin::Descriptor::SubPluginFeatures virtual void listSubPluginKeys( const Plugin::Descriptor * _desc, KeyList & _kl ) const; - +private: + void addPluginsFromDir(QStringList* filenames, QString path) const; } ; + + + + #endif diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 0cc604d63a6..1cc74576946 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -172,10 +172,9 @@ void VstPlugin::tryLoad( const QString &remoteVstPluginExecutable ) QString p = m_plugin; - if( QFileInfo( p ).dir().isRelative() ) - { - p = ConfigManager::inst()->vstDir() + QDir::separator() + p; - } + p.remove(0,1); + p = ConfigManager::inst()->vstDir() + p; + sendMessage( message( IdVstLoadPlugin ).addString( QSTR_TO_STDSTR( p ) ) ); diff --git a/src/core/RemotePlugin.cpp b/src/core/RemotePlugin.cpp index c30f0c9e300..84555fb3c20 100644 --- a/src/core/RemotePlugin.cpp +++ b/src/core/RemotePlugin.cpp @@ -131,7 +131,7 @@ bool RemotePlugin::init( const QString &pluginExecutable, m_failed = false; } QString exec = ConfigManager::inst()->pluginDir() + - QDir::separator() + pluginExecutable; + pluginExecutable; QStringList args; // swap in and out for bidirectional communication