void PluginManager::init() { QDir appDirPath = QDir(qApp->applicationDirPath()); QString pluginPath; if (appDirPath.cd("plugins")) { pluginPath = appDirPath.absolutePath(); } if (!pluginPath.isEmpty()) { QDirIterator it(pluginPath); SettingsPrivate *settings = SettingsPrivate::instance(); QMap<QString, PluginInfo> plugins = settings->plugins(); QStringList failedPlugins; while (it.hasNext()) { if (QLibrary::isLibrary(it.next()) && !it.fileInfo().isSymLink()) { // If plugin was recognized by the App at least once if (plugins.contains(it.filePath())) { PluginInfo pluginInfo = plugins.value(it.filePath()); if (pluginInfo.isEnabled() && !this->loadPlugin(it.filePath())) { failedPlugins << it.fileName(); } } else if (!this->loadPlugin(it.filePath())) { failedPlugins << it.fileName(); } } } // If at least one plugin wasn't restored (API has changed for example) if (!failedPlugins.isEmpty()) { this->alertUser(failedPlugins); } } }
/** Copy constructor required for converting in QVariant. */ PluginInfo::PluginInfo(const PluginInfo &pluginInfo) : QObject(pluginInfo.parent()) { _fileName = pluginInfo.fileName(); _pluginName = pluginInfo.pluginName(); _version = pluginInfo.version(); _configurable = pluginInfo.isConfigurable(); _active = pluginInfo.isEnabled(); }