"\nDenis Zalevskiy, denis.zalewsky@ixonos.com"
"\n\nIxonos Plc, Finland\n"));
+const QString PLUGINS_DIR = "plugins";
+
// Consturctor
MainWindow::MainWindow():
QMainWindow(), // Superclass
seedView_(NULL),
preferencesDialog_(NULL),
settings_(),
+ pluginDirs_(),
// torrentHandles_(),
btSession_()
{
void MainWindow::LoadPlugins()
{
- /// @todo get plugin directory from settings or go through multiple directories
- /// Now we only check the application directory
- pluginsDir_ = QDir(qApp->applicationDirPath());
- pluginsDir_.cd("plugins");
- QStringList nameFilters;
- nameFilters << "*.so";
-
- foreach (QString fileName, pluginsDir_.entryList(nameFilters, QDir::Files)) {
- QPluginLoader pluginLoader(pluginsDir_.absoluteFilePath(fileName));
-
- if (!QLibrary::isLibrary(fileName)) {
- qDebug() << fileName << " not a library";
- }
-
- if (pluginLoader.load()) {
- qDebug() << "Plugin loaded: " << fileName;
- } else {
- qDebug() << "Plugin load failed: " << pluginLoader.errorString();
- }
-
- QObject *baseInstance = pluginLoader.instance();
- if (!baseInstance) {
- qDebug() << "Base instance = NULL.";
- }
-
- qtrapids::PluginInterface *plugin = qobject_cast<qtrapids::PluginInterface*>(baseInstance);
-
- if (!plugin) {
- qDebug() << "Cast failed.";
+ // Get plugin directories from
+ QStringList pluginDirsTmp = settings_.value("plugins/path").toStringList();
+ QStringList nameFilters("*.so");
+
+ /// @todo enable "application directory" for plugin search in development/debug mode only. In release version
+ /// search plugins directory under $HOME/.qtrapids or system library paths
+ pluginDirsTmp << qApp->applicationDirPath();
+ pluginDirsTmp.removeDuplicates();
+
+ foreach (QString dir, pluginDirsTmp) {
+ pluginDirs_.append(QDir(dir));
+ }
+
+ foreach (QDir dir, pluginDirs_) {
+
+ if (dir.cd(PLUGINS_DIR)) {
+
+ foreach (QString fileName, dir.entryList(nameFilters, QDir::Files)) {
+ QPluginLoader pluginLoader(dir.absoluteFilePath(fileName));
+
+ // If plugin not loaded from another directory, then load
+ if (!pluginFileNames_.contains(fileName) && QLibrary::isLibrary(fileName)) {
+
+ if (pluginLoader.load()) {
+ qDebug() << "Plugin loaded: " << fileName;
+ } else {
+ qWarning() << "Plugin load failed: " << pluginLoader.errorString();
+ }
+
+ QObject *baseInstance = pluginLoader.instance();
+ if (!baseInstance) {
+ qDebug() << "Base instance = NULL.";
+ }
+
+ qtrapids::PluginInterface *plugin = qobject_cast<qtrapids::PluginInterface*>(baseInstance);
+
+ if (!plugin) {
+ qDebug() << "Cast failed.";
+ } else {
+ qtrapids::PluginInterface::Info info;
+ info.directory = dir.path();
+ qDebug() << dir.path();
+ plugin->initialize(this, info);
+ pluginFileNames_ += fileName;
+ }
+ } else {
+ qWarning() << "Plugin "
+ << fileName
+ << " already loaded from another directory, or not a valid library file";
+ }
+ }
+
} else {
- plugin->initialize(this);
- pluginFileNames_ += fileName;
+ qWarning() << PLUGINS_DIR << "directory not accessible or does not exist in " << dir.path();
}
}
}