From 0d44dc6ac59f67f5e64c62092abfb7b8fe61643f Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 03:38:11 +0000 Subject: [PATCH 1/3] 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 8e0c623c3..2a0e625dc 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 51fdc05cd..db2adcfab 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.h +++ b/plugins/VstEffect/VstSubPluginFeatures.h @@ -40,8 +40,13 @@ public: 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 0cc604d63..1cc745769 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 c30f0c9e3..84555fb3c 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 From f54540dea74c5968d6cc34675136e7d5b4b75f70 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 21 Dec 2014 10:51:11 +0000 Subject: [PATCH 2/3] 856 now loads absolute and relative paths correctly --- plugins/VstEffect/VstSubPluginFeatures.cpp | 4 +++- plugins/vst_base/VstPlugin.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index 2a0e625dc..64db352b2 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -84,7 +84,9 @@ void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString pat QDir::Files, QDir::Name ); for(int i = 0; i < dlls.size(); i++) { - filenames->append(path + QDir::separator() + dlls.at( i )); + QString fName = path + QDir::separator() + dlls.at( i ); + fName.remove( 0, 1 ); + filenames->append(fName); } } diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 1cc745769..a283bb9c7 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -172,8 +172,10 @@ void VstPlugin::tryLoad( const QString &remoteVstPluginExecutable ) QString p = m_plugin; - p.remove(0,1); - p = ConfigManager::inst()->vstDir() + p; + if( QFileInfo( p ).dir().isRelative() ) + { + p = ConfigManager::inst()->vstDir() + p; + } sendMessage( message( IdVstLoadPlugin ).addString( QSTR_TO_STDSTR( p ) ) ); From 5fc1b36f6ffc0bfc3c4a4af209c99986d62bf365 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 22 Dec 2014 05:17:53 +0000 Subject: [PATCH 3/3] 856 reformat --- plugins/VstEffect/VstSubPluginFeatures.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/VstEffect/VstSubPluginFeatures.cpp b/plugins/VstEffect/VstSubPluginFeatures.cpp index 64db352b2..a54e4089f 100644 --- a/plugins/VstEffect/VstSubPluginFeatures.cpp +++ b/plugins/VstEffect/VstSubPluginFeatures.cpp @@ -67,7 +67,7 @@ void VstSubPluginFeatures::listSubPluginKeys( const Plugin::Descriptor * _desc, delete dlls; } -void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString path) const +void VstSubPluginFeatures::addPluginsFromDir( QStringList* filenames, QString path ) const { QStringList dirs = QDir ( ConfigManager::inst()->vstDir() + path ). entryList( QStringList() << "*" , @@ -76,17 +76,17 @@ void VstSubPluginFeatures::addPluginsFromDir(QStringList* filenames, QString pat { if(dirs.at( i )[0] != '.' ) { - addPluginsFromDir( filenames, path+QDir::separator() + dirs.at( i ) ); + 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++) + for( int i = 0; i < dlls.size(); i++ ) { QString fName = path + QDir::separator() + dlls.at( i ); fName.remove( 0, 1 ); - filenames->append(fName); + filenames->append( fName ); } }