void IOPluginCache::load(const QDir& dir) { qDebug() << Q_FUNC_INFO << dir.path(); /* Check that we can access the directory */ if (dir.exists() == false || dir.isReadable() == false) return; /* Loop thru all files in the directory */ QStringListIterator it(dir.entryList()); while (it.hasNext() == true) { /* Attempt to load a plugin from the path */ QString fileName(it.next()); QString path = dir.absoluteFilePath(fileName); QPluginLoader loader(path, this); QLCIOPlugin* ptr = qobject_cast<QLCIOPlugin*> (loader.instance()); if (ptr != NULL) { /* Check for duplicates */ if (plugin(ptr->name()) == NULL) { /* New plugin. Append and init. */ qDebug() << "Loaded I/O plugin" << ptr->name() << "from" << fileName; emit pluginLoaded(ptr->name()); ptr->init(); m_plugins << ptr; connect(ptr, SIGNAL(configurationChanged()), this, SLOT(slotConfigurationChanged())); #if !defined(Q_OS_ANDROID) HotPlugMonitor::connectListener(ptr); #endif // QLCi18n::loadTranslation(p->name().replace(" ", "_")); } else { /* Duplicate plugin. Unload it. */ qWarning() << Q_FUNC_INFO << "Discarded duplicate I/O plugin" << ptr->name() << "in" << path; loader.unload(); } } else { qWarning() << Q_FUNC_INFO << fileName << "doesn't contain an I/O plugin:" << loader.errorString(); loader.unload(); } } }