Esempio n. 1
0
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();
}