Index: app/qgspythonutils.h =================================================================== --- app/qgspythonutils.h (revision 7278) +++ app/qgspythonutils.h (working copy) @@ -15,6 +15,7 @@ /* $Id$ */ #include +#include // forward declaration for PyObject #ifndef PyObject_HEAD @@ -84,7 +85,13 @@ //! return current path for python plugins static QString pluginsPath(); - + + //! return current path for home directory python plugins + static QString homePluginsPath(); + + //! return list of all available python plugins + static QStringList pluginList(); + //! load python plugin (import) static bool loadPlugin(QString packageName); Index: app/qgspluginmanager.cpp =================================================================== --- app/qgspluginmanager.cpp (revision 7278) +++ app/qgspluginmanager.cpp (working copy) @@ -83,14 +83,13 @@ if (!QgsPythonUtils::isEnabled()) return; - // look for plugins - QDir pluginDir(QgsPythonUtils::pluginsPath(), "*", - QDir::Name | QDir::IgnoreCase, QDir::Dirs | QDir::NoDotAndDotDot); - - for (uint i = 0; i < pluginDir.count(); i++) + // look for plugins systemwide + QStringList pluginList = QgsPythonUtils::pluginList(); + + for (uint i = 0; i < pluginList.size(); i++) { - QString packageName = pluginDir[i]; - + QString packageName = pluginList[i]; + // import plugin's package QgsPythonUtils::loadPlugin(packageName); @@ -125,7 +124,6 @@ pl->setOn(true); } } - } #endif } Index: app/qgspythonutils.cpp =================================================================== --- app/qgspythonutils.cpp (revision 7278) +++ app/qgspythonutils.cpp (working copy) @@ -24,8 +24,9 @@ #include "qgslogger.h" #include +#include +#include - QString QgsPythonUtils::mPluginsPath; PyObject* QgsPythonUtils::mMainModule; PyObject* QgsPythonUtils::mMainDict; @@ -47,7 +48,7 @@ // expect that bindings are installed locally, so add the path to modules // also add path to plugins - runString("sys.path = [\"" + pythonPath() + "\", \"" + pluginsPath() + "\"] + sys.path"); + runString("sys.path = [\"" + homePluginsPath() + "\", \"" + pythonPath() + "\", \"" + pluginsPath() + "\"] + sys.path"); // import SIP if (!runString("from sip import wrapinstance, unwrapinstance")) @@ -284,6 +285,32 @@ return pythonPath() + "/plugins"; } +QString QgsPythonUtils::homePluginsPath() +{ + return QgsApplication::qgisSettingsDirPath() + "/python/plugins/"; +} + +QStringList QgsPythonUtils::pluginList() +{ + QDir pluginDir(QgsPythonUtils::pluginsPath(), "*", + QDir::Name | QDir::IgnoreCase, QDir::Dirs | QDir::NoDotAndDotDot); + + QDir homePluginDir(QgsPythonUtils::homePluginsPath(), "*", + QDir::Name | QDir::IgnoreCase, QDir::Dirs | QDir::NoDotAndDotDot); + + QStringList pluginList = pluginDir.entryList(); + + for (uint i = 0; i < homePluginDir.count(); i++) + { + QString packageName = homePluginDir[i]; + if(!pluginList.contains(packageName)) + pluginList.append(packageName); + + } + + return pluginList; +} + QString QgsPythonUtils::getPluginMetadata(QString pluginName, QString function) { QString command = pluginName + "." + function + "()"; Index: app/qgisapp.cpp =================================================================== --- app/qgisapp.cpp (revision 7278) +++ app/qgisapp.cpp (working copy) @@ -1563,14 +1563,13 @@ if (QgsPythonUtils::isEnabled()) { - // check for python plugins - QDir pluginDir(QgsPythonUtils::pluginsPath(), "*", - QDir::Name | QDir::IgnoreCase, QDir::Dirs | QDir::NoDotAndDotDot); - - for (uint i = 0; i < pluginDir.count(); i++) + // check for python plugins system-wide + QStringList pluginList = QgsPythonUtils::pluginList(); + + for (uint i = 0; i < pluginList.size(); i++) { - QString packageName = pluginDir[i]; - + QString packageName = pluginList[i]; + // import plugin's package if (!QgsPythonUtils::loadPlugin(packageName)) continue; @@ -1596,7 +1595,6 @@ loadPythonPlugin(packageName, pluginName); } } - } #endif }