ScriptEngine *loadEngine(const QString &language, Types::ComponentType type, QObject *parent, const QVariantList &args = QVariantList()) { ScriptEngine *engine = 0; auto filter = [&language](const KPluginMetaData &md) -> bool { return md.value(QStringLiteral("X-Plasma-API")) == language; }; QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("plasma/scriptengines"), filter); if (plugins.count()) { const QString componentTypes = plugins.first().value(QStringLiteral("X-Plasma-ComponentTypes")); if (((type & Types::AppletComponent) && componentTypes != QLatin1String("Applet")) || ((type & Types::DataEngineComponent) && componentTypes != QLatin1String("DataEngine"))) { return 0; } KPluginInfo::List lst = KPluginInfo::fromMetaData(plugins); KPluginLoader loader(lst.first().libraryPath()); KPluginFactory *factory = loader.factory(); if (factory) { engine = factory->create<Plasma::ScriptEngine>(0, args); } } return engine; }
void DataSourcesLoader::load() { KPluginInfo::List pluginInfo = KPluginTrader::self()->query("plasma/mediacenter/datasources"); if (pluginInfo.isEmpty()) { qWarning() << "no available data sources"; } Q_FOREACH (const KPluginInfo &info, pluginInfo) { KPluginLoader loader(info.libraryPath()); KPluginFactory* factory = loader.factory(); const QVariantList args = QVariantList() << loader.metaData().toVariantMap(); if(factory) { MediaCenter::AbstractDataSource *dataSource = factory->create<MediaCenter::AbstractDataSource>(0, args); if (dataSource) { dataSource->setMediaLibrary(SingletonFactory::instanceFor<MediaLibrary>()); dataSource->start(); connect(QApplication::instance(), SIGNAL(destroyed(QObject*)), dataSource, SLOT(quit())); qDebug() << "created instance for data source" << info.name(); } else { qDebug() << "Could not create a instance for the data source " << info.name(); } } }
ScriptEngine *loadEngine(const QString &language, Types::ComponentType type, QObject *parent, const QVariantList &args = QVariantList()) { ScriptEngine *engine = 0; auto filter = [&language](const KPluginMetaData &md) -> bool { return md.value(QStringLiteral("X-Plasma-API")) == language; }; QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("plasma/scriptengines"), filter); if (plugins.count()) { const QStringList componentTypes = KPluginMetaData::readStringList(plugins.first().rawData(), QStringLiteral("X-Plasma-ComponentTypes")); if (((type & Types::AppletComponent) && !componentTypes.contains(QLatin1String("Applet"))) || ((type & Types::DataEngineComponent) && !componentTypes.contains(QLatin1String("DataEngine")))) { qCWarning(LOG_PLASMA) << "ScriptEngine" << plugins.first().name() << "does not provide Applet or DataEngine components, returning empty."; return 0; } KPluginInfo::List lst = KPluginInfo::fromMetaData(plugins); KPluginLoader loader(lst.first().libraryPath()); KPluginFactory *factory = loader.factory(); if (factory) { engine = factory->create<Plasma::ScriptEngine>(0, args); } else { qCWarning(LOG_PLASMA) << "Unable to load" << plugins.first().name() << "ScriptEngine"; } } return engine; }
void cPluginManager::findPlugins () { pluginInfo.clear (); KPluginInfo::List pi = KPluginInfo::fromServices (KServiceTypeTrader::self()->query ( QString::fromLatin1("KMuddy/Plugin"), QString::fromLatin1("(Type == 'Service') and ([X-KMuddy-Version] == 2)"))); // fill in the associative array with plugin info KPluginInfo::List::Iterator it; for (it = pi.begin(); it != pi.end(); ++it) { KPluginInfo info = *it; kDebug() << "Found plugin: " << info.name(); pluginInfo[info.name()] = info; } }
void KCMKontactSummary::load() { KService::List offers = KServiceTypeTrader::self()->query( QString::fromLatin1( "Kontact/Plugin" ), QString( "[X-KDE-KontactPluginVersion] == %1" ).arg( KONTACT_PLUGIN_VERSION ) ); QStringList activeSummaries; KConfig config( "kontact_summaryrc" ); KConfigGroup grp( &config, QString() ); if ( !grp.hasKey( "ActiveSummaries" ) ) { activeSummaries << "kontact_kaddressbookplugin"; activeSummaries << "kontact_specialdatesplugin"; activeSummaries << "kontact_korganizerplugin"; activeSummaries << "kontact_todoplugin"; activeSummaries << "kontact_knotesplugin"; activeSummaries << "kontact_kmailplugin"; activeSummaries << "kontact_weatherplugin"; activeSummaries << "kontact_newstickerplugin"; activeSummaries << "kontact_plannerplugin"; } else { activeSummaries = grp.readEntry( "ActiveSummaries", QStringList() ); } mPluginView->clear(); KPluginInfo::List pluginList = KPluginInfo::fromServices( offers, KConfigGroup( &config, "Plugins" ) ); KPluginInfo::List::Iterator it; for ( it = pluginList.begin(); it != pluginList.end(); ++it ) { it->load(); if ( !it->isPluginEnabled() ) { continue; } QVariant var = it->property( "X-KDE-KontactPluginHasSummary" ); if ( var.isValid() && var.toBool() == true ) { PluginItem *item = new PluginItem( *it, mPluginView ); if ( activeSummaries.contains( it->pluginName() ) ) { item->setCheckState( 0, Qt::Checked ); } else { item->setCheckState( 0, Qt::Unchecked ); } } } }
Service *PluginLoader::loadService(const QString &name, const QVariantList &args, QObject *parent) { Service *service = d->isDefaultLoader ? 0 : internalLoadService(name, args, parent); if (service) { return service; } //TODO: scripting API support if (name.isEmpty()) { return new NullService(QString(), parent); } else if (name == QLatin1String("org.kde.servicestorage")) { return new Storage(parent); } // Look for C++ plugins first auto filter = [&name](const KPluginMetaData &md) -> bool { return md.pluginId() == name; }; QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(PluginLoaderPrivate::s_servicesPluginDir, filter); if (plugins.count()) { KPluginInfo::List lst = KPluginInfo::fromMetaData(plugins); KPluginLoader loader(lst.first().libraryPath()); if (!Plasma::isPluginVersionCompatible(loader.pluginVersion())) { return 0; } KPluginFactory *factory = loader.factory(); if (factory) { service = factory->create<Plasma::Service>(0, args); } } if (service) { if (service->name().isEmpty()) { service->setName(name); } return service; } else { return new NullService(name, parent); } }
void DesktopCorona::checkAddPanelAction(const QStringList &sycocaChanges) { if (!sycocaChanges.isEmpty() && !sycocaChanges.contains("services")) { return; } delete m_addPanelAction; m_addPanelAction = 0; delete m_addPanelsMenu; m_addPanelsMenu = 0; KPluginInfo::List panelContainmentPlugins = Plasma::Containment::listContainmentsOfType("panel"); const QString constraint = QString("[X-Plasma-Shell] == '%1' and 'panel' ~in [X-Plasma-ContainmentCategories]") .arg(KGlobal::mainComponent().componentName()); KService::List templates = KServiceTypeTrader::self()->query("Plasma/LayoutTemplate", constraint); if (panelContainmentPlugins.count() + templates.count() == 1) { m_addPanelAction = new QAction(i18n("Add Panel"), this); m_addPanelAction->setData(Plasma::AbstractToolBox::AddTool); connect(m_addPanelAction, SIGNAL(triggered(bool)), this, SLOT(addPanel())); } else if (!panelContainmentPlugins.isEmpty()) {
const QString DiagnosticDialog::generateReport( const KAboutData *aboutData ) { // Get scripts -- we have to assemble 3 lists into one KPluginInfo::List aScripts; const ScriptManager *aScriptManager = ScriptManager::instance(); aScripts.append( aScriptManager->scripts( QLatin1String( "Generic" ) ) ); aScripts.append( aScriptManager->scripts( QLatin1String( "Lyrics" ) ) ); aScripts.append( aScriptManager->scripts( QLatin1String( "Scriptable Service" ) ) ); // Format the data to be readable QString aScriptString; foreach( KPluginInfo aInfo, aScripts ) { if( aInfo.isPluginEnabled() ) aScriptString += " " + aInfo.name() + " (" + aInfo.version() + ")\n"; } // Get plugins -- we have to assemble a list again. KPluginInfo::List aPlugins; const Plugins::PluginManager *aPluginManager = Plugins::PluginManager::instance(); aPlugins.append( aPluginManager->plugins( Plugins::PluginManager::Collection ) ); aPlugins.append( aPluginManager->plugins( Plugins::PluginManager::Service ) ); aPlugins.append( aPluginManager->plugins( Plugins::PluginManager::Importer ) ); QString aPluginString; foreach( KPluginInfo aInfo, aPlugins ) { if( aInfo.isPluginEnabled() ) aPluginString += " " + aInfo.name() + " (" + aInfo.version() + ")\n"; } // Get applets const QStringList appletList = Context::ContextView::self()->currentAppletNames(); QString appletString; foreach( const QString &applet, appletList ) { // Currently we cannot extract the applet version number this way appletString += " " + applet + '\n'; }
ContainmentActions *PluginLoader::loadContainmentActions(Containment *parent, const QString &name, const QVariantList &args) { if (name.isEmpty()) { return 0; } ContainmentActions *actions = d->isDefaultLoader ? 0 : internalLoadContainmentActions(parent, name, args); if (actions) { return actions; } // Look for C++ plugins first auto filter = [&name](const KPluginMetaData &md) -> bool { return md.pluginId() == name; }; QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(PluginLoaderPrivate::s_containmentActionsPluginDir, filter); if (plugins.count()) { KPluginInfo::List lst = KPluginInfo::fromMetaData(plugins); KPluginLoader loader(lst.first().libraryPath()); const QVariantList argsWithMetaData = QVariantList() << loader.metaData().toVariantMap(); KPluginFactory *factory = loader.factory(); if (factory) { actions = factory->create<Plasma::ContainmentActions>(0, argsWithMetaData); } } if (actions) { return actions; } //FIXME: this is only for backwards compatibility, but probably will have to stay //for the time being QString constraint = QStringLiteral("[X-KDE-PluginInfo-Name] == '%1'").arg(name); KService::List offers = KServiceTypeTrader::self()->query(QStringLiteral("Plasma/ContainmentActions"), constraint); if (offers.isEmpty()) { #ifndef NDEBUG qCDebug(LOG_PLASMA) << "offers is empty for " << name; #endif return 0; } KService::Ptr offer = offers.first(); KPluginLoader plugin(*offer); if (!Plasma::isPluginVersionCompatible(plugin.pluginVersion())) { return 0; } QVariantList allArgs; allArgs << offer->storageId() << args; QString error; actions = offer->createInstance<Plasma::ContainmentActions>(parent, allArgs, &error); if (!actions) { #ifndef NDEBUG // qCDebug(LOG_PLASMA) << "Couldn't load containmentActions \"" << name << "\"! reason given: " << error; #endif } return actions; }
MousePluginWidget::MousePluginWidget(const QString &pluginName, const QString &trigger, QGridLayout *layoutHack, QWidget *parent) : QObject(parent), m_configDlg(0), m_containment(0), m_lastConfigLocation(trigger), m_tempConfigParent(QString(), KConfig::SimpleConfig) { KPluginInfo::List plugins = Plasma::ContainmentActions::listContainmentActionsInfo(); if (plugins.isEmpty()) { //panic!! QLabel *fail = new QLabel(i18n("No plugins found, check your installation."), parent); layoutHack->addWidget(fail, 0, 0); return; } //make us some widgets m_pluginList = new QComboBox(parent); m_aboutButton = new QToolButton(parent); m_clearButton = new QToolButton(parent); m_triggerButton = new MouseInputButton(parent); m_configButton = new QToolButton(parent); //m_ui.description->setText(plugin.comment()); //plugin list //FIXME is there some way to share this across all the entries? foreach (const KPluginInfo& plugin, plugins) { if (plugin.property("NoDisplay").toBool()) { continue; } m_pluginList->addItem(KIcon(plugin.icon()), plugin.name(), QVariant::fromValue(plugin)); if (plugin.pluginName() == pluginName) { m_pluginList->setCurrentIndex(m_pluginList->count() - 1); m_plugin = plugin; } } if (! m_plugin.isValid()) { //probably an empty string; pick the first one m_pluginList->setCurrentIndex(0); m_plugin = plugins.first(); } //I can haz config? m_tempConfig = KConfigGroup(&m_tempConfigParent, "test"); if (!m_plugin.property("X-Plasma-HasConfigurationInterface").toBool()) { m_configButton->setVisible(false); } setTrigger(trigger); //pretty icons for the buttons m_aboutButton->setIcon(KIcon("dialog-information")); m_aboutButton->setToolTip(i18nc("About mouse action", "About")); m_triggerButton->setIcon(KIcon("input-mouse")); m_configButton->setIcon(KIcon("configure")); m_configButton->setToolTip(i18nc("Configure mouse action", "Configure")); m_clearButton->setIcon(KIcon("list-remove")); m_clearButton->setToolTip(i18nc("Remove mouse action", "Remove")); //HACK //FIXME what's the Right Way to do this? int row = layoutHack->rowCount(); layoutHack->addWidget(m_triggerButton, row, 0); layoutHack->addWidget(m_pluginList, row, 1); layoutHack->addWidget(m_configButton, row, 2); layoutHack->addWidget(m_aboutButton, row, 3); layoutHack->addWidget(m_clearButton, row, 4); //connect connect(m_pluginList, SIGNAL(currentIndexChanged(int)), this, SLOT(setPlugin(int))); connect(m_triggerButton, SIGNAL(triggerChanged(QString,QString)), this, SLOT(changeTrigger(QString,QString))); connect(m_configButton, SIGNAL(clicked()), this, SLOT(configure())); connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clearTrigger())); connect(m_aboutButton, SIGNAL(clicked()), this, SLOT(showAbout())); }