Exemple #1
0
/** Disable a previously registered plugin (so it still can be listed in options). */
void SettingsPrivate::disablePlugin(const QString &absFilePath)
{
	QMap<QString, QVariant> map = value("plugins").toMap();
	PluginInfo pluginInfo = map.value(absFilePath).value<PluginInfo>();
	pluginInfo.setEnabled(false);
	map.insert(absFilePath, QVariant::fromValue(pluginInfo));
	this->setValue("plugins", map);
}
/** Load a plugin by its location on the hard drive. */
bool PluginManager::loadPlugin(const QString &pluginAbsPath)
{
	QPluginLoader pluginLoader(pluginAbsPath, this);
	QObject *plugin = pluginLoader.instance();
	if (plugin) {
		BasicPlugin *basic = dynamic_cast<BasicPlugin*>(plugin);
		basic->setParent(this);
		SettingsPrivate *settings = SettingsPrivate::instance();
		if (basic) {
			PluginInfo pluginInfo;
			pluginInfo.setAbsFilePath(pluginAbsPath);
			pluginInfo.setPluginName(basic->name());
			pluginInfo.setVersion(basic->version());
			pluginInfo.setConfigPage(basic->isConfigurable());
			pluginInfo.setEnabled(true);

			settings->addPlugin(pluginInfo);
			if (basic->isConfigurable()) {
				QString pluginLang(":/translations/" + basic->name() + "_" + settings->language());
				if (basic->translator.load(pluginLang)) {
					QApplication::installTranslator(&basic->translator);
				}
			}

			// Keep references of loaded plugins, to be able to unload them later
			_loadedPlugins.insert(pluginAbsPath, basic);
		} else {
			return false;
		}

		basic->init();
		if (MediaPlayerPlugin *mediaPlayerPlugin = qobject_cast<MediaPlayerPlugin*>(plugin)) {
			this->loadMediaPlayerPlugin(mediaPlayerPlugin);
		} else if (ItemViewPlugin *itemViewPlugin = qobject_cast<ItemViewPlugin*>(plugin)) {
			this->loadItemViewPlugin(itemViewPlugin);
		} else if (RemoteMediaPlayerPlugin *remoteMediaPlayerPlugin = qobject_cast<RemoteMediaPlayerPlugin*>(plugin)) {
			this->loadRemoteMediaPlayerPlugin(remoteMediaPlayerPlugin);
		} else if (TagEditorPlugin *tagEditorPlugin = qobject_cast<TagEditorPlugin*>(plugin)) {
			this->loadTagEditorPlugin(tagEditorPlugin);
		}
	}
	return plugin != nullptr;
}