From 942e5f892b57a5f2221beb3a0fff2ff2bb8df15a Mon Sep 17 00:00:00 2001
From: Leo Franchi <lfranchi@kde.org>
Date: Sat, 7 May 2011 18:49:38 -0400
Subject: [PATCH] autodetect and populate resovlers named foo_tomahawkresolver*
 in the binary dir of tomahawk

---
 src/resolversmodel.cpp | 28 ++++++++++++++++++++++++++++
 src/resolversmodel.h   |  2 ++
 src/tomahawkapp.cpp    |  4 ++--
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/resolversmodel.cpp b/src/resolversmodel.cpp
index 07e7c8aca..f3664cef9 100644
--- a/src/resolversmodel.cpp
+++ b/src/resolversmodel.cpp
@@ -39,6 +39,7 @@ ResolversModel::ResolversModel( const QStringList& allResolvers, const QStringLi
      if( changed )
         TomahawkSettings::instance()->setEnabledScriptResolvers( m_enabledResolvers );
 
+     addInstalledResolvers();
 }
 
 
@@ -152,3 +153,30 @@ ResolversModel::enabledResolvers() const
     return m_enabledResolvers;
 }
 
+void
+ResolversModel::addInstalledResolvers()
+{
+    QList< QDir > pluginDirs;
+
+    QDir appDir( qApp->applicationDirPath() );
+    QDir libDir( CMAKE_INSTALL_PREFIX "/lib" );
+
+    QDir lib64Dir( appDir );
+    lib64Dir.cdUp();
+    lib64Dir.cd( "lib64" );
+
+    pluginDirs << appDir << libDir << lib64Dir << QDir( qApp->applicationDirPath() );
+    foreach ( const QDir& pluginDir, pluginDirs )
+    {
+        qDebug() << "Checking directory for resolvers:" << pluginDir;
+        foreach ( QString fileName, pluginDir.entryList( QStringList() << "*_tomahawkresolver*", QDir::Files ) ){
+            if ( fileName.contains( "_tomahawkresolver" ) ) {
+                const QString path = pluginDir.absoluteFilePath( fileName );
+                if( !m_allResolvers.contains( path ) ) {
+                    m_allResolvers.append( path );
+                }
+            }
+        }
+    }
+}
+
diff --git a/src/resolversmodel.h b/src/resolversmodel.h
index c6cf8fa73..e7890fabf 100644
--- a/src/resolversmodel.h
+++ b/src/resolversmodel.h
@@ -48,6 +48,8 @@ public:
     QStringList allResolvers() const;
     QStringList enabledResolvers() const;
 private:
+    void addInstalledResolvers();
+
     QStringList m_allResolvers;
     QStringList m_enabledResolvers;
 };
diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp
index 8059306c2..e3e614b34 100644
--- a/src/tomahawkapp.cpp
+++ b/src/tomahawkapp.cpp
@@ -182,7 +182,7 @@ TomahawkApp::init()
     registerMetaTypes();
 
     new TomahawkSettings( this );
-    
+
 #ifdef LIBLASTFM_FOUND
     qDebug() << "Setting NAM.";
     TomahawkUtils::setNam( lastfm::nam() );
@@ -204,7 +204,7 @@ TomahawkApp::init()
     }
     else
         TomahawkUtils::setProxy( new QNetworkProxy( QNetworkProxy::NoProxy ) );
-    
+
     Echonest::Config::instance()->setAPIKey( "JRIHWEP6GPOER2QQ6" );
 
     m_audioEngine = new AudioEngine;